From 753d5db251e09bdd4bc5025ea7ec4e6e69022cb0 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 18 Nov 2012 14:05:52 +0100 Subject: [PATCH] Updated documentation --- doc/api/a00001.html | 39 +- doc/api/a00002.html | 69 +- doc/api/a00002_source.html | 522 +++ doc/api/a00003.html | 81 +- doc/api/a00003_source.html | 106 + doc/api/a00004.html | 53 +- doc/api/a00004_source.html | 1340 +++--- doc/api/a00005.html | 53 +- doc/api/a00005_source.html | 882 +++- doc/api/a00006.html | 53 +- doc/api/a00006_source.html | 1041 +---- doc/api/a00007.html | 80 +- doc/api/a00007_source.html | 923 +---- doc/api/a00008.html | 111 +- doc/api/a00008_source.html | 312 +- doc/api/a00009.html | 98 - doc/api/a00009_source.html | 197 +- doc/api/a00010.html | 272 +- doc/api/a00010_source.html | 270 +- doc/api/a00011.html | 93 + doc/api/a00011_source.html | 187 +- doc/api/a00012.html | 204 +- doc/api/a00012_source.html | 233 +- doc/api/a00013.html | 389 +- doc/api/a00013_source.html | 299 +- doc/api/a00014.html | 77 +- doc/api/a00014_source.html | 187 +- doc/api/a00015.html | 380 +- doc/api/a00015_source.html | 354 +- doc/api/a00016.html | 92 - doc/api/a00016_source.html | 149 +- doc/api/a00017.html | 123 +- doc/api/a00017_source.html | 260 +- doc/api/a00018.html | 92 - doc/api/a00018_source.html | 143 +- doc/api/a00019.html | 128 +- doc/api/a00019_source.html | 287 +- doc/api/a00020_source.html | 330 +- doc/api/a00021.html | 56 +- doc/api/a00021_source.html | 163 +- doc/api/a00022.html | 111 +- doc/api/a00022_source.html | 375 +- doc/api/a00023.html | 86 +- doc/api/a00023_source.html | 205 +- doc/api/a00024.html | 76 +- doc/api/a00024_source.html | 185 +- doc/api/a00025.html | 86 +- doc/api/a00025_source.html | 193 +- doc/api/a00026.html | 181 +- doc/api/a00026_source.html | 383 +- doc/api/a00027.html | 86 +- doc/api/a00027_source.html | 175 +- doc/api/a00028.html | 91 +- doc/api/a00028_source.html | 213 +- doc/api/a00029.html | 101 +- doc/api/a00029_source.html | 241 +- doc/api/a00030.html | 102 +- doc/api/a00030_source.html | 217 +- doc/api/a00031.html | 77 +- doc/api/a00031_source.html | 161 +- doc/api/a00032.html | 87 +- doc/api/a00032_source.html | 184 +- doc/api/a00033.html | 126 +- doc/api/a00033_source.html | 235 +- doc/api/a00034.html | 96 +- doc/api/a00034_source.html | 201 +- doc/api/a00035.html | 53 +- doc/api/a00035_source.html | 296 +- doc/api/a00036.html | 63 +- doc/api/a00036_source.html | 179 +- doc/api/a00037.html | 143 +- doc/api/a00037_source.html | 733 ++-- doc/api/a00038.html | 61 +- doc/api/a00038_source.html | 175 +- doc/api/a00039.html | 47 +- doc/api/a00039_source.html | 121 +- doc/api/a00040.html | 93 +- doc/api/a00040_source.html | 233 +- doc/api/a00041.html | 56 +- doc/api/a00041_source.html | 159 +- doc/api/a00042.html | 91 +- doc/api/a00042_source.html | 199 +- doc/api/a00043.html | 76 +- doc/api/a00043_source.html | 210 +- doc/api/a00044.html | 53 +- doc/api/a00044_source.html | 219 +- doc/api/a00045.html | 47 +- doc/api/a00045_source.html | 199 +- doc/api/a00046.html | 47 +- doc/api/a00046_source.html | 193 +- doc/api/a00047_source.html | 179 +- doc/api/a00048.html | 47 +- doc/api/a00048_source.html | 137 +- doc/api/a00049.html | 47 +- doc/api/a00049_source.html | 137 +- doc/api/a00050.html | 56 +- doc/api/a00050_source.html | 161 +- doc/api/a00051_source.html | 3629 +++++++++-------- doc/api/a00052.html | 71 +- doc/api/a00052_source.html | 193 +- doc/api/a00053.html | 63 +- doc/api/a00053_source.html | 169 +- doc/api/a00054.html | 459 ++- doc/api/a00054_source.html | 663 ++- doc/api/a00055.html | 69 +- doc/api/a00055_source.html | 189 +- doc/api/a00056.html | 63 +- doc/api/a00056_source.html | 163 +- doc/api/a00057.html | 113 +- doc/api/a00057_source.html | 273 +- doc/api/a00058.html | 96 +- doc/api/a00058_source.html | 223 +- doc/api/a00059.html | 93 +- doc/api/a00059_source.html | 237 +- doc/api/a00060.html | 125 +- doc/api/a00060_source.html | 347 +- doc/api/a00061.html | 56 +- doc/api/a00061_source.html | 163 +- doc/api/a00062.html | 63 +- doc/api/a00062_source.html | 173 +- doc/api/a00063.html | 68 +- doc/api/a00063_source.html | 185 +- doc/api/a00064_source.html | 132 +- doc/api/a00065.html | 108 +- doc/api/a00065_source.html | 257 +- doc/api/a00066.html | 58 +- doc/api/a00066_source.html | 165 +- doc/api/a00067.html | 63 +- doc/api/a00067_source.html | 175 +- doc/api/a00068.html | 120 +- doc/api/a00068_source.html | 205 +- doc/api/a00069.html | 283 +- doc/api/a00069_source.html | 297 +- doc/api/a00070.html | 78 +- doc/api/a00070_source.html | 189 +- doc/api/a00071.html | 63 +- doc/api/a00071_source.html | 171 +- doc/api/a00072_source.html | 43 +- doc/api/a00073.html | 58 +- doc/api/a00073_source.html | 165 +- doc/api/a00074.html | 61 +- doc/api/a00074_source.html | 167 +- doc/api/a00075.html | 56 +- doc/api/a00075_source.html | 161 +- doc/api/a00076.html | 160 +- doc/api/a00076_source.html | 495 +-- doc/api/a00077.html | 163 +- doc/api/a00077_source.html | 377 +- doc/api/a00078.html | 89 +- doc/api/a00078_source.html | 211 +- doc/api/a00079.html | 196 - doc/api/a00079_source.html | 174 +- doc/api/a00080.html | 63 +- doc/api/a00080_source.html | 169 +- doc/api/a00081.html | 115 +- doc/api/a00081_source.html | 225 +- doc/api/a00082.html | 106 - doc/api/a00082_source.html | 180 +- doc/api/a00083.html | 92 +- doc/api/a00083_source.html | 800 +--- doc/api/{a00085.html => a00084.html} | 56 +- doc/api/a00084_source.html | 905 +++- doc/api/a00085_source.html | 540 +-- doc/api/a00086.html | 67 +- doc/api/a00086_source.html | 438 +- doc/api/a00087.html | 84 +- doc/api/a00087_source.html | 194 +- doc/api/a00088.html | 87 +- doc/api/a00088_source.html | 178 +- doc/api/a00089.html | 68 +- doc/api/a00089_source.html | 483 +-- doc/api/a00090.html | 85 +- doc/api/a00090_source.html | 527 ++- doc/api/a00091.html | 108 +- doc/api/a00091_source.html | 269 +- doc/api/a00092.html | 128 +- doc/api/a00092_source.html | 384 +- doc/api/a00093.html | 136 +- doc/api/a00093_source.html | 336 +- doc/api/a00094.html | 65 +- doc/api/a00094_source.html | 274 +- doc/api/a00095.html | 61 +- doc/api/a00095_source.html | 325 +- doc/api/a00096.html | 66 +- doc/api/a00096_source.html | 263 +- doc/api/a00097.html | 73 +- doc/api/a00097_source.html | 220 +- doc/api/a00098.html | 71 +- doc/api/a00098_source.html | 398 +- doc/api/a00099.html | 79 +- doc/api/a00099_source.html | 560 +-- doc/api/a00100.html | 70 +- doc/api/a00100_source.html | 524 ++- doc/api/a00101.html | 70 +- doc/api/a00101_source.html | 533 ++- doc/api/a00102.html | 76 +- doc/api/a00102_source.html | 574 ++- doc/api/a00103.html | 65 +- doc/api/a00103_source.html | 574 +-- doc/api/a00104.html | 70 +- doc/api/a00104_source.html | 545 ++- doc/api/a00105.html | 70 +- doc/api/a00105_source.html | 547 ++- doc/api/a00106.html | 76 +- doc/api/a00106_source.html | 578 ++- doc/api/a00107.html | 196 +- doc/api/a00107_source.html | 709 ++-- doc/api/a00108.html | 363 +- doc/api/a00108_source.html | 558 ++- doc/api/a00109.html | 115 +- doc/api/a00109_source.html | 220 +- doc/api/a00110.html | 53 +- doc/api/a00110_source.html | 129 +- doc/api/a00111.html | 53 +- doc/api/a00111_source.html | 284 +- doc/api/a00112.html | 72 +- doc/api/a00112_source.html | 499 +-- doc/api/a00113.html | 90 +- doc/api/a00113_source.html | 579 ++- doc/api/a00114.html | 90 +- doc/api/a00114_source.html | 649 ++- doc/api/a00115.html | 94 +- doc/api/a00115_source.html | 444 +- doc/api/a00116.html | 93 + doc/api/a00116_source.html | 146 +- doc/api/a00117.html | 97 - doc/api/a00117_source.html | 181 +- doc/api/a00118.html | 90 - doc/api/a00118_source.html | 147 +- doc/api/a00119.html | 98 +- doc/api/a00119_source.html | 228 +- doc/api/a00120.html | 80 +- doc/api/a00120_source.html | 216 +- doc/api/a00121.html | 81 +- doc/api/a00121_source.html | 191 +- doc/api/a00122.html | 84 +- doc/api/a00122_source.html | 204 +- doc/api/a00123.html | 78 +- doc/api/a00123_source.html | 279 +- doc/api/a00124.html | 84 + doc/api/a00124_source.html | 120 + doc/api/{a00064.html => a00125.html} | 59 +- doc/api/a00125_source.html | 222 + doc/api/a00127.html | 1040 ----- doc/api/a00128.html | 334 -- doc/api/a00129.html | 1042 ++++- doc/api/a00130.html | 524 +-- doc/api/a00131.html | 510 ++- doc/api/a00132.html | 467 ++- doc/api/a00133.html | 414 +- doc/api/a00134.html | 501 +-- doc/api/a00135.html | 570 ++- doc/api/a00136.html | 531 ++- doc/api/a00137.html | 441 +- doc/api/a00138.html | 80 +- doc/api/a00139.html | 172 +- doc/api/a00140.html | 796 +--- doc/api/a00141.html | 1733 +------- doc/api/a00142.html | 788 +++- doc/api/a00143.html | 1394 ++++++- doc/api/a00144.html | 193 +- doc/api/a00145.html | 1965 ++------- doc/api/a00146.html | 214 +- doc/api/a00147.html | 1007 ++--- doc/api/a00148.html | 196 +- doc/api/a00149.html | 1986 +++++++-- doc/api/a00150.html | 249 +- doc/api/a00151.html | 869 +++- doc/api/a00152.html | 2587 +----------- doc/api/a00153.html | 647 ++- doc/api/a00154.html | 480 +-- doc/api/a00155.html | 429 +- doc/api/a00156.html | 92 +- doc/api/a00157.html | 2707 +++++++++++- doc/api/a00158.html | 438 +- doc/api/a00159.html | 217 +- doc/api/a00160.html | 622 +-- doc/api/a00161.html | 406 +- doc/api/a00162.html | 575 +-- doc/api/a00163.html | 295 +- doc/api/a00164.html | 521 +-- doc/api/a00165.html | 151 +- doc/api/a00166.html | 860 ++-- doc/api/a00167.html | 257 +- doc/api/a00168.html | 454 ++- doc/api/a00169.html | 213 +- doc/api/a00170.html | 523 ++- doc/api/a00171.html | 221 +- doc/api/a00172.html | 294 +- doc/api/a00173.html | 207 +- doc/api/a00174.html | 327 +- doc/api/a00175.html | 251 +- doc/api/a00176.html | 294 +- doc/api/a00177.html | 93 +- doc/api/a00178.html | 308 +- doc/api/a00179.html | 465 +-- doc/api/a00180.html | 248 +- doc/api/a00181.html | 303 +- doc/api/a00182.html | 177 +- doc/api/a00183.html | 389 +- doc/api/a00184.html | 245 +- doc/api/a00185.html | 489 +-- doc/api/a00186.html | 92 +- doc/api/a00187.html | 91 +- doc/api/a00188.html | 382 +- doc/api/a00189.html | 209 +- doc/api/a00190.html | 207 +- doc/api/a00191.html | 147 +- doc/api/a00192.html | 251 +- doc/api/a00193.html | 191 +- doc/api/a00194.html | 95 +- doc/api/a00195.html | 753 +--- doc/api/a00196.html | 198 +- doc/api/a00197.html | 133 +- doc/api/a00198.html | 706 +++- doc/api/a00199.html | 383 +- doc/api/a00200.html | 379 +- doc/api/a00201.html | 45 +- doc/api/a00202.html | 203 +- doc/api/a00203.html | 253 +- doc/api/a00204.html | 171 +- doc/api/a00205.html | 401 +- doc/api/a00206.html | 488 +-- doc/api/a00207.html | 448 +- doc/api/a00208.html | 43 +- doc/api/a00209.html | 79 +- doc/api/a00210.html | 79 +- doc/api/a00211.html | 119 +- doc/api/a00212.html | 99 +- doc/api/a00213.html | 79 +- doc/api/a00214.html | 39 +- doc/api/a00215.html | 59 +- doc/api/a00217.html | 74 - doc/api/a00218.html | 75 - doc/api/annotated.html | 70 - doc/api/background.jpg | Bin 0 -> 1019860 bytes doc/api/bc_s.png | Bin 705 -> 676 bytes doc/api/bdwn.png | Bin 0 -> 147 bytes doc/api/classes.html | 76 - doc/api/closed.png | Bin 126 -> 132 bytes .../dir_1a190e7f93f4503d85aaef18e89b9041.html | 85 + .../dir_4cc70906cceed54662c805106db410fc.html | 59 + .../dir_61748fa02e1156ca28a06d1638c8a86e.html | 141 + .../dir_934f46a345653ef2b3014a1b37a162c1.html | 57 + .../dir_a844bf6d5a07b8853f8463b41029861e.html | 70 + .../dir_abb3ddac8d2c26e45fecc003279ba790.html | 177 + .../dir_bf513233250988b6ff3b72f8482c1597.html | 57 + .../dir_d0b7d2b076d3071c16656cd994e0cf09.html | 57 + .../dir_e217bba5d90990da93f61f0ea8b942dc.html | 59 + doc/api/doxygen.png | Bin 3942 -> 3779 bytes doc/api/dynsections.js | 78 + doc/api/files.html | 285 +- doc/api/ftv2blank.png | Bin 0 -> 86 bytes doc/api/ftv2cl.png | Bin 0 -> 453 bytes doc/api/ftv2doc.png | Bin 0 -> 746 bytes doc/api/ftv2folderclosed.png | Bin 0 -> 616 bytes doc/api/ftv2folderopen.png | Bin 0 -> 597 bytes doc/api/ftv2lastnode.png | Bin 0 -> 86 bytes doc/api/ftv2link.png | Bin 0 -> 746 bytes doc/api/ftv2mlastnode.png | Bin 0 -> 246 bytes doc/api/ftv2mnode.png | Bin 0 -> 246 bytes doc/api/ftv2mo.png | Bin 0 -> 403 bytes doc/api/ftv2node.png | Bin 0 -> 86 bytes doc/api/ftv2ns.png | Bin 0 -> 388 bytes doc/api/ftv2plastnode.png | Bin 0 -> 229 bytes doc/api/ftv2pnode.png | Bin 0 -> 229 bytes doc/api/ftv2splitbar.png | Bin 0 -> 314 bytes doc/api/ftv2vertline.png | Bin 0 -> 86 bytes doc/api/functions.html | 73 - doc/api/functions_func.html | 73 - doc/api/index.html | 42 +- doc/api/jquery.js | 62 +- doc/api/{logo-mini.png => logo.png} | Bin doc/api/modules.html | 225 +- doc/api/nav_f.png | Bin 159 -> 153 bytes doc/api/nav_g.png | Bin 0 -> 95 bytes doc/api/nav_h.png | Bin 97 -> 98 bytes doc/api/open.png | Bin 118 -> 123 bytes doc/api/pages.html | 49 +- doc/api/sync_off.png | Bin 0 -> 853 bytes doc/api/sync_on.png | Bin 0 -> 845 bytes doc/api/tab_a.png | Bin 140 -> 142 bytes doc/api/tab_b.png | Bin 178 -> 170 bytes doc/api/tab_h.png | Bin 192 -> 177 bytes doc/api/tab_s.png | Bin 189 -> 184 bytes doc/glm-0.9.4.pdf | Bin 1067296 -> 0 bytes doc/glm.pdf | Bin 1067296 -> 1067183 bytes doc/man.doxy | 108 +- readme.txt | 4 +- 389 files changed, 47803 insertions(+), 49899 deletions(-) create mode 100644 doc/api/a00002_source.html create mode 100644 doc/api/a00003_source.html delete mode 100644 doc/api/a00009.html create mode 100644 doc/api/a00011.html delete mode 100644 doc/api/a00016.html delete mode 100644 doc/api/a00018.html delete mode 100644 doc/api/a00079.html delete mode 100644 doc/api/a00082.html rename doc/api/{a00085.html => a00084.html} (61%) create mode 100644 doc/api/a00116.html delete mode 100644 doc/api/a00117.html delete mode 100644 doc/api/a00118.html create mode 100644 doc/api/a00124.html create mode 100644 doc/api/a00124_source.html rename doc/api/{a00064.html => a00125.html} (57%) create mode 100644 doc/api/a00125_source.html delete mode 100644 doc/api/a00127.html delete mode 100644 doc/api/a00128.html delete mode 100644 doc/api/a00217.html delete mode 100644 doc/api/a00218.html delete mode 100644 doc/api/annotated.html create mode 100644 doc/api/background.jpg create mode 100644 doc/api/bdwn.png delete mode 100644 doc/api/classes.html create mode 100644 doc/api/dir_1a190e7f93f4503d85aaef18e89b9041.html create mode 100644 doc/api/dir_4cc70906cceed54662c805106db410fc.html create mode 100644 doc/api/dir_61748fa02e1156ca28a06d1638c8a86e.html create mode 100644 doc/api/dir_934f46a345653ef2b3014a1b37a162c1.html create mode 100644 doc/api/dir_a844bf6d5a07b8853f8463b41029861e.html create mode 100644 doc/api/dir_abb3ddac8d2c26e45fecc003279ba790.html create mode 100644 doc/api/dir_bf513233250988b6ff3b72f8482c1597.html create mode 100644 doc/api/dir_d0b7d2b076d3071c16656cd994e0cf09.html create mode 100644 doc/api/dir_e217bba5d90990da93f61f0ea8b942dc.html create mode 100644 doc/api/dynsections.js create mode 100644 doc/api/ftv2blank.png create mode 100644 doc/api/ftv2cl.png create mode 100644 doc/api/ftv2doc.png create mode 100644 doc/api/ftv2folderclosed.png create mode 100644 doc/api/ftv2folderopen.png create mode 100644 doc/api/ftv2lastnode.png create mode 100644 doc/api/ftv2link.png create mode 100644 doc/api/ftv2mlastnode.png create mode 100644 doc/api/ftv2mnode.png create mode 100644 doc/api/ftv2mo.png create mode 100644 doc/api/ftv2node.png create mode 100644 doc/api/ftv2ns.png create mode 100644 doc/api/ftv2plastnode.png create mode 100644 doc/api/ftv2pnode.png create mode 100644 doc/api/ftv2splitbar.png create mode 100644 doc/api/ftv2vertline.png delete mode 100644 doc/api/functions.html delete mode 100644 doc/api/functions_func.html rename doc/api/{logo-mini.png => logo.png} (100%) create mode 100644 doc/api/nav_g.png create mode 100644 doc/api/sync_off.png create mode 100644 doc/api/sync_on.png delete mode 100644 doc/glm-0.9.4.pdf diff --git a/doc/api/a00001.html b/doc/api/a00001.html index a538b309..c80d7a66 100644 --- a/doc/api/a00001.html +++ b/doc/api/a00001.html @@ -2,67 +2,54 @@ - + Differences between GLSL and GLM core + + - - - -
- - +
- - - - - - - - +
- - + + -
+
Differences between GLSL and GLM core
-
+

GLM comes very close to replicating GLSL, but it is not exact. Here is a list of differences between GLM and GLSL:

  • Precision qualifiers. In GLSL numeric types can have qualifiers that define the precision of that type. While OpenGL's GLSL ignores these qualifiers, OpenGL ES's version of GLSL uses them.

    -

    C++ has no language equivalent to precision qualifiers. Instead, GLM provides a set of typedefs for each kind of precision qualifier and type. These types can be found in their own section.

    +

    C++ has no language equivalent to precision qualifiers. Instead, GLM provides a set of typedefs for each kind of precision qualifier and type. These types can be found in their own section.

    Functions that take types tend to be templated on those types, so they can take these qualified types just as well as the regular ones.

-
- - + + - diff --git a/doc/api/a00002.html b/doc/api/a00002.html index 10775298..2be95c03 100644 --- a/doc/api/a00002.html +++ b/doc/api/a00002.html @@ -2,78 +2,67 @@ - -half Class Reference + +_detail.hpp File Reference + + - - - -
- - +
- - - - - - - - +
- - + + - + +
+
_detail.hpp File Reference
+
- -

List of all members.

-

Detailed Description

-

16-bit floating point type.

- -

Definition at line 44 of file type_half.hpp.

-
+

Go to the source code of this file.

+

Detailed Description

+

OpenGL Mathematics (glm.g-truc.net)

+

Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

+

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+

GLM Core

+
Date
2008-07-24 / 2011-06-14
+
Author
Christophe Riccio
+

Definition in file _detail.hpp.

+
+ - diff --git a/doc/api/a00002_source.html b/doc/api/a00002_source.html new file mode 100644 index 00000000..6ebde8b3 --- /dev/null +++ b/doc/api/a00002_source.html @@ -0,0 +1,522 @@ + + + + + +_detail.hpp Source File + + + + + + +
+
+ + + + + + +
+
+ + + + + +
+
+
+
_detail.hpp
+
+
+Go to the documentation of this file.
1 
+
2 
+
3 
+
4 
+
5 
+
6 
+
7 
+
8 
+
9 
+
10 
+
11 
+
12 
+
13 
+
14 
+
15 
+
16 
+
17 
+
18 
+
19 
+
20 
+
21 
+
22 
+
23 
+
24 
+
25 
+
26 
+
27 
+
28 
+
29 #ifndef glm_core_detail
+
30 #define glm_core_detail
+
31 
+
32 #include "setup.hpp"
+
33 #include <cassert>
+
34 #if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
+
35 #include <cstdint>
+
36 #endif
+
37 
+
38 namespace glm{
+
39 namespace detail
+
40 {
+
41  class half;
+
42 
+
43 #if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
+
44  typedef int64_t sint64;
+
45  typedef uint64_t uint64;
+
46 #elif(GLM_COMPILER & GLM_COMPILER_VC)
+
47  typedef signed __int64 sint64;
+
48  typedef unsigned __int64 uint64;
+
49 #elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG))
+
50  __extension__ typedef signed long long sint64;
+
51  __extension__ typedef unsigned long long uint64;
+
52 #elif(GLM_COMPILER & GLM_COMPILER_BC)
+
53  typedef Int64 sint64;
+
54  typedef Uint64 uint64;
+
55 #else//unknown compiler
+
56  typedef signed long long sint64;
+
57  typedef unsigned long long uint64;
+
58 #endif//GLM_COMPILER
+
59 
+
60  template<bool C>
+
61  struct If
+
62  {
+
63  template<typename F, typename T>
+
64  static GLM_FUNC_QUALIFIER T apply(F functor, const T& val)
+
65  {
+
66  return functor(val);
+
67  }
+
68  };
+
69 
+
70  template<>
+
71  struct If<false>
+
72  {
+
73  template<typename F, typename T>
+
74  static GLM_FUNC_QUALIFIER T apply(F, const T& val)
+
75  {
+
76  return val;
+
77  }
+
78  };
+
79 
+
80  //template <typename T>
+
81  //struct traits
+
82  //{
+
83  // static const bool is_signed = false;
+
84  // static const bool is_float = false;
+
85  // static const bool is_vector = false;
+
86  // static const bool is_matrix = false;
+
87  // static const bool is_genType = false;
+
88  // static const bool is_genIType = false;
+
89  // static const bool is_genUType = false;
+
90  //};
+
91 
+
92  //template <>
+
93  //struct traits<half>
+
94  //{
+
95  // static const bool is_float = true;
+
96  // static const bool is_genType = true;
+
97  //};
+
98 
+
99  //template <>
+
100  //struct traits<float>
+
101  //{
+
102  // static const bool is_float = true;
+
103  // static const bool is_genType = true;
+
104  //};
+
105 
+
106  //template <>
+
107  //struct traits<double>
+
108  //{
+
109  // static const bool is_float = true;
+
110  // static const bool is_genType = true;
+
111  //};
+
112 
+
113  //template <typename genType>
+
114  //struct desc
+
115  //{
+
116  // typedef genType type;
+
117  // typedef genType * pointer;
+
118  // typedef genType const* const_pointer;
+
119  // typedef genType const *const const_pointer_const;
+
120  // typedef genType *const pointer_const;
+
121  // typedef genType & reference;
+
122  // typedef genType const& const_reference;
+
123  // typedef genType const& param_type;
+
124 
+
125  // typedef typename genType::value_type value_type;
+
126  // typedef typename genType::size_type size_type;
+
127  // static const typename size_type value_size;
+
128  //};
+
129 
+
130  //template <typename genType>
+
131  //const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
+
132 
+
133  union uif32
+
134  {
+
135  GLM_FUNC_QUALIFIER uif32() :
+
136  i(0)
+
137  {}
+
138 
+
139  GLM_FUNC_QUALIFIER uif32(float f) :
+
140  f(f)
+
141  {}
+
142 
+
143  GLM_FUNC_QUALIFIER uif32(unsigned int i) :
+
144  i(i)
+
145  {}
+
146 
+
147  float f;
+
148  unsigned int i;
+
149  };
+
150 
+
151  union uif64
+
152  {
+
153  GLM_FUNC_QUALIFIER uif64() :
+
154  i(0)
+
155  {}
+
156 
+
157  GLM_FUNC_QUALIFIER uif64(double f) :
+
158  f(f)
+
159  {}
+
160 
+
161  GLM_FUNC_QUALIFIER uif64(uint64 i) :
+
162  i(i)
+
163  {}
+
164 
+
165  double f;
+
166  uint64 i;
+
167  };
+
168 
+
169  typedef uif32 uif;
+
170 
+
172  // int
+
173 
+
174  template <typename T>
+
175  struct is_int
+
176  {
+
177  enum is_int_enum
+
178  {
+
179  _YES = 0,
+
180  _NO = 1
+
181  };
+
182  };
+
183 
+
184 #define GLM_DETAIL_IS_INT(T) \
+
185  template <> \
+
186  struct is_int<T> \
+
187  { \
+
188  enum is_int_enum \
+
189  { \
+
190  _YES = 1, \
+
191  _NO = 0 \
+
192  }; \
+
193  }
+
194 
+
196  // uint
+
197 
+
198  template <typename T>
+
199  struct is_uint
+
200  {
+
201  enum is_uint_enum
+
202  {
+
203  _YES = 0,
+
204  _NO = 1
+
205  };
+
206  };
+
207 
+
208 #define GLM_DETAIL_IS_UINT(T) \
+
209  template <> \
+
210  struct is_uint<T> \
+
211  { \
+
212  enum is_uint_enum \
+
213  { \
+
214  _YES = 1, \
+
215  _NO = 0 \
+
216  }; \
+
217  }
+
218 
+
219  //GLM_DETAIL_IS_UINT(unsigned long long)
+
220 
+
222  // float
+
223 
+
224  template <typename T>
+
225  struct is_float
+
226  {
+
227  enum is_float_enum
+
228  {
+
229  _YES = 0,
+
230  _NO = 1
+
231  };
+
232  };
+
233 
+
234 #define GLM_DETAIL_IS_FLOAT(T) \
+
235  template <> \
+
236  struct is_float<T> \
+
237  { \
+
238  enum is_float_enum \
+
239  { \
+
240  _YES = 1, \
+
241  _NO = 0 \
+
242  }; \
+
243  }
+
244 
+
245  GLM_DETAIL_IS_FLOAT(detail::half);
+
246  GLM_DETAIL_IS_FLOAT(float);
+
247  GLM_DETAIL_IS_FLOAT(double);
+
248  GLM_DETAIL_IS_FLOAT(long double);
+
249 
+
251  // bool
+
252 
+
253  template <typename T>
+
254  struct is_bool
+
255  {
+
256  enum is_bool_enum
+
257  {
+
258  _YES = 0,
+
259  _NO = 1
+
260  };
+
261  };
+
262 
+
263  template <>
+
264  struct is_bool<bool>
+
265  {
+
266  enum is_bool_enum
+
267  {
+
268  _YES = 1,
+
269  _NO = 0
+
270  };
+
271  };
+
272 
+
274  // vector
+
275 
+
276  template <typename T>
+
277  struct is_vector
+
278  {
+
279  enum is_vector_enum
+
280  {
+
281  _YES = 0,
+
282  _NO = 1
+
283  };
+
284  };
+
285 
+
286 # define GLM_DETAIL_IS_VECTOR(TYPE) \
+
287  template <typename T> \
+
288  struct is_vector<TYPE<T> > \
+
289  { \
+
290  enum is_vector_enum \
+
291  { \
+
292  _YES = 1, \
+
293  _NO = 0 \
+
294  }; \
+
295  }
+
296 
+
298  // matrix
+
299 
+
300  template <typename T>
+
301  struct is_matrix
+
302  {
+
303  enum is_matrix_enum
+
304  {
+
305  _YES = 0,
+
306  _NO = 1
+
307  };
+
308  };
+
309 
+
310 #define GLM_DETAIL_IS_MATRIX(T) \
+
311  template <> \
+
312  struct is_matrix \
+
313  { \
+
314  enum is_matrix_enum \
+
315  { \
+
316  _YES = 1, \
+
317  _NO = 0 \
+
318  }; \
+
319  }
+
320 
+
322  // type
+
323 
+
324  template <typename T>
+
325  struct type
+
326  {
+
327  enum type_enum
+
328  {
+
329  is_float = is_float<T>::_YES,
+
330  is_int = is_int<T>::_YES,
+
331  is_uint = is_uint<T>::_YES,
+
332  is_bool = is_bool<T>::_YES
+
333  };
+
334  };
+
335 
+
337  // type
+
338 
+
339  typedef signed char int8;
+
340  typedef signed short int16;
+
341  typedef signed int int32;
+
342  typedef detail::sint64 int64;
+
343 
+
344  typedef unsigned char uint8;
+
345  typedef unsigned short uint16;
+
346  typedef unsigned int uint32;
+
347  typedef detail::uint64 uint64;
+
348 
+
349  typedef detail::half float16;
+
350  typedef float float32;
+
351  typedef double float64;
+
352 
+
354  // float_or_int_trait
+
355 
+
356  struct float_or_int_value
+
357  {
+
358  enum
+
359  {
+
360  GLM_ERROR,
+
361  GLM_FLOAT,
+
362  GLM_INT
+
363  };
+
364  };
+
365 
+
366  template <typename T>
+
367  struct float_or_int_trait
+
368  {
+
369  enum{ID = float_or_int_value::GLM_ERROR};
+
370  };
+
371 
+
372  template <>
+
373  struct float_or_int_trait<int8>
+
374  {
+
375  enum{ID = float_or_int_value::GLM_INT};
+
376  };
+
377 
+
378  template <>
+
379  struct float_or_int_trait<int16>
+
380  {
+
381  enum{ID = float_or_int_value::GLM_INT};
+
382  };
+
383 
+
384  template <>
+
385  struct float_or_int_trait<int32>
+
386  {
+
387  enum{ID = float_or_int_value::GLM_INT};
+
388  };
+
389 
+
390  template <>
+
391  struct float_or_int_trait<int64>
+
392  {
+
393  enum{ID = float_or_int_value::GLM_INT};
+
394  };
+
395 
+
396  template <>
+
397  struct float_or_int_trait<uint8>
+
398  {
+
399  enum{ID = float_or_int_value::GLM_INT};
+
400  };
+
401 
+
402  template <>
+
403  struct float_or_int_trait<uint16>
+
404  {
+
405  enum{ID = float_or_int_value::GLM_INT};
+
406  };
+
407 
+
408  template <>
+
409  struct float_or_int_trait<uint32>
+
410  {
+
411  enum{ID = float_or_int_value::GLM_INT};
+
412  };
+
413 
+
414  template <>
+
415  struct float_or_int_trait<uint64>
+
416  {
+
417  enum{ID = float_or_int_value::GLM_INT};
+
418  };
+
419 
+
420  template <>
+
421  struct float_or_int_trait<float16>
+
422  {
+
423  enum{ID = float_or_int_value::GLM_FLOAT};
+
424  };
+
425 
+
426  template <>
+
427  struct float_or_int_trait<float32>
+
428  {
+
429  enum{ID = float_or_int_value::GLM_FLOAT};
+
430  };
+
431 
+
432  template <>
+
433  struct float_or_int_trait<float64>
+
434  {
+
435  enum{ID = float_or_int_value::GLM_FLOAT};
+
436  };
+
437 
+
438 }//namespace detail
+
439 }//namespace glm
+
440 
+
441 #if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
+
442 # define GLM_DEPRECATED __declspec(deprecated)
+
443 # define GLM_ALIGN(x) __declspec(align(x))
+
444 # define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct
+
445 # define GLM_RESTRICT __declspec(restrict)
+
446 # define GLM_RESTRICT_VAR __restrict
+
447 # define GLM_CONSTEXPR
+
448 #elif((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31))
+
449 # define GLM_DEPRECATED __attribute__((__deprecated__))
+
450 # define GLM_ALIGN(x) __attribute__((aligned(x)))
+
451 # define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
+
452 # if(GLM_COMPILER >= GLM_COMPILER_GCC33)
+
453 # define GLM_RESTRICT __restrict__
+
454 # define GLM_RESTRICT_VAR __restrict__
+
455 # else
+
456 # define GLM_RESTRICT
+
457 # define GLM_RESTRICT_VAR
+
458 # endif
+
459 # define GLM_RESTRICT __restrict__
+
460 # define GLM_RESTRICT_VAR __restrict__
+
461 # if((GLM_COMPILER >= GLM_COMPILER_GCC47) && ((GLM_LANG & GLM_LANG_CXX0X) == GLM_LANG_CXX0X))
+
462 # define GLM_CONSTEXPR constexpr
+
463 # else
+
464 # define GLM_CONSTEXPR
+
465 # endif
+
466 #else
+
467 # define GLM_DEPRECATED
+
468 # define GLM_ALIGN
+
469 # define GLM_ALIGNED_STRUCT(x)
+
470 # define GLM_RESTRICT
+
471 # define GLM_RESTRICT_VAR
+
472 # define GLM_CONSTEXPR
+
473 #endif//GLM_COMPILER
+
474 
+
475 #endif//glm_core_detail
+
+ + + + diff --git a/doc/api/a00003.html b/doc/api/a00003.html index bb642830..fb51d101 100644 --- a/doc/api/a00003.html +++ b/doc/api/a00003.html @@ -2,90 +2,67 @@ - -tquat< T > Struct Template Reference + +_fixes.hpp File Reference + + - - - -
- - +
- - - - - - - - +
- - + + - + +
+
_fixes.hpp File Reference
+
- -

List of all members.

- - - -

-Public Member Functions

tquat (tvec3< T > const &eulerAngles)
-

Detailed Description

-

template<typename T>
-struct glm::detail::tquat< T >

- -

Template for quaternion.

-
See also:
GLM_GTC_quaternion: Quaternion types and functions
- -

Definition at line 57 of file gtc/quaternion.hpp.

-
+

Go to the source code of this file.

+

Detailed Description

+

OpenGL Mathematics (glm.g-truc.net)

+

Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

+

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+

GLM Core

+
Date
2011-02-21 / 2011-11-22
+
Author
Christophe Riccio
+

Definition in file _fixes.hpp.

+
+ - diff --git a/doc/api/a00003_source.html b/doc/api/a00003_source.html new file mode 100644 index 00000000..ed8b22c8 --- /dev/null +++ b/doc/api/a00003_source.html @@ -0,0 +1,106 @@ + + + + + +_fixes.hpp Source File + + + + + + +
+
+ + + + + + +
+
+ + + + + +
+
+
+
_fixes.hpp
+
+
+Go to the documentation of this file.
1 
+
2 
+
3 
+
4 
+
5 
+
6 
+
7 
+
8 
+
9 
+
10 
+
11 
+
12 
+
13 
+
14 
+
15 
+
16 
+
17 
+
18 
+
19 
+
20 
+
21 
+
22 
+
23 
+
24 
+
25 
+
26 
+
27 
+
28 
+
29 #include <cmath>
+
30 
+
32 #ifdef max
+
33 #undef max
+
34 #endif
+
35 
+
37 #ifdef min
+
38 #undef min
+
39 #endif
+
40 
+
42 #ifdef isnan
+
43 #undef isnan
+
44 #endif
+
45 
+
47 #ifdef isinf
+
48 #undef isinf
+
49 #endif
+
50 
+
52 #ifdef log2
+
53 #undef log2
+
54 #endif
+
55 
+
+ + + + diff --git a/doc/api/a00004.html b/doc/api/a00004.html index 3950a544..7dbd0f4a 100644 --- a/doc/api/a00004.html +++ b/doc/api/a00004.html @@ -2,42 +2,31 @@ - -_detail.hpp File Reference + +_swizzle.hpp File Reference + + - - - -
- - +
- - - - - - - - +
- - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    -
    _detail.hpp File Reference
    -
    +
    _swizzle.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-07-24 / 2011-06-14
    -
    Author:
    Christophe Riccio
    - -

    Definition in file _detail.hpp.

    -
    - +

    GLM Core

    +
    Date
    2006-04-20 / 2011-02-16
    +
    Author
    Christophe Riccio
    +

    Definition in file _swizzle.hpp.

    + + - diff --git a/doc/api/a00004_source.html b/doc/api/a00004_source.html index c299780b..dbbb7273 100644 --- a/doc/api/a00004_source.html +++ b/doc/api/a00004_source.html @@ -2,42 +2,31 @@ - -_detail.hpp Source File + +_swizzle.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,479 +35,858 @@
  • File List
  • + +
    -
    _detail.hpp
    -
    +
    _swizzle.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_detail
    -00030 #define glm_core_detail
    -00031 
    -00032 #include "setup.hpp"
    -00033 #include <cassert>
    -00034 #if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
    -00035 #include <cstdint>
    -00036 #endif
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041         class half;
    -00042 
    -00043 #if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
    -00044         typedef int64_t                                                         sint64;
    -00045         typedef uint64_t                                                        uint64;
    -00046 #elif(GLM_COMPILER & GLM_COMPILER_VC)
    -00047         typedef signed __int64                                          sint64;
    -00048         typedef unsigned __int64                                        uint64;
    -00049 #elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG))
    -00050         __extension__ typedef signed long long          sint64;
    -00051         __extension__ typedef unsigned long long        uint64;
    -00052 #elif(GLM_COMPILER & GLM_COMPILER_BC)
    -00053         typedef Int64                                                           sint64;
    -00054         typedef Uint64                                                          uint64;
    -00055 #else//unknown compiler
    -00056         typedef signed long     long                                    sint64;
    -00057         typedef unsigned long long                                      uint64;
    -00058 #endif//GLM_COMPILER
    -00059 
    -00060         template<bool C>
    -00061         struct If
    -00062         {
    -00063                 template<typename F, typename T>
    -00064                 static GLM_FUNC_QUALIFIER T apply(F functor, const T& val)
    -00065                 {
    -00066                         return functor(val);
    -00067                 }
    -00068         };
    -00069 
    -00070         template<>
    -00071         struct If<false>
    -00072         {
    -00073                 template<typename F, typename T>
    -00074                 static GLM_FUNC_QUALIFIER T apply(F, const T& val)
    -00075                 {
    -00076                         return val;
    -00077                 }
    -00078         };
    -00079 
    -00080         //template <typename T>
    -00081         //struct traits
    -00082         //{
    -00083         //      static const bool is_signed = false;
    -00084         //      static const bool is_float = false;
    -00085         //      static const bool is_vector = false;
    -00086         //      static const bool is_matrix = false;
    -00087         //      static const bool is_genType = false;
    -00088         //      static const bool is_genIType = false;
    -00089         //      static const bool is_genUType = false;
    -00090         //};
    -00091 
    -00092         //template <>
    -00093         //struct traits<half>
    -00094         //{
    -00095         //      static const bool is_float = true;
    -00096         //      static const bool is_genType = true;
    -00097         //};
    -00098 
    -00099         //template <>
    -00100         //struct traits<float>
    -00101         //{
    -00102         //      static const bool is_float = true;
    -00103         //      static const bool is_genType = true;
    -00104         //};
    -00105 
    -00106         //template <>
    -00107         //struct traits<double>
    -00108         //{
    -00109         //      static const bool is_float = true;
    -00110         //      static const bool is_genType = true;
    -00111         //};
    -00112 
    -00113         //template <typename genType>
    -00114         //struct desc
    -00115         //{
    -00116         //      typedef genType                                                 type;
    -00117         //      typedef genType *                                               pointer;
    -00118         //      typedef genType const*                                  const_pointer;
    -00119         //      typedef genType const *const                    const_pointer_const;
    -00120         //      typedef genType *const                                  pointer_const;
    -00121         //      typedef genType &                                               reference;
    -00122         //      typedef genType const&                                  const_reference;
    -00123         //      typedef genType const&                                  param_type;
    -00124 
    -00125         //      typedef typename genType::value_type    value_type;
    -00126         //      typedef typename genType::size_type             size_type;
    -00127         //      static const typename size_type                 value_size;
    -00128         //};
    -00129 
    -00130         //template <typename genType>
    -00131         //const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
    -00132 
    -00133         union uif32
    -00134         {
    -00135                 GLM_FUNC_QUALIFIER uif32() :
    -00136                         i(0)
    -00137                 {}
    -00138 
    -00139                 GLM_FUNC_QUALIFIER uif32(float f) :
    -00140                         f(f)
    -00141                 {}
    -00142 
    -00143                 GLM_FUNC_QUALIFIER uif32(unsigned int i) :
    -00144                         i(i)
    -00145                 {}
    -00146 
    -00147                 float f;
    -00148                 unsigned int i;
    -00149         };
    -00150 
    -00151         union uif64
    -00152         {
    -00153                 GLM_FUNC_QUALIFIER uif64() :
    -00154                         i(0)
    -00155                 {}
    -00156 
    -00157                 GLM_FUNC_QUALIFIER uif64(double f) :
    -00158                         f(f)
    -00159                 {}
    -00160 
    -00161                 GLM_FUNC_QUALIFIER uif64(uint64 i) :
    -00162                         i(i)
    -00163                 {}
    -00164 
    -00165                 double f;
    -00166                 uint64 i;
    -00167         };
    -00168 
    -00169         typedef uif32 uif;
    -00170 
    -00172         // int
    -00173 
    -00174         template <typename T>
    -00175         struct is_int
    -00176         {
    -00177                 enum is_int_enum
    -00178                 {
    -00179                         _YES = 0,
    -00180                         _NO = 1
    -00181                 };
    -00182         };
    -00183 
    -00184 #define GLM_DETAIL_IS_INT(T)    \
    -00185         template <>                                     \
    -00186         struct is_int<T>                        \
    -00187         {                                                       \
    -00188                 enum is_int_enum                \
    -00189                 {                                               \
    -00190                         _YES = 1,                       \
    -00191                         _NO = 0                         \
    -00192                 };                                              \
    -00193         }
    -00194 
    -00196         // uint
    -00197 
    -00198         template <typename T>
    -00199         struct is_uint
    -00200         {
    -00201                 enum is_uint_enum
    -00202                 {
    -00203                         _YES = 0,
    -00204                         _NO = 1
    -00205                 };
    -00206         };
    -00207 
    -00208 #define GLM_DETAIL_IS_UINT(T)   \
    -00209         template <>                                     \
    -00210         struct is_uint<T>                       \
    -00211         {                                                       \
    -00212                 enum is_uint_enum               \
    -00213                 {                                               \
    -00214                         _YES = 1,                       \
    -00215                         _NO = 0                         \
    -00216                 };                                              \
    -00217         }
    -00218 
    -00219         //GLM_DETAIL_IS_UINT(unsigned long long)
    -00220 
    -00222         // float
    -00223 
    -00224         template <typename T>
    -00225         struct is_float
    -00226         {
    -00227                 enum is_float_enum
    -00228                 {
    -00229                         _YES = 0,
    -00230                         _NO = 1
    -00231                 };
    -00232         };
    -00233 
    -00234 #define GLM_DETAIL_IS_FLOAT(T)  \
    -00235         template <>                                     \
    -00236         struct is_float<T>                      \
    -00237         {                                                       \
    -00238                 enum is_float_enum              \
    -00239                 {                                               \
    -00240                         _YES = 1,                       \
    -00241                         _NO = 0                         \
    -00242                 };                                              \
    -00243         }
    -00244 
    -00245         GLM_DETAIL_IS_FLOAT(detail::half);
    -00246         GLM_DETAIL_IS_FLOAT(float);
    -00247         GLM_DETAIL_IS_FLOAT(double);
    -00248         GLM_DETAIL_IS_FLOAT(long double);
    -00249 
    -00251         // bool
    -00252 
    -00253         template <typename T>
    -00254         struct is_bool
    -00255         {
    -00256                 enum is_bool_enum
    -00257                 {
    -00258                         _YES = 0,
    -00259                         _NO = 1
    -00260                 };
    -00261         };
    -00262         
    -00263         template <>
    -00264         struct is_bool<bool>
    -00265         {
    -00266                 enum is_bool_enum
    -00267                 {
    -00268                         _YES = 1,
    -00269                         _NO = 0
    -00270                 };
    -00271         };
    -00272         
    -00274         // vector
    -00275 
    -00276         template <typename T>
    -00277         struct is_vector
    -00278         {
    -00279                 enum is_vector_enum
    -00280                 {
    -00281                         _YES = 0,
    -00282                         _NO = 1
    -00283                 };
    -00284         };
    -00285 
    -00286 #       define GLM_DETAIL_IS_VECTOR(TYPE) \
    -00287                 template <typename T> \
    -00288                 struct is_vector<TYPE<T> > \
    -00289                 { \
    -00290                         enum is_vector_enum \
    -00291                         { \
    -00292                                 _YES = 1, \
    -00293                                 _NO = 0 \
    -00294                         }; \
    -00295                 }
    -00296 
    -00298         // matrix
    -00299 
    -00300         template <typename T>
    -00301         struct is_matrix
    -00302         {
    -00303                 enum is_matrix_enum
    -00304                 {
    -00305                         _YES = 0,
    -00306                         _NO = 1
    -00307                 };
    -00308         };
    -00309 
    -00310 #define GLM_DETAIL_IS_MATRIX(T) \
    -00311         template <>                                     \
    -00312         struct is_matrix                        \
    -00313         {                                                       \
    -00314                 enum is_matrix_enum             \
    -00315                 {                                               \
    -00316                         _YES = 1,                       \
    -00317                         _NO = 0                         \
    -00318                 };                                              \
    -00319         }
    -00320 
    -00322         // type
    -00323 
    -00324         template <typename T>
    -00325         struct type
    -00326         {
    -00327                 enum type_enum
    -00328                 {
    -00329                         is_float = is_float<T>::_YES,
    -00330                         is_int = is_int<T>::_YES,
    -00331                         is_uint = is_uint<T>::_YES,
    -00332                         is_bool = is_bool<T>::_YES
    -00333                 };
    -00334         };
    -00335         
    -00337         // type
    -00338         
    -00339         typedef signed char                                                     int8;
    -00340         typedef signed short                                            int16;
    -00341         typedef signed int                                                      int32;
    -00342         typedef detail::sint64                                          int64;
    -00343         
    -00344         typedef unsigned char                                           uint8;
    -00345         typedef unsigned short                                          uint16;
    -00346         typedef unsigned int                                            uint32;
    -00347         typedef detail::uint64                                          uint64;
    -00348         
    -00349         typedef detail::half                                            float16;
    -00350         typedef float                                                           float32;
    -00351         typedef double                                                          float64;
    -00352         
    -00354         // float_or_int_trait 
    -00355 
    -00356         struct float_or_int_value
    -00357         {
    -00358                 enum
    -00359                 {
    -00360                         GLM_ERROR,
    -00361                         GLM_FLOAT,
    -00362                         GLM_INT
    -00363                 };
    -00364         };
    -00365 
    -00366         template <typename T>
    -00367         struct float_or_int_trait
    -00368         {
    -00369                 enum{ID = float_or_int_value::GLM_ERROR};
    -00370         };
    -00371 
    -00372         template <>
    -00373         struct float_or_int_trait<int8>
    -00374         {
    -00375                 enum{ID = float_or_int_value::GLM_INT};
    -00376         };
    -00377 
    -00378         template <>
    -00379         struct float_or_int_trait<int16>
    -00380         {
    -00381                 enum{ID = float_or_int_value::GLM_INT};
    -00382         };
    -00383 
    -00384         template <>
    -00385         struct float_or_int_trait<int32>
    -00386         {
    -00387                 enum{ID = float_or_int_value::GLM_INT};
    -00388         };
    -00389 
    -00390         template <>
    -00391         struct float_or_int_trait<int64>
    -00392         {
    -00393                 enum{ID = float_or_int_value::GLM_INT};
    -00394         };
    -00395 
    -00396         template <>
    -00397         struct float_or_int_trait<uint8>
    -00398         {
    -00399                 enum{ID = float_or_int_value::GLM_INT};
    -00400         };
    -00401 
    -00402         template <>
    -00403         struct float_or_int_trait<uint16>
    -00404         {
    -00405                 enum{ID = float_or_int_value::GLM_INT};
    -00406         };
    -00407 
    -00408         template <>
    -00409         struct float_or_int_trait<uint32>
    -00410         {
    -00411                 enum{ID = float_or_int_value::GLM_INT};
    -00412         };
    -00413 
    -00414         template <>
    -00415         struct float_or_int_trait<uint64>
    -00416         {
    -00417                 enum{ID = float_or_int_value::GLM_INT};
    -00418         };
    -00419 
    -00420         template <>
    -00421         struct float_or_int_trait<float16>
    -00422         {
    -00423                 enum{ID = float_or_int_value::GLM_FLOAT};
    -00424         };
    -00425 
    -00426         template <>
    -00427         struct float_or_int_trait<float32>
    -00428         {
    -00429                 enum{ID = float_or_int_value::GLM_FLOAT};
    -00430         };
    -00431 
    -00432         template <>
    -00433         struct float_or_int_trait<float64>
    -00434         {
    -00435                 enum{ID = float_or_int_value::GLM_FLOAT};
    -00436         };
    -00437 
    -00438 }//namespace detail
    -00439 }//namespace glm
    -00440 
    -00441 #if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
    -00442 #       define GLM_DEPRECATED __declspec(deprecated)
    -00443 #       define GLM_ALIGN(x) __declspec(align(x)) 
    -00444 #       define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct 
    -00445 #       define GLM_RESTRICT __declspec(restrict)
    -00446 #       define GLM_RESTRICT_VAR __restrict
    -00447 #elif((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31))
    -00448 #       define GLM_DEPRECATED __attribute__((__deprecated__))
    -00449 #       define GLM_ALIGN(x) __attribute__((aligned(x)))
    -00450 #       define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
    -00451 #       if(GLM_COMPILER >= GLM_COMPILER_GCC33)
    -00452 #               define GLM_RESTRICT __restrict__
    -00453 #               define GLM_RESTRICT_VAR __restrict__
    -00454 #       else
    -00455 #               define GLM_RESTRICT
    -00456 #               define GLM_RESTRICT_VAR
    -00457 #       endif
    -00458 #       define GLM_RESTRICT __restrict__
    -00459 #       define GLM_RESTRICT_VAR __restrict__
    -00460 #else
    -00461 #       define GLM_DEPRECATED
    -00462 #       define GLM_ALIGN
    -00463 #       define GLM_ALIGNED_STRUCT(x) 
    -00464 #       define GLM_RESTRICT
    -00465 #       define GLM_RESTRICT_VAR
    -00466 #endif//GLM_COMPILER
    -00467 
    -00468 #endif//glm_core_detail
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_swizzle
    +
    30 #define glm_core_swizzle
    +
    31 
    +
    32 #include "_swizzle_func.hpp"
    +
    33 
    +
    34 namespace glm
    +
    35 {
    +
    36  enum comp
    +
    37  {
    +
    38  X = 0,
    +
    39  R = 0,
    +
    40  S = 0,
    +
    41  Y = 1,
    +
    42  G = 1,
    +
    43  T = 1,
    +
    44  Z = 2,
    +
    45  B = 2,
    +
    46  P = 2,
    +
    47  W = 3,
    +
    48  A = 3,
    +
    49  Q = 3
    +
    50  };
    +
    51 }//namespace glm
    +
    52 
    +
    53 namespace glm{
    +
    54 namespace detail
    +
    55 {
    +
    56  // Internal class for implementing swizzle operators
    +
    57  template <typename T, int N>
    +
    58  struct _swizzle_base0
    +
    59  {
    +
    60  typedef T value_type;
    +
    61 
    +
    62  protected:
    +
    63  value_type& elem (size_t i) { return (reinterpret_cast<value_type*>(_buffer))[i]; }
    +
    64  const value_type& elem (size_t i) const { return (reinterpret_cast<const value_type*>(_buffer))[i]; }
    +
    65 
    +
    66  // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
    +
    67  // The size 1 buffer is assumed to aligned to the actual members so that the
    +
    68  // elem()
    +
    69  char _buffer[1];
    +
    70  };
    +
    71 
    +
    72  template <typename T, typename V, int E0, int E1, int E2, int E3, int N>
    +
    73  struct _swizzle_base1 : public _swizzle_base0<T,N>
    +
    74  {
    +
    75  };
    +
    76 
    +
    77  template <typename T, typename V, int E0, int E1>
    +
    78  struct _swizzle_base1<T,V,E0,E1,-1,-2,2> : public _swizzle_base0<T,2>
    +
    79  {
    +
    80  V operator ()() const { return V(this->elem(E0), this->elem(E1)); }
    +
    81  };
    +
    82 
    +
    83  template <typename T, typename V, int E0, int E1, int E2>
    +
    84  struct _swizzle_base1<T,V,E0,E1,E2,-1,3> : public _swizzle_base0<T,3>
    +
    85  {
    +
    86  V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); }
    +
    87  };
    +
    88 
    +
    89  template <typename T, typename V, int E0, int E1, int E2, int E3>
    +
    90  struct _swizzle_base1<T,V,E0,E1,E2,E3,4> : public _swizzle_base0<T,4>
    +
    91  {
    +
    92  V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
    +
    93  };
    +
    94 
    +
    95  // Internal class for implementing swizzle operators
    +
    96  /*
    +
    97  Template parameters:
    +
    98 
    +
    99  ValueType = type of scalar values (e.g. float, double)
    +
    100  VecType = class the swizzle is applies to (e.g. tvec3<float>)
    +
    101  N = number of components in the vector (e.g. 3)
    +
    102  E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec
    +
    103 
    +
    104  DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
    +
    105  containing duplicate elements so that they cannot be used as r-values).
    +
    106  */
    +
    107  template <typename ValueType, typename VecType, int N, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
    +
    108  struct _swizzle_base2 : public _swizzle_base1<ValueType,VecType,E0,E1,E2,E3,N>
    +
    109  {
    +
    110  typedef VecType vec_type;
    +
    111  typedef ValueType value_type;
    +
    112 
    +
    113  _swizzle_base2& operator= (const ValueType& t)
    +
    114  {
    +
    115  for (int i = 0; i < N; ++i)
    +
    116  (*this)[i] = t;
    +
    117  return *this;
    +
    118  }
    +
    119 
    +
    120  _swizzle_base2& operator= (const VecType& that)
    +
    121  {
    +
    122  struct op {
    +
    123  void operator() (value_type& e, value_type& t) { e = t; }
    +
    124  };
    +
    125  _apply_op(that, op());
    +
    126  return *this;
    +
    127  }
    +
    128 
    +
    129  void operator -= (const VecType& that)
    +
    130  {
    +
    131  struct op {
    +
    132  void operator() (value_type& e, value_type& t) { e -= t; }
    +
    133  };
    +
    134  _apply_op(that, op());
    +
    135  }
    +
    136 
    +
    137  void operator += (const VecType& that)
    +
    138  {
    +
    139  struct op {
    +
    140  void operator() (value_type& e, value_type& t) { e += t; }
    +
    141  };
    +
    142  _apply_op(that, op());
    +
    143  }
    +
    144 
    +
    145  void operator *= (const VecType& that)
    +
    146  {
    +
    147  struct op {
    +
    148  void operator() (value_type& e, value_type& t) { e *= t; }
    +
    149  };
    +
    150  _apply_op(that, op());
    +
    151  }
    +
    152 
    +
    153  void operator /= (const VecType& that)
    +
    154  {
    +
    155  struct op {
    +
    156  void operator() (value_type& e, value_type& t) { e /= t; }
    +
    157  };
    +
    158  _apply_op(that, op());
    +
    159  }
    +
    160 
    +
    161  value_type& operator[] (size_t i)
    +
    162  {
    +
    163  static const int offset_dst[4] = { E0, E1, E2, E3 };
    +
    164  return this->elem(offset_dst[i]);
    +
    165  }
    +
    166  value_type operator[] (size_t i) const
    +
    167  {
    +
    168  static const int offset_dst[4] = { E0, E1, E2, E3 };
    +
    169  return this->elem(offset_dst[i]);
    +
    170  }
    +
    171  protected:
    +
    172  template <typename T>
    +
    173  void _apply_op(const VecType& that, T op)
    +
    174  {
    +
    175  // Make a copy of the data in this == &that.
    +
    176  // The copier should optimize out the copy in cases where the function is
    +
    177  // properly inlined and the copy is not necessary.
    +
    178  ValueType t[N];
    +
    179  for (int i = 0; i < N; ++i)
    +
    180  t[i] = that[i];
    +
    181  for (int i = 0; i < N; ++i)
    +
    182  op( (*this)[i], t[i] );
    +
    183  }
    +
    184  };
    +
    185 
    +
    186  // Specialization for swizzles containing duplicate elements. These cannot be modified.
    +
    187  template <typename ValueType, typename VecType, int N, int E0, int E1, int E2, int E3>
    +
    188  struct _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,1> : public _swizzle_base1<ValueType,VecType,E0,E1,E2,E3,N>
    +
    189  {
    +
    190  typedef VecType vec_type;
    +
    191  typedef ValueType value_type;
    +
    192 
    +
    193  struct Stub {};
    +
    194  _swizzle_base2& operator= (Stub const &) {}
    +
    195 
    +
    196  value_type operator[] (size_t i) const
    +
    197  {
    +
    198  static const int offset_dst[4] = { E0, E1, E2, E3 };
    +
    199  return this->elem(offset_dst[i]);
    +
    200  }
    +
    201  };
    +
    202 
    +
    203  template <int N,typename ValueType, typename VecType, int E0,int E1,int E2,int E3>
    +
    204  struct swizzle : public _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)>
    +
    205  {
    +
    206  typedef _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)> base_type;
    +
    207 
    +
    208  using base_type::operator=;
    +
    209 
    +
    210  operator VecType () const { return (*this)(); }
    +
    211  };
    +
    212 
    +
    213 //
    +
    214 // To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
    +
    215 //
    +
    216 #define _GLM_SWIZZLE_TEMPLATE1 template <int N, typename T, typename V, int E0, int E1, int E2, int E3>
    +
    217 #define _GLM_SWIZZLE_TEMPLATE2 template <int N, typename T, typename V, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>
    +
    218 #define _GLM_SWIZZLE_TYPE1 glm::detail::swizzle<N,T,V,E0,E1,E2,E3>
    +
    219 #define _GLM_SWIZZLE_TYPE2 glm::detail::swizzle<N,T,V,F0,F1,F2,F3>
    +
    220 
    +
    221 //
    +
    222 // Wrapper for a binary operator (e.g. u.yy + v.zy)
    +
    223 //
    +
    224 #define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
    +
    225  _GLM_SWIZZLE_TEMPLATE2 \
    +
    226  V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
    +
    227  { \
    +
    228  return a() OPERAND b(); \
    +
    229  } \
    +
    230  _GLM_SWIZZLE_TEMPLATE1 \
    +
    231  V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \
    +
    232  { \
    +
    233  return a() OPERAND b; \
    +
    234  } \
    +
    235  _GLM_SWIZZLE_TEMPLATE1 \
    +
    236  V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b) \
    +
    237  { \
    +
    238  return a OPERAND b(); \
    +
    239  }
    +
    240 
    +
    241 //
    +
    242 // Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
    +
    243 //
    +
    244 #define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
    +
    245  _GLM_SWIZZLE_TEMPLATE1 \
    +
    246  V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \
    +
    247  { \
    +
    248  return a() OPERAND b; \
    +
    249  } \
    +
    250  _GLM_SWIZZLE_TEMPLATE1 \
    +
    251  V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \
    +
    252  { \
    +
    253  return a OPERAND b(); \
    +
    254  }
    +
    255 
    +
    256 //
    +
    257 // Macro for wrapping a function taking one argument (e.g. abs())
    +
    258 //
    +
    259 #define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \
    +
    260  _GLM_SWIZZLE_TEMPLATE1 \
    +
    261  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \
    +
    262  { \
    +
    263  return FUNCTION(a()); \
    +
    264  }
    +
    265 
    +
    266 //
    +
    267 // Macro for wrapping a function taking two vector arguments (e.g. dot()).
    +
    268 //
    +
    269 #define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \
    +
    270  _GLM_SWIZZLE_TEMPLATE2 \
    +
    271  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
    +
    272  { \
    +
    273  return FUNCTION(a(), b()); \
    +
    274  } \
    +
    275  _GLM_SWIZZLE_TEMPLATE1 \
    +
    276  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \
    +
    277  { \
    +
    278  return FUNCTION(a(), b()); \
    +
    279  } \
    +
    280  _GLM_SWIZZLE_TEMPLATE1 \
    +
    281  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \
    +
    282  { \
    +
    283  return FUNCTION(a(), b); \
    +
    284  } \
    +
    285  _GLM_SWIZZLE_TEMPLATE1 \
    +
    286  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \
    +
    287  { \
    +
    288  return FUNCTION(a, b()); \
    +
    289  }
    +
    290 
    +
    291 //
    +
    292 // Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
    +
    293 //
    +
    294 #define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \
    +
    295  _GLM_SWIZZLE_TEMPLATE2 \
    +
    296  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \
    +
    297  { \
    +
    298  return FUNCTION(a(), b(), c); \
    +
    299  } \
    +
    300  _GLM_SWIZZLE_TEMPLATE1 \
    +
    301  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
    +
    302  { \
    +
    303  return FUNCTION(a(), b(), c); \
    +
    304  } \
    +
    305  _GLM_SWIZZLE_TEMPLATE1 \
    +
    306  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
    +
    307  { \
    +
    308  return FUNCTION(a(), b, c); \
    +
    309  } \
    +
    310  _GLM_SWIZZLE_TEMPLATE1 \
    +
    311  typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
    +
    312  { \
    +
    313  return FUNCTION(a, b(), c); \
    +
    314  }
    +
    315 
    +
    316 }//namespace detail
    +
    317 }//namespace glm
    +
    318 
    +
    319 namespace glm
    +
    320 {
    +
    321  namespace detail
    +
    322  {
    +
    323  _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
    +
    324  _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
    +
    325  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
    +
    326  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
    +
    327  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
    +
    328  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
    +
    329  }
    +
    330 
    +
    331  //
    +
    332  // Swizzles are distinct types from the unswizzled type. The below macros will
    +
    333  // provide template specializations for the swizzle types for the given functions
    +
    334  // so that the compiler does not have any ambiguity to choosing how to handle
    +
    335  // the function.
    +
    336  //
    +
    337  // The alternative is to use the operator()() when calling the function in order
    +
    338  // to explicitly convert the swizzled type to the unswizzled type.
    +
    339  //
    +
    340 
    +
    341  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);
    +
    342  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);
    +
    343  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);
    +
    344  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);
    +
    345  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);
    +
    346 
    +
    347  //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);
    +
    348  //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);
    +
    349  //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);
    +
    350  //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
    +
    351 }
    +
    352 
    +
    353 #define _GLM_SWIZZLE2_2_MEMBERS(T,P,E0,E1) \
    +
    354  struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \
    +
    355  struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \
    +
    356  struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \
    +
    357  struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; };
    +
    358 
    +
    359 #define _GLM_SWIZZLE2_3_MEMBERS(T,P2,E0,E1) \
    +
    360  struct { glm::detail::swizzle<3,T,P2,0,0,0,-1> E0 ## E0 ## E0; }; \
    +
    361  struct { glm::detail::swizzle<3,T,P2,0,0,1,-1> E0 ## E0 ## E1; }; \
    +
    362  struct { glm::detail::swizzle<3,T,P2,0,1,0,-1> E0 ## E1 ## E0; }; \
    +
    363  struct { glm::detail::swizzle<3,T,P2,0,1,1,-1> E0 ## E1 ## E1; }; \
    +
    364  struct { glm::detail::swizzle<3,T,P2,1,0,0,-1> E1 ## E0 ## E0; }; \
    +
    365  struct { glm::detail::swizzle<3,T,P2,1,0,1,-1> E1 ## E0 ## E1; }; \
    +
    366  struct { glm::detail::swizzle<3,T,P2,1,1,0,-1> E1 ## E1 ## E0; }; \
    +
    367  struct { glm::detail::swizzle<3,T,P2,1,1,1,-1> E1 ## E1 ## E1; };
    +
    368 
    +
    369 #define _GLM_SWIZZLE2_4_MEMBERS(T,P2,E0,E1) \
    +
    370  struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    +
    371  struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    +
    372  struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    +
    373  struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    +
    374  struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    +
    375  struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    +
    376  struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    +
    377  struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    +
    378  struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    +
    379  struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    +
    380  struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    +
    381  struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    +
    382  struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    +
    383  struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    +
    384  struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    +
    385  struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; };
    +
    386 
    +
    387 #define _GLM_SWIZZLE3_2_MEMBERS(T,P2,E0,E1,E2) \
    +
    388  struct { glm::detail::swizzle<2,T,P2,0,0,-1,-2> E0 ## E0; }; \
    +
    389  struct { glm::detail::swizzle<2,T,P2,0,1,-1,-2> E0 ## E1; }; \
    +
    390  struct { glm::detail::swizzle<2,T,P2,0,2,-1,-2> E0 ## E2; }; \
    +
    391  struct { glm::detail::swizzle<2,T,P2,1,0,-1,-2> E1 ## E0; }; \
    +
    392  struct { glm::detail::swizzle<2,T,P2,1,1,-1,-2> E1 ## E1; }; \
    +
    393  struct { glm::detail::swizzle<2,T,P2,1,2,-1,-2> E1 ## E2; }; \
    +
    394  struct { glm::detail::swizzle<2,T,P2,2,0,-1,-2> E2 ## E0; }; \
    +
    395  struct { glm::detail::swizzle<2,T,P2,2,1,-1,-2> E2 ## E1; }; \
    +
    396  struct { glm::detail::swizzle<2,T,P2,2,2,-1,-2> E2 ## E2; };
    +
    397 
    +
    398 #define _GLM_SWIZZLE3_3_MEMBERS(T,P,E0,E1,E2) \
    +
    399  struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \
    +
    400  struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \
    +
    401  struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \
    +
    402  struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \
    +
    403  struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \
    +
    404  struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \
    +
    405  struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \
    +
    406  struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \
    +
    407  struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \
    +
    408  struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \
    +
    409  struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \
    +
    410  struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \
    +
    411  struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \
    +
    412  struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \
    +
    413  struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \
    +
    414  struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \
    +
    415  struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \
    +
    416  struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \
    +
    417  struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \
    +
    418  struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \
    +
    419  struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \
    +
    420  struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \
    +
    421  struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \
    +
    422  struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \
    +
    423  struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \
    +
    424  struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \
    +
    425  struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; };
    +
    426 
    +
    427 #define _GLM_SWIZZLE3_4_MEMBERS(T,P2,E0,E1,E2) \
    +
    428  struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    +
    429  struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    +
    430  struct { glm::detail::swizzle<4,T,P2,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
    +
    431  struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    +
    432  struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    +
    433  struct { glm::detail::swizzle<4,T,P2,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
    +
    434  struct { glm::detail::swizzle<4,T,P2,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
    +
    435  struct { glm::detail::swizzle<4,T,P2,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
    +
    436  struct { glm::detail::swizzle<4,T,P2,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
    +
    437  struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    +
    438  struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    +
    439  struct { glm::detail::swizzle<4,T,P2,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
    +
    440  struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    +
    441  struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    +
    442  struct { glm::detail::swizzle<4,T,P2,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
    +
    443  struct { glm::detail::swizzle<4,T,P2,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
    +
    444  struct { glm::detail::swizzle<4,T,P2,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
    +
    445  struct { glm::detail::swizzle<4,T,P2,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
    +
    446  struct { glm::detail::swizzle<4,T,P2,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
    +
    447  struct { glm::detail::swizzle<4,T,P2,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
    +
    448  struct { glm::detail::swizzle<4,T,P2,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
    +
    449  struct { glm::detail::swizzle<4,T,P2,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
    +
    450  struct { glm::detail::swizzle<4,T,P2,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
    +
    451  struct { glm::detail::swizzle<4,T,P2,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
    +
    452  struct { glm::detail::swizzle<4,T,P2,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
    +
    453  struct { glm::detail::swizzle<4,T,P2,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
    +
    454  struct { glm::detail::swizzle<4,T,P2,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
    +
    455  struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    +
    456  struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    +
    457  struct { glm::detail::swizzle<4,T,P2,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
    +
    458  struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    +
    459  struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    +
    460  struct { glm::detail::swizzle<4,T,P2,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
    +
    461  struct { glm::detail::swizzle<4,T,P2,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
    +
    462  struct { glm::detail::swizzle<4,T,P2,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
    +
    463  struct { glm::detail::swizzle<4,T,P2,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
    +
    464  struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    +
    465  struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    +
    466  struct { glm::detail::swizzle<4,T,P2,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
    +
    467  struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    +
    468  struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
    +
    469  struct { glm::detail::swizzle<4,T,P2,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
    +
    470  struct { glm::detail::swizzle<4,T,P2,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
    +
    471  struct { glm::detail::swizzle<4,T,P2,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
    +
    472  struct { glm::detail::swizzle<4,T,P2,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
    +
    473  struct { glm::detail::swizzle<4,T,P2,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
    +
    474  struct { glm::detail::swizzle<4,T,P2,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
    +
    475  struct { glm::detail::swizzle<4,T,P2,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
    +
    476  struct { glm::detail::swizzle<4,T,P2,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
    +
    477  struct { glm::detail::swizzle<4,T,P2,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
    +
    478  struct { glm::detail::swizzle<4,T,P2,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
    +
    479  struct { glm::detail::swizzle<4,T,P2,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
    +
    480  struct { glm::detail::swizzle<4,T,P2,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
    +
    481  struct { glm::detail::swizzle<4,T,P2,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
    +
    482  struct { glm::detail::swizzle<4,T,P2,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
    +
    483  struct { glm::detail::swizzle<4,T,P2,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
    +
    484  struct { glm::detail::swizzle<4,T,P2,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
    +
    485  struct { glm::detail::swizzle<4,T,P2,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
    +
    486  struct { glm::detail::swizzle<4,T,P2,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
    +
    487  struct { glm::detail::swizzle<4,T,P2,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
    +
    488  struct { glm::detail::swizzle<4,T,P2,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
    +
    489  struct { glm::detail::swizzle<4,T,P2,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
    +
    490  struct { glm::detail::swizzle<4,T,P2,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
    +
    491  struct { glm::detail::swizzle<4,T,P2,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
    +
    492  struct { glm::detail::swizzle<4,T,P2,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
    +
    493  struct { glm::detail::swizzle<4,T,P2,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
    +
    494  struct { glm::detail::swizzle<4,T,P2,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
    +
    495  struct { glm::detail::swizzle<4,T,P2,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
    +
    496  struct { glm::detail::swizzle<4,T,P2,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
    +
    497  struct { glm::detail::swizzle<4,T,P2,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
    +
    498  struct { glm::detail::swizzle<4,T,P2,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
    +
    499  struct { glm::detail::swizzle<4,T,P2,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
    +
    500  struct { glm::detail::swizzle<4,T,P2,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
    +
    501  struct { glm::detail::swizzle<4,T,P2,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
    +
    502  struct { glm::detail::swizzle<4,T,P2,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
    +
    503  struct { glm::detail::swizzle<4,T,P2,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
    +
    504  struct { glm::detail::swizzle<4,T,P2,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
    +
    505  struct { glm::detail::swizzle<4,T,P2,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
    +
    506  struct { glm::detail::swizzle<4,T,P2,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
    +
    507  struct { glm::detail::swizzle<4,T,P2,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
    +
    508  struct { glm::detail::swizzle<4,T,P2,2,2,2,2> E2 ## E2 ## E2 ## E2; };
    +
    509 
    +
    510 #define _GLM_SWIZZLE4_2_MEMBERS(T,P,E0,E1,E2,E3) \
    +
    511  struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \
    +
    512  struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \
    +
    513  struct { glm::detail::swizzle<2,T,P,0,2,-1,-2> E0 ## E2; }; \
    +
    514  struct { glm::detail::swizzle<2,T,P,0,3,-1,-2> E0 ## E3; }; \
    +
    515  struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \
    +
    516  struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; \
    +
    517  struct { glm::detail::swizzle<2,T,P,1,2,-1,-2> E1 ## E2; }; \
    +
    518  struct { glm::detail::swizzle<2,T,P,1,3,-1,-2> E1 ## E3; }; \
    +
    519  struct { glm::detail::swizzle<2,T,P,2,0,-1,-2> E2 ## E0; }; \
    +
    520  struct { glm::detail::swizzle<2,T,P,2,1,-1,-2> E2 ## E1; }; \
    +
    521  struct { glm::detail::swizzle<2,T,P,2,2,-1,-2> E2 ## E2; }; \
    +
    522  struct { glm::detail::swizzle<2,T,P,2,3,-1,-2> E2 ## E3; }; \
    +
    523  struct { glm::detail::swizzle<2,T,P,3,0,-1,-2> E3 ## E0; }; \
    +
    524  struct { glm::detail::swizzle<2,T,P,3,1,-1,-2> E3 ## E1; }; \
    +
    525  struct { glm::detail::swizzle<2,T,P,3,2,-1,-2> E3 ## E2; }; \
    +
    526  struct { glm::detail::swizzle<2,T,P,3,3,-1,-2> E3 ## E3; };
    +
    527 
    +
    528 #define _GLM_SWIZZLE4_3_MEMBERS(T,P,E0,E1,E2,E3) \
    +
    529  struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \
    +
    530  struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \
    +
    531  struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \
    +
    532  struct { glm::detail::swizzle<3,T,P,0,0,3,-1> E0 ## E0 ## E3; }; \
    +
    533  struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \
    +
    534  struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \
    +
    535  struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \
    +
    536  struct { glm::detail::swizzle<3,T,P,0,1,3,-1> E0 ## E1 ## E3; }; \
    +
    537  struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \
    +
    538  struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \
    +
    539  struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \
    +
    540  struct { glm::detail::swizzle<3,T,P,0,2,3,-1> E0 ## E2 ## E3; }; \
    +
    541  struct { glm::detail::swizzle<3,T,P,0,3,0,-1> E0 ## E3 ## E0; }; \
    +
    542  struct { glm::detail::swizzle<3,T,P,0,3,1,-1> E0 ## E3 ## E1; }; \
    +
    543  struct { glm::detail::swizzle<3,T,P,0,3,2,-1> E0 ## E3 ## E2; }; \
    +
    544  struct { glm::detail::swizzle<3,T,P,0,3,3,-1> E0 ## E3 ## E3; }; \
    +
    545  struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \
    +
    546  struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \
    +
    547  struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \
    +
    548  struct { glm::detail::swizzle<3,T,P,1,0,3,-1> E1 ## E0 ## E3; }; \
    +
    549  struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \
    +
    550  struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \
    +
    551  struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \
    +
    552  struct { glm::detail::swizzle<3,T,P,1,1,3,-1> E1 ## E1 ## E3; }; \
    +
    553  struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \
    +
    554  struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \
    +
    555  struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \
    +
    556  struct { glm::detail::swizzle<3,T,P,1,2,3,-1> E1 ## E2 ## E3; }; \
    +
    557  struct { glm::detail::swizzle<3,T,P,1,3,0,-1> E1 ## E3 ## E0; }; \
    +
    558  struct { glm::detail::swizzle<3,T,P,1,3,1,-1> E1 ## E3 ## E1; }; \
    +
    559  struct { glm::detail::swizzle<3,T,P,1,3,2,-1> E1 ## E3 ## E2; }; \
    +
    560  struct { glm::detail::swizzle<3,T,P,1,3,3,-1> E1 ## E3 ## E3; }; \
    +
    561  struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \
    +
    562  struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \
    +
    563  struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \
    +
    564  struct { glm::detail::swizzle<3,T,P,2,0,3,-1> E2 ## E0 ## E3; }; \
    +
    565  struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \
    +
    566  struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \
    +
    567  struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \
    +
    568  struct { glm::detail::swizzle<3,T,P,2,1,3,-1> E2 ## E1 ## E3; }; \
    +
    569  struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \
    +
    570  struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \
    +
    571  struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; \
    +
    572  struct { glm::detail::swizzle<3,T,P,2,2,3,-1> E2 ## E2 ## E3; }; \
    +
    573  struct { glm::detail::swizzle<3,T,P,2,3,0,-1> E2 ## E3 ## E0; }; \
    +
    574  struct { glm::detail::swizzle<3,T,P,2,3,1,-1> E2 ## E3 ## E1; }; \
    +
    575  struct { glm::detail::swizzle<3,T,P,2,3,2,-1> E2 ## E3 ## E2; }; \
    +
    576  struct { glm::detail::swizzle<3,T,P,2,3,3,-1> E2 ## E3 ## E3; }; \
    +
    577  struct { glm::detail::swizzle<3,T,P,3,0,0,-1> E3 ## E0 ## E0; }; \
    +
    578  struct { glm::detail::swizzle<3,T,P,3,0,1,-1> E3 ## E0 ## E1; }; \
    +
    579  struct { glm::detail::swizzle<3,T,P,3,0,2,-1> E3 ## E0 ## E2; }; \
    +
    580  struct { glm::detail::swizzle<3,T,P,3,0,3,-1> E3 ## E0 ## E3; }; \
    +
    581  struct { glm::detail::swizzle<3,T,P,3,1,0,-1> E3 ## E1 ## E0; }; \
    +
    582  struct { glm::detail::swizzle<3,T,P,3,1,1,-1> E3 ## E1 ## E1; }; \
    +
    583  struct { glm::detail::swizzle<3,T,P,3,1,2,-1> E3 ## E1 ## E2; }; \
    +
    584  struct { glm::detail::swizzle<3,T,P,3,1,3,-1> E3 ## E1 ## E3; }; \
    +
    585  struct { glm::detail::swizzle<3,T,P,3,2,0,-1> E3 ## E2 ## E0; }; \
    +
    586  struct { glm::detail::swizzle<3,T,P,3,2,1,-1> E3 ## E2 ## E1; }; \
    +
    587  struct { glm::detail::swizzle<3,T,P,3,2,2,-1> E3 ## E2 ## E2; }; \
    +
    588  struct { glm::detail::swizzle<3,T,P,3,2,3,-1> E3 ## E2 ## E3; }; \
    +
    589  struct { glm::detail::swizzle<3,T,P,3,3,0,-1> E3 ## E3 ## E0; }; \
    +
    590  struct { glm::detail::swizzle<3,T,P,3,3,1,-1> E3 ## E3 ## E1; }; \
    +
    591  struct { glm::detail::swizzle<3,T,P,3,3,2,-1> E3 ## E3 ## E2; }; \
    +
    592  struct { glm::detail::swizzle<3,T,P,3,3,3,-1> E3 ## E3 ## E3; };
    +
    593 
    +
    594 #define _GLM_SWIZZLE4_4_MEMBERS(T,P,E0,E1,E2,E3) \
    +
    595  struct { glm::detail::swizzle<4,T,P,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    +
    596  struct { glm::detail::swizzle<4,T,P,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    +
    597  struct { glm::detail::swizzle<4,T,P,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
    +
    598  struct { glm::detail::swizzle<4,T,P,0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
    +
    599  struct { glm::detail::swizzle<4,T,P,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    +
    600  struct { glm::detail::swizzle<4,T,P,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    +
    601  struct { glm::detail::swizzle<4,T,P,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
    +
    602  struct { glm::detail::swizzle<4,T,P,0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
    +
    603  struct { glm::detail::swizzle<4,T,P,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
    +
    604  struct { glm::detail::swizzle<4,T,P,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
    +
    605  struct { glm::detail::swizzle<4,T,P,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
    +
    606  struct { glm::detail::swizzle<4,T,P,0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
    +
    607  struct { glm::detail::swizzle<4,T,P,0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
    +
    608  struct { glm::detail::swizzle<4,T,P,0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
    +
    609  struct { glm::detail::swizzle<4,T,P,0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
    +
    610  struct { glm::detail::swizzle<4,T,P,0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
    +
    611  struct { glm::detail::swizzle<4,T,P,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    +
    612  struct { glm::detail::swizzle<4,T,P,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    +
    613  struct { glm::detail::swizzle<4,T,P,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
    +
    614  struct { glm::detail::swizzle<4,T,P,0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
    +
    615  struct { glm::detail::swizzle<4,T,P,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    +
    616  struct { glm::detail::swizzle<4,T,P,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    +
    617  struct { glm::detail::swizzle<4,T,P,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
    +
    618  struct { glm::detail::swizzle<4,T,P,0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
    +
    619  struct { glm::detail::swizzle<4,T,P,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
    +
    620  struct { glm::detail::swizzle<4,T,P,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
    +
    621  struct { glm::detail::swizzle<4,T,P,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
    +
    622  struct { glm::detail::swizzle<4,T,P,0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
    +
    623  struct { glm::detail::swizzle<4,T,P,0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
    +
    624  struct { glm::detail::swizzle<4,T,P,0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
    +
    625  struct { glm::detail::swizzle<4,T,P,0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
    +
    626  struct { glm::detail::swizzle<4,T,P,0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
    +
    627  struct { glm::detail::swizzle<4,T,P,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
    +
    628  struct { glm::detail::swizzle<4,T,P,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
    +
    629  struct { glm::detail::swizzle<4,T,P,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
    +
    630  struct { glm::detail::swizzle<4,T,P,0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
    +
    631  struct { glm::detail::swizzle<4,T,P,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
    +
    632  struct { glm::detail::swizzle<4,T,P,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
    +
    633  struct { glm::detail::swizzle<4,T,P,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
    +
    634  struct { glm::detail::swizzle<4,T,P,0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
    +
    635  struct { glm::detail::swizzle<4,T,P,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
    +
    636  struct { glm::detail::swizzle<4,T,P,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
    +
    637  struct { glm::detail::swizzle<4,T,P,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
    +
    638  struct { glm::detail::swizzle<4,T,P,0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
    +
    639  struct { glm::detail::swizzle<4,T,P,0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
    +
    640  struct { glm::detail::swizzle<4,T,P,0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
    +
    641  struct { glm::detail::swizzle<4,T,P,0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
    +
    642  struct { glm::detail::swizzle<4,T,P,0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
    +
    643  struct { glm::detail::swizzle<4,T,P,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    +
    644  struct { glm::detail::swizzle<4,T,P,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    +
    645  struct { glm::detail::swizzle<4,T,P,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
    +
    646  struct { glm::detail::swizzle<4,T,P,1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
    +
    647  struct { glm::detail::swizzle<4,T,P,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    +
    648  struct { glm::detail::swizzle<4,T,P,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    +
    649  struct { glm::detail::swizzle<4,T,P,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
    +
    650  struct { glm::detail::swizzle<4,T,P,1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
    +
    651  struct { glm::detail::swizzle<4,T,P,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
    +
    652  struct { glm::detail::swizzle<4,T,P,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
    +
    653  struct { glm::detail::swizzle<4,T,P,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
    +
    654  struct { glm::detail::swizzle<4,T,P,1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
    +
    655  struct { glm::detail::swizzle<4,T,P,1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
    +
    656  struct { glm::detail::swizzle<4,T,P,1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
    +
    657  struct { glm::detail::swizzle<4,T,P,1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
    +
    658  struct { glm::detail::swizzle<4,T,P,1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
    +
    659  struct { glm::detail::swizzle<4,T,P,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    +
    660  struct { glm::detail::swizzle<4,T,P,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    +
    661  struct { glm::detail::swizzle<4,T,P,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
    +
    662  struct { glm::detail::swizzle<4,T,P,1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
    +
    663  struct { glm::detail::swizzle<4,T,P,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    +
    664  struct { glm::detail::swizzle<4,T,P,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
    +
    665  struct { glm::detail::swizzle<4,T,P,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
    +
    666  struct { glm::detail::swizzle<4,T,P,1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
    +
    667  struct { glm::detail::swizzle<4,T,P,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
    +
    668  struct { glm::detail::swizzle<4,T,P,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
    +
    669  struct { glm::detail::swizzle<4,T,P,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
    +
    670  struct { glm::detail::swizzle<4,T,P,1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
    +
    671  struct { glm::detail::swizzle<4,T,P,1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
    +
    672  struct { glm::detail::swizzle<4,T,P,1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
    +
    673  struct { glm::detail::swizzle<4,T,P,1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
    +
    674  struct { glm::detail::swizzle<4,T,P,1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
    +
    675  struct { glm::detail::swizzle<4,T,P,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
    +
    676  struct { glm::detail::swizzle<4,T,P,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
    +
    677  struct { glm::detail::swizzle<4,T,P,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
    +
    678  struct { glm::detail::swizzle<4,T,P,1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
    +
    679  struct { glm::detail::swizzle<4,T,P,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
    +
    680  struct { glm::detail::swizzle<4,T,P,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
    +
    681  struct { glm::detail::swizzle<4,T,P,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
    +
    682  struct { glm::detail::swizzle<4,T,P,1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
    +
    683  struct { glm::detail::swizzle<4,T,P,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
    +
    684  struct { glm::detail::swizzle<4,T,P,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
    +
    685  struct { glm::detail::swizzle<4,T,P,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
    +
    686  struct { glm::detail::swizzle<4,T,P,1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
    +
    687  struct { glm::detail::swizzle<4,T,P,1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
    +
    688  struct { glm::detail::swizzle<4,T,P,1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
    +
    689  struct { glm::detail::swizzle<4,T,P,1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
    +
    690  struct { glm::detail::swizzle<4,T,P,1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
    +
    691  struct { glm::detail::swizzle<4,T,P,1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
    +
    692  struct { glm::detail::swizzle<4,T,P,1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
    +
    693  struct { glm::detail::swizzle<4,T,P,1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
    +
    694  struct { glm::detail::swizzle<4,T,P,1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
    +
    695  struct { glm::detail::swizzle<4,T,P,1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
    +
    696  struct { glm::detail::swizzle<4,T,P,1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
    +
    697  struct { glm::detail::swizzle<4,T,P,1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
    +
    698  struct { glm::detail::swizzle<4,T,P,1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
    +
    699  struct { glm::detail::swizzle<4,T,P,1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
    +
    700  struct { glm::detail::swizzle<4,T,P,1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
    +
    701  struct { glm::detail::swizzle<4,T,P,1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
    +
    702  struct { glm::detail::swizzle<4,T,P,1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
    +
    703  struct { glm::detail::swizzle<4,T,P,1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
    +
    704  struct { glm::detail::swizzle<4,T,P,1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
    +
    705  struct { glm::detail::swizzle<4,T,P,1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
    +
    706  struct { glm::detail::swizzle<4,T,P,1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
    +
    707  struct { glm::detail::swizzle<4,T,P,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
    +
    708  struct { glm::detail::swizzle<4,T,P,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
    +
    709  struct { glm::detail::swizzle<4,T,P,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
    +
    710  struct { glm::detail::swizzle<4,T,P,2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
    +
    711  struct { glm::detail::swizzle<4,T,P,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
    +
    712  struct { glm::detail::swizzle<4,T,P,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
    +
    713  struct { glm::detail::swizzle<4,T,P,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
    +
    714  struct { glm::detail::swizzle<4,T,P,2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
    +
    715  struct { glm::detail::swizzle<4,T,P,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
    +
    716  struct { glm::detail::swizzle<4,T,P,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
    +
    717  struct { glm::detail::swizzle<4,T,P,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
    +
    718  struct { glm::detail::swizzle<4,T,P,2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
    +
    719  struct { glm::detail::swizzle<4,T,P,2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
    +
    720  struct { glm::detail::swizzle<4,T,P,2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
    +
    721  struct { glm::detail::swizzle<4,T,P,2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
    +
    722  struct { glm::detail::swizzle<4,T,P,2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
    +
    723  struct { glm::detail::swizzle<4,T,P,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
    +
    724  struct { glm::detail::swizzle<4,T,P,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
    +
    725  struct { glm::detail::swizzle<4,T,P,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
    +
    726  struct { glm::detail::swizzle<4,T,P,2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
    +
    727  struct { glm::detail::swizzle<4,T,P,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
    +
    728  struct { glm::detail::swizzle<4,T,P,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
    +
    729  struct { glm::detail::swizzle<4,T,P,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
    +
    730  struct { glm::detail::swizzle<4,T,P,2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
    +
    731  struct { glm::detail::swizzle<4,T,P,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
    +
    732  struct { glm::detail::swizzle<4,T,P,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
    +
    733  struct { glm::detail::swizzle<4,T,P,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
    +
    734  struct { glm::detail::swizzle<4,T,P,2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
    +
    735  struct { glm::detail::swizzle<4,T,P,2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
    +
    736  struct { glm::detail::swizzle<4,T,P,2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
    +
    737  struct { glm::detail::swizzle<4,T,P,2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
    +
    738  struct { glm::detail::swizzle<4,T,P,2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
    +
    739  struct { glm::detail::swizzle<4,T,P,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
    +
    740  struct { glm::detail::swizzle<4,T,P,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
    +
    741  struct { glm::detail::swizzle<4,T,P,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
    +
    742  struct { glm::detail::swizzle<4,T,P,2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
    +
    743  struct { glm::detail::swizzle<4,T,P,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
    +
    744  struct { glm::detail::swizzle<4,T,P,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
    +
    745  struct { glm::detail::swizzle<4,T,P,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
    +
    746  struct { glm::detail::swizzle<4,T,P,2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
    +
    747  struct { glm::detail::swizzle<4,T,P,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
    +
    748  struct { glm::detail::swizzle<4,T,P,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
    +
    749  struct { glm::detail::swizzle<4,T,P,2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
    +
    750  struct { glm::detail::swizzle<4,T,P,2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
    +
    751  struct { glm::detail::swizzle<4,T,P,2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
    +
    752  struct { glm::detail::swizzle<4,T,P,2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
    +
    753  struct { glm::detail::swizzle<4,T,P,2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
    +
    754  struct { glm::detail::swizzle<4,T,P,2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
    +
    755  struct { glm::detail::swizzle<4,T,P,2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
    +
    756  struct { glm::detail::swizzle<4,T,P,2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
    +
    757  struct { glm::detail::swizzle<4,T,P,2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
    +
    758  struct { glm::detail::swizzle<4,T,P,2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
    +
    759  struct { glm::detail::swizzle<4,T,P,2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
    +
    760  struct { glm::detail::swizzle<4,T,P,2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
    +
    761  struct { glm::detail::swizzle<4,T,P,2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
    +
    762  struct { glm::detail::swizzle<4,T,P,2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
    +
    763  struct { glm::detail::swizzle<4,T,P,2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
    +
    764  struct { glm::detail::swizzle<4,T,P,2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
    +
    765  struct { glm::detail::swizzle<4,T,P,2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
    +
    766  struct { glm::detail::swizzle<4,T,P,2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
    +
    767  struct { glm::detail::swizzle<4,T,P,2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
    +
    768  struct { glm::detail::swizzle<4,T,P,2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
    +
    769  struct { glm::detail::swizzle<4,T,P,2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
    +
    770  struct { glm::detail::swizzle<4,T,P,2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
    +
    771  struct { glm::detail::swizzle<4,T,P,3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
    +
    772  struct { glm::detail::swizzle<4,T,P,3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
    +
    773  struct { glm::detail::swizzle<4,T,P,3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
    +
    774  struct { glm::detail::swizzle<4,T,P,3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
    +
    775  struct { glm::detail::swizzle<4,T,P,3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
    +
    776  struct { glm::detail::swizzle<4,T,P,3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
    +
    777  struct { glm::detail::swizzle<4,T,P,3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
    +
    778  struct { glm::detail::swizzle<4,T,P,3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
    +
    779  struct { glm::detail::swizzle<4,T,P,3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
    +
    780  struct { glm::detail::swizzle<4,T,P,3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
    +
    781  struct { glm::detail::swizzle<4,T,P,3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
    +
    782  struct { glm::detail::swizzle<4,T,P,3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
    +
    783  struct { glm::detail::swizzle<4,T,P,3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
    +
    784  struct { glm::detail::swizzle<4,T,P,3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
    +
    785  struct { glm::detail::swizzle<4,T,P,3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
    +
    786  struct { glm::detail::swizzle<4,T,P,3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
    +
    787  struct { glm::detail::swizzle<4,T,P,3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
    +
    788  struct { glm::detail::swizzle<4,T,P,3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
    +
    789  struct { glm::detail::swizzle<4,T,P,3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
    +
    790  struct { glm::detail::swizzle<4,T,P,3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
    +
    791  struct { glm::detail::swizzle<4,T,P,3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
    +
    792  struct { glm::detail::swizzle<4,T,P,3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
    +
    793  struct { glm::detail::swizzle<4,T,P,3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
    +
    794  struct { glm::detail::swizzle<4,T,P,3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
    +
    795  struct { glm::detail::swizzle<4,T,P,3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
    +
    796  struct { glm::detail::swizzle<4,T,P,3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
    +
    797  struct { glm::detail::swizzle<4,T,P,3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
    +
    798  struct { glm::detail::swizzle<4,T,P,3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
    +
    799  struct { glm::detail::swizzle<4,T,P,3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
    +
    800  struct { glm::detail::swizzle<4,T,P,3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
    +
    801  struct { glm::detail::swizzle<4,T,P,3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
    +
    802  struct { glm::detail::swizzle<4,T,P,3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
    +
    803  struct { glm::detail::swizzle<4,T,P,3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
    +
    804  struct { glm::detail::swizzle<4,T,P,3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
    +
    805  struct { glm::detail::swizzle<4,T,P,3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
    +
    806  struct { glm::detail::swizzle<4,T,P,3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
    +
    807  struct { glm::detail::swizzle<4,T,P,3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
    +
    808  struct { glm::detail::swizzle<4,T,P,3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
    +
    809  struct { glm::detail::swizzle<4,T,P,3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
    +
    810  struct { glm::detail::swizzle<4,T,P,3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
    +
    811  struct { glm::detail::swizzle<4,T,P,3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
    +
    812  struct { glm::detail::swizzle<4,T,P,3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
    +
    813  struct { glm::detail::swizzle<4,T,P,3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
    +
    814  struct { glm::detail::swizzle<4,T,P,3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
    +
    815  struct { glm::detail::swizzle<4,T,P,3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
    +
    816  struct { glm::detail::swizzle<4,T,P,3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
    +
    817  struct { glm::detail::swizzle<4,T,P,3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
    +
    818  struct { glm::detail::swizzle<4,T,P,3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
    +
    819  struct { glm::detail::swizzle<4,T,P,3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
    +
    820  struct { glm::detail::swizzle<4,T,P,3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
    +
    821  struct { glm::detail::swizzle<4,T,P,3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
    +
    822  struct { glm::detail::swizzle<4,T,P,3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
    +
    823  struct { glm::detail::swizzle<4,T,P,3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
    +
    824  struct { glm::detail::swizzle<4,T,P,3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
    +
    825  struct { glm::detail::swizzle<4,T,P,3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
    +
    826  struct { glm::detail::swizzle<4,T,P,3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
    +
    827  struct { glm::detail::swizzle<4,T,P,3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
    +
    828  struct { glm::detail::swizzle<4,T,P,3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
    +
    829  struct { glm::detail::swizzle<4,T,P,3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
    +
    830  struct { glm::detail::swizzle<4,T,P,3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
    +
    831  struct { glm::detail::swizzle<4,T,P,3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
    +
    832  struct { glm::detail::swizzle<4,T,P,3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
    +
    833  struct { glm::detail::swizzle<4,T,P,3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
    +
    834  struct { glm::detail::swizzle<4,T,P,3,3,3,3> E3 ## E3 ## E3 ## E3; };
    +
    835 
    +
    836 #endif//glm_core_swizzle
    +
    + - diff --git a/doc/api/a00005.html b/doc/api/a00005.html index 91f0220e..514fb379 100644 --- a/doc/api/a00005.html +++ b/doc/api/a00005.html @@ -2,42 +2,31 @@ - -_fixes.hpp File Reference + +_swizzle_func.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    -
    _fixes.hpp File Reference
    -
    +
    _swizzle_func.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2011-02-21 / 2011-11-22
    -
    Author:
    Christophe Riccio
    - -

    Definition in file _fixes.hpp.

    -
    - +

    GLM Core

    +
    Date
    2011-10-16 / 2011-10-16
    +
    Author
    Christophe Riccio
    +

    Definition in file _swizzle_func.hpp.

    + + - diff --git a/doc/api/a00005_source.html b/doc/api/a00005_source.html index 686d7c22..6505b956 100644 --- a/doc/api/a00005_source.html +++ b/doc/api/a00005_source.html @@ -2,42 +2,31 @@ - -_fixes.hpp Source File + +_swizzle_func.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,70 +35,809 @@
  • File List
  • + +
    -
    _fixes.hpp
    -
    +
    _swizzle_func.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #include <cmath>
    -00030 
    -00032 #ifdef max
    -00033 #undef max
    -00034 #endif
    -00035 
    -00037 #ifdef min
    -00038 #undef min
    -00039 #endif
    -00040 
    -00042 #ifdef isnan
    -00043 #undef isnan
    -00044 #endif
    -00045 
    -00047 #ifdef isinf
    -00048 #undef isinf
    -00049 #endif
    -00050 
    -00052 #ifdef log2
    -00053 #undef log2
    -00054 #endif
    -00055 
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_swizzle_func
    +
    30 #define glm_core_swizzle_func
    +
    31 
    +
    32 #define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
    +
    33  SWIZZLED_TYPE<TMPL_TYPE> A ## B() CONST \
    +
    34  { \
    +
    35  return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B); \
    +
    36  }
    +
    37 
    +
    38 #define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
    +
    39  SWIZZLED_TYPE<TMPL_TYPE> A ## B ## C() CONST \
    +
    40  { \
    +
    41  return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C); \
    +
    42  }
    +
    43 
    +
    44 #define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
    +
    45  SWIZZLED_TYPE<TMPL_TYPE> A ## B ## C ## D() CONST \
    +
    46  { \
    +
    47  return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C, this->D); \
    +
    48  }
    +
    49 
    +
    50 #define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
    +
    51  template <typename TMPL_TYPE> \
    +
    52  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B() CONST \
    +
    53  { \
    +
    54  return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B); \
    +
    55  }
    +
    56 
    +
    57 #define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
    +
    58  template <typename TMPL_TYPE> \
    +
    59  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B ## C() CONST \
    +
    60  { \
    +
    61  return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C); \
    +
    62  }
    +
    63 
    +
    64 #define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
    +
    65  template <typename TMPL_TYPE> \
    +
    66  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B ## C ## D() CONST \
    +
    67  { \
    +
    68  return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C, this->D); \
    +
    69  }
    +
    70 
    +
    71 #define GLM_MUTABLE
    +
    72 
    +
    73 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    +
    74  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    +
    75  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)
    +
    76 
    +
    77 #define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \
    +
    78  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \
    +
    79  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \
    +
    80  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)
    +
    81 
    +
    82 //GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)
    +
    83 
    +
    84 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    85  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    +
    86  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
    +
    87  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
    +
    88  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
    +
    89  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
    +
    90  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)
    +
    91 
    +
    92 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    93  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \
    +
    94  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \
    +
    95  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \
    +
    96  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \
    +
    97  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \
    +
    98  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)
    +
    99 
    +
    100 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    +
    101  GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    +
    102  GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)
    +
    103 
    +
    104 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \
    +
    105  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \
    +
    106  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \
    +
    107  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, q)
    +
    108 
    +
    109 //GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)
    +
    110 
    +
    111 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    112  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    +
    113  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
    +
    114  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \
    +
    115  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
    +
    116  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
    +
    117  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \
    +
    118  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
    +
    119  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \
    +
    120  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \
    +
    121  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \
    +
    122  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \
    +
    123  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)
    +
    124 
    +
    125 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    126  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \
    +
    127  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \
    +
    128  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \
    +
    129  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \
    +
    130  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \
    +
    131  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \
    +
    132  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \
    +
    133  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \
    +
    134  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \
    +
    135  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \
    +
    136  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \
    +
    137  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \
    +
    138  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \
    +
    139  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \
    +
    140  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \
    +
    141  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \
    +
    142  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \
    +
    143  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \
    +
    144  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \
    +
    145  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \
    +
    146  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \
    +
    147  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \
    +
    148  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \
    +
    149  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)
    +
    150 
    +
    151 #define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    152  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \
    +
    153  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \
    +
    154  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \
    +
    155  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \
    +
    156  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \
    +
    157  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \
    +
    158  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \
    +
    159  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \
    +
    160  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \
    +
    161  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \
    +
    162  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \
    +
    163  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \
    +
    164  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \
    +
    165  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \
    +
    166  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \
    +
    167  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \
    +
    168  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \
    +
    169  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \
    +
    170  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \
    +
    171  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \
    +
    172  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \
    +
    173  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \
    +
    174  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \
    +
    175  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)
    +
    176 
    +
    177 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
    +
    178  GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
    +
    179  GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
    +
    180  GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
    +
    181 
    +
    182 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    +
    183  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
    +
    184  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
    +
    185  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p)
    +
    186 
    +
    187 //GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)
    +
    188 
    +
    189 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    +
    190  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    +
    191  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    +
    192  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    +
    193  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)
    +
    194 
    +
    195 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    +
    196  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    +
    197  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    +
    198  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    +
    199  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    +
    200  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    +
    201  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    +
    202  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    +
    203  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)
    +
    204 
    +
    205 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    +
    206  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    +
    207  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    +
    208  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    +
    209  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    +
    210  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    +
    211  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    +
    212  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    +
    213  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    +
    214  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    +
    215  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    +
    216  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    +
    217  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    +
    218  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    +
    219  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    +
    220  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    +
    221  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)
    +
    222 
    +
    223 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \
    +
    224  GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \
    +
    225  GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \
    +
    226  GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)
    +
    227 
    +
    228 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    +
    229  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \
    +
    230  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \
    +
    231  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)
    +
    232 
    +
    233 //GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)
    +
    234 
    +
    235 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    236  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    +
    237  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    +
    238  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
    +
    239  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    +
    240  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
    +
    241  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
    +
    242  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
    +
    243  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
    +
    244  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)
    +
    245 
    +
    246 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    247  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    +
    248  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    +
    249  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
    +
    250  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    +
    251  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    +
    252  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
    +
    253  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
    +
    254  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
    +
    255  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
    +
    256  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    +
    257  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    +
    258  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
    +
    259  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    +
    260  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
    +
    261  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
    +
    262  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
    +
    263  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
    +
    264  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
    +
    265  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
    +
    266  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
    +
    267  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
    +
    268  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
    +
    269  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
    +
    270  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
    +
    271  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
    +
    272  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
    +
    273  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)
    +
    274 
    +
    275 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    276  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    +
    277  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    +
    278  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
    +
    279  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    +
    280  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    +
    281  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
    +
    282  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
    +
    283  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
    +
    284  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
    +
    285  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    +
    286  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    +
    287  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
    +
    288  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    +
    289  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    +
    290  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
    +
    291  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
    +
    292  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
    +
    293  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
    +
    294  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
    +
    295  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
    +
    296  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
    +
    297  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
    +
    298  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
    +
    299  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
    +
    300  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
    +
    301  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
    +
    302  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
    +
    303  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
    +
    304  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
    +
    305  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
    +
    306  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
    +
    307  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
    +
    308  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
    +
    309  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
    +
    310  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
    +
    311  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
    +
    312  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    +
    313  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    +
    314  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
    +
    315  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    +
    316  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    +
    317  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
    +
    318  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
    +
    319  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
    +
    320  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
    +
    321  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    +
    322  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    +
    323  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
    +
    324  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    +
    325  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
    +
    326  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
    +
    327  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
    +
    328  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
    +
    329  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
    +
    330  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
    +
    331  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
    +
    332  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
    +
    333  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
    +
    334  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
    +
    335  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
    +
    336  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
    +
    337  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
    +
    338  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
    +
    339  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
    +
    340  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
    +
    341  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
    +
    342  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
    +
    343  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
    +
    344  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
    +
    345  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
    +
    346  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
    +
    347  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
    +
    348  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
    +
    349  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
    +
    350  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
    +
    351  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
    +
    352  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
    +
    353  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
    +
    354  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
    +
    355  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
    +
    356  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
    +
    357  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
    +
    358  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
    +
    359  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
    +
    360  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
    +
    361  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
    +
    362  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
    +
    363  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
    +
    364  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
    +
    365  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
    +
    366  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
    +
    367  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
    +
    368  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
    +
    369  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
    +
    370  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
    +
    371  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
    +
    372  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
    +
    373  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
    +
    374  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
    +
    375  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
    +
    376  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
    +
    377  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
    +
    378  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
    +
    379  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
    +
    380  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
    +
    381  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
    +
    382  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
    +
    383  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
    +
    384  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
    +
    385  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
    +
    386  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
    +
    387  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
    +
    388  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
    +
    389  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
    +
    390  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
    +
    391  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
    +
    392  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
    +
    393  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
    +
    394  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
    +
    395  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
    +
    396  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
    +
    397  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
    +
    398  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
    +
    399  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
    +
    400  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
    +
    401  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
    +
    402  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
    +
    403  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
    +
    404  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
    +
    405  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
    +
    406  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
    +
    407  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
    +
    408  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
    +
    409  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
    +
    410  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
    +
    411  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
    +
    412  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
    +
    413  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
    +
    414  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
    +
    415  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
    +
    416  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
    +
    417  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
    +
    418  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
    +
    419  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C)
    +
    420 
    +
    421 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \
    +
    422  GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \
    +
    423  GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    +
    424  GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)
    +
    425 
    +
    426 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    +
    427  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \
    +
    428  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \
    +
    429  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q)
    +
    430 
    +
    431 //GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)
    +
    432 
    +
    433 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    434  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    +
    435  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    +
    436  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
    +
    437  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \
    +
    438  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    +
    439  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
    +
    440  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
    +
    441  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \
    +
    442  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
    +
    443  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
    +
    444  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \
    +
    445  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \
    +
    446  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \
    +
    447  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \
    +
    448  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \
    +
    449  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)
    +
    450 
    +
    451 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    452  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    +
    453  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    +
    454  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
    +
    455  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \
    +
    456  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    +
    457  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    +
    458  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
    +
    459  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \
    +
    460  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
    +
    461  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
    +
    462  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
    +
    463  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \
    +
    464  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \
    +
    465  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \
    +
    466  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \
    +
    467  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \
    +
    468  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    +
    469  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    +
    470  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
    +
    471  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \
    +
    472  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    +
    473  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
    +
    474  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
    +
    475  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \
    +
    476  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
    +
    477  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
    +
    478  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
    +
    479  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \
    +
    480  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \
    +
    481  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \
    +
    482  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \
    +
    483  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \
    +
    484  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
    +
    485  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
    +
    486  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
    +
    487  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \
    +
    488  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
    +
    489  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
    +
    490  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
    +
    491  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \
    +
    492  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
    +
    493  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
    +
    494  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \
    +
    495  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \
    +
    496  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \
    +
    497  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \
    +
    498  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \
    +
    499  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \
    +
    500  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \
    +
    501  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \
    +
    502  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \
    +
    503  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \
    +
    504  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \
    +
    505  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \
    +
    506  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \
    +
    507  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \
    +
    508  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \
    +
    509  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \
    +
    510  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \
    +
    511  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \
    +
    512  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \
    +
    513  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \
    +
    514  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \
    +
    515  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)
    +
    516 
    +
    517 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    518  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    +
    519  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    +
    520  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
    +
    521  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \
    +
    522  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    +
    523  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    +
    524  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
    +
    525  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \
    +
    526  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
    +
    527  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
    +
    528  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
    +
    529  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \
    +
    530  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \
    +
    531  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \
    +
    532  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \
    +
    533  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \
    +
    534  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    +
    535  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    +
    536  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
    +
    537  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \
    +
    538  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    +
    539  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    +
    540  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
    +
    541  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \
    +
    542  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
    +
    543  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
    +
    544  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
    +
    545  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \
    +
    546  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \
    +
    547  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \
    +
    548  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \
    +
    549  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \
    +
    550  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
    +
    551  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
    +
    552  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
    +
    553  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \
    +
    554  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
    +
    555  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
    +
    556  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
    +
    557  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \
    +
    558  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
    +
    559  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
    +
    560  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
    +
    561  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \
    +
    562  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \
    +
    563  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \
    +
    564  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \
    +
    565  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \
    +
    566  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
    +
    567  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
    +
    568  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
    +
    569  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \
    +
    570  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
    +
    571  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
    +
    572  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
    +
    573  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \
    +
    574  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
    +
    575  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
    +
    576  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
    +
    577  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \
    +
    578  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \
    +
    579  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \
    +
    580  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \
    +
    581  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \
    +
    582  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    +
    583  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    +
    584  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
    +
    585  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \
    +
    586  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    +
    587  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    +
    588  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
    +
    589  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \
    +
    590  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
    +
    591  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
    +
    592  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
    +
    593  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \
    +
    594  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \
    +
    595  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \
    +
    596  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \
    +
    597  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \
    +
    598  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    +
    599  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    +
    600  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
    +
    601  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \
    +
    602  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    +
    603  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
    +
    604  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
    +
    605  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \
    +
    606  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
    +
    607  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
    +
    608  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
    +
    609  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \
    +
    610  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \
    +
    611  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \
    +
    612  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \
    +
    613  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \
    +
    614  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
    +
    615  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
    +
    616  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
    +
    617  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \
    +
    618  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
    +
    619  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
    +
    620  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
    +
    621  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \
    +
    622  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
    +
    623  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
    +
    624  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
    +
    625  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \
    +
    626  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \
    +
    627  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \
    +
    628  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \
    +
    629  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \
    +
    630  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
    +
    631  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
    +
    632  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
    +
    633  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \
    +
    634  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
    +
    635  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
    +
    636  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
    +
    637  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \
    +
    638  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
    +
    639  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
    +
    640  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
    +
    641  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \
    +
    642  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \
    +
    643  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \
    +
    644  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \
    +
    645  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \
    +
    646  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
    +
    647  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
    +
    648  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
    +
    649  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \
    +
    650  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
    +
    651  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
    +
    652  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
    +
    653  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \
    +
    654  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
    +
    655  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
    +
    656  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
    +
    657  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \
    +
    658  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \
    +
    659  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \
    +
    660  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \
    +
    661  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \
    +
    662  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
    +
    663  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
    +
    664  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
    +
    665  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \
    +
    666  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
    +
    667  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
    +
    668  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
    +
    669  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \
    +
    670  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
    +
    671  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
    +
    672  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
    +
    673  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \
    +
    674  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \
    +
    675  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \
    +
    676  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \
    +
    677  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \
    +
    678  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
    +
    679  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
    +
    680  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
    +
    681  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \
    +
    682  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
    +
    683  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
    +
    684  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
    +
    685  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \
    +
    686  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
    +
    687  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
    +
    688  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
    +
    689  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \
    +
    690  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \
    +
    691  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \
    +
    692  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \
    +
    693  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \
    +
    694  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
    +
    695  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
    +
    696  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
    +
    697  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \
    +
    698  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
    +
    699  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
    +
    700  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
    +
    701  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \
    +
    702  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
    +
    703  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
    +
    704  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
    +
    705  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \
    +
    706  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \
    +
    707  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \
    +
    708  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \
    +
    709  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \
    +
    710  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
    +
    711  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
    +
    712  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
    +
    713  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \
    +
    714  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
    +
    715  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
    +
    716  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
    +
    717  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \
    +
    718  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
    +
    719  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
    +
    720  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
    +
    721  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \
    +
    722  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \
    +
    723  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \
    +
    724  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \
    +
    725  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \
    +
    726  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
    +
    727  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
    +
    728  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
    +
    729  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \
    +
    730  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
    +
    731  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
    +
    732  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
    +
    733  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \
    +
    734  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
    +
    735  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
    +
    736  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
    +
    737  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \
    +
    738  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \
    +
    739  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \
    +
    740  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \
    +
    741  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \
    +
    742  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
    +
    743  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
    +
    744  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
    +
    745  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \
    +
    746  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
    +
    747  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
    +
    748  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
    +
    749  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \
    +
    750  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
    +
    751  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
    +
    752  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
    +
    753  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \
    +
    754  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \
    +
    755  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \
    +
    756  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \
    +
    757  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \
    +
    758  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
    +
    759  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
    +
    760  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
    +
    761  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \
    +
    762  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
    +
    763  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
    +
    764  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
    +
    765  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \
    +
    766  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
    +
    767  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
    +
    768  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \
    +
    769  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \
    +
    770  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \
    +
    771  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \
    +
    772  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \
    +
    773  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)
    +
    774 
    +
    775 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
    +
    776  GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
    +
    777  GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
    +
    778  GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
    +
    779 
    +
    780 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    +
    781  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
    +
    782  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
    +
    783  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p)
    +
    784 
    +
    785 //GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)
    +
    786 
    +
    787 #endif//glm_core_swizzle_func
    +
    + - diff --git a/doc/api/a00006.html b/doc/api/a00006.html index 3eab9730..7f6ce696 100644 --- a/doc/api/a00006.html +++ b/doc/api/a00006.html @@ -2,42 +2,31 @@ - -_swizzle.hpp File Reference + +_vectorize.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    -
    _swizzle.hpp File Reference
    -
    +
    _vectorize.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2006-04-20 / 2011-02-16
    -
    Author:
    Christophe Riccio
    - -

    Definition in file _swizzle.hpp.

    -
    - +

    GLM Core

    +
    Date
    2011-10-14 / 2011-10-14
    +
    Author
    Christophe Riccio
    +

    Definition in file _vectorize.hpp.

    + + - diff --git a/doc/api/a00006_source.html b/doc/api/a00006_source.html index 61fe2a77..a43ce60d 100644 --- a/doc/api/a00006_source.html +++ b/doc/api/a00006_source.html @@ -2,42 +2,31 @@ - -_swizzle.hpp Source File + +_vectorize.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,857 +35,181 @@
  • File List
  • + +
    -
    _swizzle.hpp
    -
    +
    _vectorize.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_swizzle
    -00030 #define glm_core_swizzle
    -00031 
    -00032 #include "_swizzle_func.hpp"
    -00033 
    -00034 namespace glm
    -00035 {
    -00036         enum comp
    -00037         {
    -00038                 X = 0,
    -00039                 R = 0,
    -00040                 S = 0,
    -00041                 Y = 1,
    -00042                 G = 1,
    -00043                 T = 1,
    -00044                 Z = 2,
    -00045                 B = 2,
    -00046                 P = 2,
    -00047                 W = 3,
    -00048                 A = 3,
    -00049                 Q = 3
    -00050         };
    -00051 }//namespace glm
    -00052 
    -00053 namespace glm{
    -00054 namespace detail
    -00055 {
    -00056     // Internal class for implementing swizzle operators
    -00057     template <typename T, int N>
    -00058     struct _swizzle_base0
    -00059     {
    -00060         typedef T       value_type;
    -00061 
    -00062     protected:
    -00063         value_type&         elem   (size_t i)       { return (reinterpret_cast<value_type*>(_buffer))[i]; }
    -00064         const value_type&   elem   (size_t i) const { return (reinterpret_cast<const value_type*>(_buffer))[i]; }
    -00065 
    -00066         // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
    -00067         // The size 1 buffer is assumed to aligned to the actual members so that the
    -00068         // elem() 
    -00069         char    _buffer[1];
    -00070     };
    -00071 
    -00072     template <typename T, typename V, int E0, int E1, int E2, int E3, int N>
    -00073     struct _swizzle_base1 : public _swizzle_base0<T,N>
    -00074     {
    -00075     };
    -00076 
    -00077     template <typename T, typename V, int E0, int E1>
    -00078     struct _swizzle_base1<T,V,E0,E1,-1,-2,2> : public _swizzle_base0<T,2>
    -00079     {
    -00080         V operator ()()  const { return V(this->elem(E0), this->elem(E1)); }
    -00081     };
    -00082 
    -00083     template <typename T, typename V, int E0, int E1, int E2>
    -00084     struct _swizzle_base1<T,V,E0,E1,E2,-1,3> : public _swizzle_base0<T,3>
    -00085     {
    -00086         V operator ()()  const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); }
    -00087     };
    -00088 
    -00089     template <typename T, typename V, int E0, int E1, int E2, int E3>
    -00090     struct _swizzle_base1<T,V,E0,E1,E2,E3,4> : public _swizzle_base0<T,4>
    -00091     { 
    -00092         V operator ()()  const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
    -00093     };
    -00094 
    -00095     // Internal class for implementing swizzle operators
    -00096     /*
    -00097         Template parameters:
    -00098 
    -00099         ValueType = type of scalar values (e.g. float, double)
    -00100         VecType   = class the swizzle is applies to (e.g. tvec3<float>)
    -00101         N         = number of components in the vector (e.g. 3)
    -00102         E0...3    = what index the n-th element of this swizzle refers to in the unswizzled vec
    -00103         
    -00104         DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
    -00105             containing duplicate elements so that they cannot be used as r-values).            
    -00106     */
    -00107     template <typename ValueType, typename VecType, int N, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
    -00108     struct _swizzle_base2 : public _swizzle_base1<ValueType,VecType,E0,E1,E2,E3,N>
    -00109     {
    -00110                 typedef VecType vec_type;
    -00111                 typedef ValueType value_type;
    -00112 
    -00113                 _swizzle_base2& operator= (const ValueType& t)
    -00114                 {
    -00115                         for (int i = 0; i < N; ++i)
    -00116                                 (*this)[i] = t;
    -00117                         return *this;
    -00118                 }
    -00119 
    -00120                 _swizzle_base2& operator= (const VecType& that)
    -00121                 {
    -00122                         struct op { 
    -00123                                 void operator() (value_type& e, value_type& t) { e = t; } 
    -00124                         };
    -00125                         _apply_op(that, op());
    -00126                         return *this;
    -00127                 }
    -00128 
    -00129                 void operator -= (const VecType& that)
    -00130                 {
    -00131                         struct op { 
    -00132                                 void operator() (value_type& e, value_type& t) { e -= t; } 
    -00133                         };
    -00134                         _apply_op(that, op());
    -00135                 }
    -00136 
    -00137                 void operator += (const VecType& that)
    -00138                 {
    -00139                         struct op { 
    -00140                                 void operator() (value_type& e, value_type& t) { e += t; } 
    -00141                         };
    -00142                         _apply_op(that, op());
    -00143                 }
    -00144 
    -00145                 void operator *= (const VecType& that)
    -00146                 {
    -00147                         struct op { 
    -00148                                 void operator() (value_type& e, value_type& t) { e *= t; } 
    -00149                         };
    -00150                         _apply_op(that, op());
    -00151                 }
    -00152 
    -00153                 void operator /= (const VecType& that)
    -00154                 {
    -00155                         struct op { 
    -00156                                 void operator() (value_type& e, value_type& t) { e /= t; } 
    -00157                         };
    -00158                         _apply_op(that, op());
    -00159                 }
    -00160 
    -00161                 value_type& operator[]  (size_t i)
    -00162                 {
    -00163                         static const int offset_dst[4] = { E0, E1, E2, E3 };
    -00164                         return this->elem(offset_dst[i]);
    -00165                 }
    -00166                 value_type  operator[]  (size_t i) const
    -00167                 {
    -00168                         static const int offset_dst[4] = { E0, E1, E2, E3 };
    -00169                         return this->elem(offset_dst[i]);
    -00170                 }
    -00171         protected:
    -00172                 template <typename T>
    -00173                 void _apply_op(const VecType& that, T op)
    -00174                 {
    -00175                         // Make a copy of the data in this == &that.
    -00176                         // The copier should optimize out the copy in cases where the function is
    -00177                         // properly inlined and the copy is not necessary.
    -00178                         ValueType t[N];
    -00179                         for (int i = 0; i < N; ++i)
    -00180                                 t[i] = that[i];
    -00181                         for (int i = 0; i < N; ++i)
    -00182                                 op( (*this)[i], t[i] );
    -00183                 }
    -00184     };
    -00185 
    -00186         // Specialization for swizzles containing duplicate elements.  These cannot be modified.
    -00187         template <typename ValueType, typename VecType, int N, int E0, int E1, int E2, int E3>
    -00188         struct _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,1> : public _swizzle_base1<ValueType,VecType,E0,E1,E2,E3,N>
    -00189         {
    -00190                 typedef VecType         vec_type;        
    -00191                 typedef ValueType       value_type;
    -00192 
    -00193                 struct Stub {};
    -00194                 _swizzle_base2& operator= (const Stub& that) {}
    -00195 
    -00196                 value_type  operator[]  (size_t i) const
    -00197                 {
    -00198                         static const int offset_dst[4] = { E0, E1, E2, E3 };
    -00199                         return this->elem(offset_dst[i]);
    -00200                 } 
    -00201         };
    -00202 
    -00203         template <int N,typename ValueType, typename VecType, int E0,int E1,int E2,int E3>
    -00204         struct swizzle : public _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)>
    -00205         {
    -00206                 typedef _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)> base_type;
    -00207 
    -00208                 using base_type::operator=;
    -00209 
    -00210                 operator VecType () const { return (*this)(); }
    -00211         };
    -00212 
    -00213 //
    -00214 // To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
    -00215 //
    -00216 #define _GLM_SWIZZLE_TEMPLATE1   template <int N, typename T, typename V, int E0, int E1, int E2, int E3>
    -00217 #define _GLM_SWIZZLE_TEMPLATE2   template <int N, typename T, typename V, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>
    -00218 #define _GLM_SWIZZLE_TYPE1       glm::detail::swizzle<N,T,V,E0,E1,E2,E3>
    -00219 #define _GLM_SWIZZLE_TYPE2       glm::detail::swizzle<N,T,V,F0,F1,F2,F3>
    -00220 
    -00221 //
    -00222 // Wrapper for a binary operator (e.g. u.yy + v.zy)
    -00223 //
    -00224 #define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \
    -00225         _GLM_SWIZZLE_TEMPLATE2                                                          \
    -00226         V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b)  \
    -00227         {                                                                               \
    -00228                 return a() OPERAND b();                                                     \
    -00229         }                                                                               \
    -00230         _GLM_SWIZZLE_TEMPLATE1                                                          \
    -00231         V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b)                   \
    -00232         {                                                                               \
    -00233                 return a() OPERAND b;                                                       \
    -00234         }                                                                               \
    -00235         _GLM_SWIZZLE_TEMPLATE1                                                          \
    -00236         V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b)                   \
    -00237         {                                                                               \
    -00238                 return a OPERAND b();                                                       \
    -00239         }
    -00240 
    -00241 //
    -00242 // Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
    -00243 //
    -00244 #define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \
    -00245         _GLM_SWIZZLE_TEMPLATE1                                                          \
    -00246         V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b)                   \
    -00247         {                                                                               \
    -00248                 return a() OPERAND b;                                                       \
    -00249         }                                                                               \
    -00250         _GLM_SWIZZLE_TEMPLATE1                                                          \
    -00251         V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b)                   \
    -00252         {                                                                               \
    -00253                 return a OPERAND b();                                                       \
    -00254         }
    -00255 
    -00256 //
    -00257 // Macro for wrapping a function taking one argument (e.g. abs())
    -00258 //
    -00259 #define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION)                          \
    -00260         _GLM_SWIZZLE_TEMPLATE1                                                          \
    -00261         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a)  \
    -00262         {                                                                               \
    -00263                 return FUNCTION(a());                                                       \
    -00264         }
    -00265 
    -00266 //
    -00267 // Macro for wrapping a function taking two vector arguments (e.g. dot()).
    -00268 //
    -00269 #define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION)                                                      \
    -00270         _GLM_SWIZZLE_TEMPLATE2                                                                                      \
    -00271         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
    -00272         {                                                                                                           \
    -00273                 return FUNCTION(a(), b());                                                                              \
    -00274         }                                                                                                           \
    -00275         _GLM_SWIZZLE_TEMPLATE1                                                                                      \
    -00276         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \
    -00277         {                                                                                                           \
    -00278                 return FUNCTION(a(), b());                                                                              \
    -00279         }                                                                                                           \
    -00280         _GLM_SWIZZLE_TEMPLATE1                                                                                      \
    -00281         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b)         \
    -00282         {                                                                                                           \
    -00283                 return FUNCTION(a(), b);                                                                                \
    -00284         }                                                                                                           \
    -00285         _GLM_SWIZZLE_TEMPLATE1                                                                                      \
    -00286         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b)                  \
    -00287         {                                                                                                           \
    -00288                 return FUNCTION(a, b());                                                                                \
    -00289         } 
    -00290 
    -00291 //
    -00292 // Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
    -00293 //
    -00294 #define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION)                                                             \
    -00295         _GLM_SWIZZLE_TEMPLATE2                                                                                                    \
    -00296         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c)   \
    -00297         {                                                                                                                         \
    -00298                 return FUNCTION(a(), b(), c);                                                                                         \
    -00299         }                                                                                                                         \
    -00300         _GLM_SWIZZLE_TEMPLATE1                                                                                                    \
    -00301         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c)   \
    -00302         {                                                                                                                         \
    -00303                 return FUNCTION(a(), b(), c);                                                                                         \
    -00304         }                                                                                                                         \
    -00305         _GLM_SWIZZLE_TEMPLATE1                                                                                                    \
    -00306         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
    -00307         {                                                                                                                         \
    -00308                 return FUNCTION(a(), b, c);                                                                                           \
    -00309         }                                                                                                                         \
    -00310         _GLM_SWIZZLE_TEMPLATE1                                                                                                    \
    -00311         typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c)           \
    -00312         {                                                                                                                         \
    -00313                 return FUNCTION(a, b(), c);                                                                                           \
    -00314         } 
    -00315  
    -00316 }//namespace detail 
    -00317 }//namespace glm
    -00318 
    -00319 namespace glm
    -00320 {
    -00321         namespace detail
    -00322         {
    -00323                 _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
    -00324                 _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
    -00325         
    -00326                 _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
    -00327                 _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
    -00328                 _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
    -00329                 _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
    -00330         }
    -00331 
    -00332     //
    -00333     // Swizzles are distinct types from the unswizzled type.  The below macros will
    -00334     // provide template specializations for the swizzle types for the given functions
    -00335     // so that the compiler does not have any ambiguity to choosing how to handle
    -00336     // the function.
    -00337     //
    -00338     // The alternative is to use the operator()() when calling the function in order
    -00339     // to explicitly convert the swizzled type to the unswizzled type.
    -00340     //
    -00341 
    -00342     //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    abs);
    -00343     //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acos);
    -00344     //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acosh);
    -00345     //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    all);
    -00346     //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    any);
    -00347     
    -00348     //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type,  dot);
    -00349     //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    cross);
    -00350     //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    step);    
    -00351     //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
    -00352 }
    -00353 
    -00354 #define _GLM_SWIZZLE2_2_MEMBERS(T,P,E0,E1) \
    -00355         struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \
    -00356         struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \
    -00357         struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \
    -00358         struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; 
    -00359 
    -00360 #define _GLM_SWIZZLE2_3_MEMBERS(T,P2,E0,E1) \
    -00361         struct { glm::detail::swizzle<3,T,P2,0,0,0,-1> E0 ## E0 ## E0; }; \
    -00362         struct { glm::detail::swizzle<3,T,P2,0,0,1,-1> E0 ## E0 ## E1; }; \
    -00363         struct { glm::detail::swizzle<3,T,P2,0,1,0,-1> E0 ## E1 ## E0; }; \
    -00364         struct { glm::detail::swizzle<3,T,P2,0,1,1,-1> E0 ## E1 ## E1; }; \
    -00365         struct { glm::detail::swizzle<3,T,P2,1,0,0,-1> E1 ## E0 ## E0; }; \
    -00366         struct { glm::detail::swizzle<3,T,P2,1,0,1,-1> E1 ## E0 ## E1; }; \
    -00367         struct { glm::detail::swizzle<3,T,P2,1,1,0,-1> E1 ## E1 ## E0; }; \
    -00368         struct { glm::detail::swizzle<3,T,P2,1,1,1,-1> E1 ## E1 ## E1; };  
    -00369 
    -00370 #define _GLM_SWIZZLE2_4_MEMBERS(T,P2,E0,E1) \
    -00371         struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    -00372         struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    -00373         struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    -00374         struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    -00375         struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    -00376         struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    -00377         struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    -00378         struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    -00379         struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    -00380         struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    -00381         struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    -00382         struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    -00383         struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    -00384         struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    -00385         struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    -00386         struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; };  
    -00387 
    -00388 #define _GLM_SWIZZLE3_2_MEMBERS(T,P2,E0,E1,E2) \
    -00389         struct { glm::detail::swizzle<2,T,P2,0,0,-1,-2> E0 ## E0; }; \
    -00390         struct { glm::detail::swizzle<2,T,P2,0,1,-1,-2> E0 ## E1; }; \
    -00391         struct { glm::detail::swizzle<2,T,P2,0,2,-1,-2> E0 ## E2; }; \
    -00392         struct { glm::detail::swizzle<2,T,P2,1,0,-1,-2> E1 ## E0; }; \
    -00393         struct { glm::detail::swizzle<2,T,P2,1,1,-1,-2> E1 ## E1; }; \
    -00394         struct { glm::detail::swizzle<2,T,P2,1,2,-1,-2> E1 ## E2; }; \
    -00395         struct { glm::detail::swizzle<2,T,P2,2,0,-1,-2> E2 ## E0; }; \
    -00396         struct { glm::detail::swizzle<2,T,P2,2,1,-1,-2> E2 ## E1; }; \
    -00397         struct { glm::detail::swizzle<2,T,P2,2,2,-1,-2> E2 ## E2; }; 
    -00398 
    -00399 #define _GLM_SWIZZLE3_3_MEMBERS(T,P,E0,E1,E2) \
    -00400         struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \
    -00401         struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \
    -00402         struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \
    -00403         struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \
    -00404         struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \
    -00405         struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \
    -00406         struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \
    -00407         struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \
    -00408         struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \
    -00409         struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \
    -00410         struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \
    -00411         struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \
    -00412         struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \
    -00413         struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \
    -00414         struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \
    -00415         struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \
    -00416         struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \
    -00417         struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \
    -00418         struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \
    -00419         struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \
    -00420         struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \
    -00421         struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \
    -00422         struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \
    -00423         struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \
    -00424         struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \
    -00425         struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \
    -00426         struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; };
    -00427 
    -00428 #define _GLM_SWIZZLE3_4_MEMBERS(T,P2,E0,E1,E2) \
    -00429         struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    -00430         struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    -00431         struct { glm::detail::swizzle<4,T,P2,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
    -00432         struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    -00433         struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    -00434         struct { glm::detail::swizzle<4,T,P2,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
    -00435         struct { glm::detail::swizzle<4,T,P2,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
    -00436         struct { glm::detail::swizzle<4,T,P2,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
    -00437         struct { glm::detail::swizzle<4,T,P2,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
    -00438         struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    -00439         struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    -00440         struct { glm::detail::swizzle<4,T,P2,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
    -00441         struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    -00442         struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    -00443         struct { glm::detail::swizzle<4,T,P2,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
    -00444         struct { glm::detail::swizzle<4,T,P2,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
    -00445         struct { glm::detail::swizzle<4,T,P2,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
    -00446         struct { glm::detail::swizzle<4,T,P2,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
    -00447         struct { glm::detail::swizzle<4,T,P2,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
    -00448         struct { glm::detail::swizzle<4,T,P2,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
    -00449         struct { glm::detail::swizzle<4,T,P2,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
    -00450         struct { glm::detail::swizzle<4,T,P2,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
    -00451         struct { glm::detail::swizzle<4,T,P2,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
    -00452         struct { glm::detail::swizzle<4,T,P2,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
    -00453         struct { glm::detail::swizzle<4,T,P2,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
    -00454         struct { glm::detail::swizzle<4,T,P2,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
    -00455         struct { glm::detail::swizzle<4,T,P2,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
    -00456         struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    -00457         struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    -00458         struct { glm::detail::swizzle<4,T,P2,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
    -00459         struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    -00460         struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    -00461         struct { glm::detail::swizzle<4,T,P2,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
    -00462         struct { glm::detail::swizzle<4,T,P2,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
    -00463         struct { glm::detail::swizzle<4,T,P2,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
    -00464         struct { glm::detail::swizzle<4,T,P2,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
    -00465         struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    -00466         struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    -00467         struct { glm::detail::swizzle<4,T,P2,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
    -00468         struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    -00469         struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
    -00470         struct { glm::detail::swizzle<4,T,P2,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
    -00471         struct { glm::detail::swizzle<4,T,P2,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
    -00472         struct { glm::detail::swizzle<4,T,P2,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
    -00473         struct { glm::detail::swizzle<4,T,P2,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
    -00474         struct { glm::detail::swizzle<4,T,P2,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
    -00475         struct { glm::detail::swizzle<4,T,P2,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
    -00476         struct { glm::detail::swizzle<4,T,P2,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
    -00477         struct { glm::detail::swizzle<4,T,P2,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
    -00478         struct { glm::detail::swizzle<4,T,P2,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
    -00479         struct { glm::detail::swizzle<4,T,P2,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
    -00480         struct { glm::detail::swizzle<4,T,P2,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
    -00481         struct { glm::detail::swizzle<4,T,P2,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
    -00482         struct { glm::detail::swizzle<4,T,P2,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
    -00483         struct { glm::detail::swizzle<4,T,P2,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
    -00484         struct { glm::detail::swizzle<4,T,P2,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
    -00485         struct { glm::detail::swizzle<4,T,P2,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
    -00486         struct { glm::detail::swizzle<4,T,P2,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
    -00487         struct { glm::detail::swizzle<4,T,P2,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
    -00488         struct { glm::detail::swizzle<4,T,P2,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
    -00489         struct { glm::detail::swizzle<4,T,P2,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
    -00490         struct { glm::detail::swizzle<4,T,P2,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
    -00491         struct { glm::detail::swizzle<4,T,P2,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
    -00492         struct { glm::detail::swizzle<4,T,P2,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
    -00493         struct { glm::detail::swizzle<4,T,P2,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
    -00494         struct { glm::detail::swizzle<4,T,P2,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
    -00495         struct { glm::detail::swizzle<4,T,P2,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
    -00496         struct { glm::detail::swizzle<4,T,P2,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
    -00497         struct { glm::detail::swizzle<4,T,P2,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
    -00498         struct { glm::detail::swizzle<4,T,P2,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
    -00499         struct { glm::detail::swizzle<4,T,P2,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
    -00500         struct { glm::detail::swizzle<4,T,P2,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
    -00501         struct { glm::detail::swizzle<4,T,P2,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
    -00502         struct { glm::detail::swizzle<4,T,P2,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
    -00503         struct { glm::detail::swizzle<4,T,P2,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
    -00504         struct { glm::detail::swizzle<4,T,P2,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
    -00505         struct { glm::detail::swizzle<4,T,P2,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
    -00506         struct { glm::detail::swizzle<4,T,P2,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
    -00507         struct { glm::detail::swizzle<4,T,P2,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
    -00508         struct { glm::detail::swizzle<4,T,P2,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
    -00509         struct { glm::detail::swizzle<4,T,P2,2,2,2,2> E2 ## E2 ## E2 ## E2; }; 
    -00510 
    -00511 #define _GLM_SWIZZLE4_2_MEMBERS(T,P,E0,E1,E2,E3) \
    -00512         struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \
    -00513         struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \
    -00514         struct { glm::detail::swizzle<2,T,P,0,2,-1,-2> E0 ## E2; }; \
    -00515         struct { glm::detail::swizzle<2,T,P,0,3,-1,-2> E0 ## E3; }; \
    -00516         struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \
    -00517         struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; \
    -00518         struct { glm::detail::swizzle<2,T,P,1,2,-1,-2> E1 ## E2; }; \
    -00519         struct { glm::detail::swizzle<2,T,P,1,3,-1,-2> E1 ## E3; }; \
    -00520         struct { glm::detail::swizzle<2,T,P,2,0,-1,-2> E2 ## E0; }; \
    -00521         struct { glm::detail::swizzle<2,T,P,2,1,-1,-2> E2 ## E1; }; \
    -00522         struct { glm::detail::swizzle<2,T,P,2,2,-1,-2> E2 ## E2; }; \
    -00523         struct { glm::detail::swizzle<2,T,P,2,3,-1,-2> E2 ## E3; }; \
    -00524         struct { glm::detail::swizzle<2,T,P,3,0,-1,-2> E3 ## E0; }; \
    -00525         struct { glm::detail::swizzle<2,T,P,3,1,-1,-2> E3 ## E1; }; \
    -00526         struct { glm::detail::swizzle<2,T,P,3,2,-1,-2> E3 ## E2; }; \
    -00527         struct { glm::detail::swizzle<2,T,P,3,3,-1,-2> E3 ## E3; }; 
    -00528 
    -00529 #define _GLM_SWIZZLE4_3_MEMBERS(T,P,E0,E1,E2,E3) \
    -00530         struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \
    -00531         struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \
    -00532         struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \
    -00533         struct { glm::detail::swizzle<3,T,P,0,0,3,-1> E0 ## E0 ## E3; }; \
    -00534         struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \
    -00535         struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \
    -00536         struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \
    -00537         struct { glm::detail::swizzle<3,T,P,0,1,3,-1> E0 ## E1 ## E3; }; \
    -00538         struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \
    -00539         struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \
    -00540         struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \
    -00541         struct { glm::detail::swizzle<3,T,P,0,2,3,-1> E0 ## E2 ## E3; }; \
    -00542         struct { glm::detail::swizzle<3,T,P,0,3,0,-1> E0 ## E3 ## E0; }; \
    -00543         struct { glm::detail::swizzle<3,T,P,0,3,1,-1> E0 ## E3 ## E1; }; \
    -00544         struct { glm::detail::swizzle<3,T,P,0,3,2,-1> E0 ## E3 ## E2; }; \
    -00545         struct { glm::detail::swizzle<3,T,P,0,3,3,-1> E0 ## E3 ## E3; }; \
    -00546         struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \
    -00547         struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \
    -00548         struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \
    -00549         struct { glm::detail::swizzle<3,T,P,1,0,3,-1> E1 ## E0 ## E3; }; \
    -00550         struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \
    -00551         struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \
    -00552         struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \
    -00553         struct { glm::detail::swizzle<3,T,P,1,1,3,-1> E1 ## E1 ## E3; }; \
    -00554         struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \
    -00555         struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \
    -00556         struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \
    -00557         struct { glm::detail::swizzle<3,T,P,1,2,3,-1> E1 ## E2 ## E3; }; \
    -00558         struct { glm::detail::swizzle<3,T,P,1,3,0,-1> E1 ## E3 ## E0; }; \
    -00559         struct { glm::detail::swizzle<3,T,P,1,3,1,-1> E1 ## E3 ## E1; }; \
    -00560         struct { glm::detail::swizzle<3,T,P,1,3,2,-1> E1 ## E3 ## E2; }; \
    -00561         struct { glm::detail::swizzle<3,T,P,1,3,3,-1> E1 ## E3 ## E3; }; \
    -00562         struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \
    -00563         struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \
    -00564         struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \
    -00565         struct { glm::detail::swizzle<3,T,P,2,0,3,-1> E2 ## E0 ## E3; }; \
    -00566         struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \
    -00567         struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \
    -00568         struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \
    -00569         struct { glm::detail::swizzle<3,T,P,2,1,3,-1> E2 ## E1 ## E3; }; \
    -00570         struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \
    -00571         struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \
    -00572         struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; \
    -00573         struct { glm::detail::swizzle<3,T,P,2,2,3,-1> E2 ## E2 ## E3; }; \
    -00574         struct { glm::detail::swizzle<3,T,P,2,3,0,-1> E2 ## E3 ## E0; }; \
    -00575         struct { glm::detail::swizzle<3,T,P,2,3,1,-1> E2 ## E3 ## E1; }; \
    -00576         struct { glm::detail::swizzle<3,T,P,2,3,2,-1> E2 ## E3 ## E2; }; \
    -00577         struct { glm::detail::swizzle<3,T,P,2,3,3,-1> E2 ## E3 ## E3; }; \
    -00578         struct { glm::detail::swizzle<3,T,P,3,0,0,-1> E3 ## E0 ## E0; }; \
    -00579         struct { glm::detail::swizzle<3,T,P,3,0,1,-1> E3 ## E0 ## E1; }; \
    -00580         struct { glm::detail::swizzle<3,T,P,3,0,2,-1> E3 ## E0 ## E2; }; \
    -00581         struct { glm::detail::swizzle<3,T,P,3,0,3,-1> E3 ## E0 ## E3; }; \
    -00582         struct { glm::detail::swizzle<3,T,P,3,1,0,-1> E3 ## E1 ## E0; }; \
    -00583         struct { glm::detail::swizzle<3,T,P,3,1,1,-1> E3 ## E1 ## E1; }; \
    -00584         struct { glm::detail::swizzle<3,T,P,3,1,2,-1> E3 ## E1 ## E2; }; \
    -00585         struct { glm::detail::swizzle<3,T,P,3,1,3,-1> E3 ## E1 ## E3; }; \
    -00586         struct { glm::detail::swizzle<3,T,P,3,2,0,-1> E3 ## E2 ## E0; }; \
    -00587         struct { glm::detail::swizzle<3,T,P,3,2,1,-1> E3 ## E2 ## E1; }; \
    -00588         struct { glm::detail::swizzle<3,T,P,3,2,2,-1> E3 ## E2 ## E2; }; \
    -00589         struct { glm::detail::swizzle<3,T,P,3,2,3,-1> E3 ## E2 ## E3; }; \
    -00590         struct { glm::detail::swizzle<3,T,P,3,3,0,-1> E3 ## E3 ## E0; }; \
    -00591         struct { glm::detail::swizzle<3,T,P,3,3,1,-1> E3 ## E3 ## E1; }; \
    -00592         struct { glm::detail::swizzle<3,T,P,3,3,2,-1> E3 ## E3 ## E2; }; \
    -00593         struct { glm::detail::swizzle<3,T,P,3,3,3,-1> E3 ## E3 ## E3; };  
    -00594 
    -00595 #define _GLM_SWIZZLE4_4_MEMBERS(T,P,E0,E1,E2,E3) \
    -00596         struct { glm::detail::swizzle<4,T,P,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    -00597         struct { glm::detail::swizzle<4,T,P,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    -00598         struct { glm::detail::swizzle<4,T,P,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
    -00599         struct { glm::detail::swizzle<4,T,P,0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
    -00600         struct { glm::detail::swizzle<4,T,P,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    -00601         struct { glm::detail::swizzle<4,T,P,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    -00602         struct { glm::detail::swizzle<4,T,P,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
    -00603         struct { glm::detail::swizzle<4,T,P,0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
    -00604         struct { glm::detail::swizzle<4,T,P,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
    -00605         struct { glm::detail::swizzle<4,T,P,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
    -00606         struct { glm::detail::swizzle<4,T,P,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
    -00607         struct { glm::detail::swizzle<4,T,P,0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
    -00608         struct { glm::detail::swizzle<4,T,P,0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
    -00609         struct { glm::detail::swizzle<4,T,P,0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
    -00610         struct { glm::detail::swizzle<4,T,P,0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
    -00611         struct { glm::detail::swizzle<4,T,P,0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
    -00612         struct { glm::detail::swizzle<4,T,P,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    -00613         struct { glm::detail::swizzle<4,T,P,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    -00614         struct { glm::detail::swizzle<4,T,P,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
    -00615         struct { glm::detail::swizzle<4,T,P,0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
    -00616         struct { glm::detail::swizzle<4,T,P,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    -00617         struct { glm::detail::swizzle<4,T,P,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    -00618         struct { glm::detail::swizzle<4,T,P,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
    -00619         struct { glm::detail::swizzle<4,T,P,0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
    -00620         struct { glm::detail::swizzle<4,T,P,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
    -00621         struct { glm::detail::swizzle<4,T,P,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
    -00622         struct { glm::detail::swizzle<4,T,P,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
    -00623         struct { glm::detail::swizzle<4,T,P,0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
    -00624         struct { glm::detail::swizzle<4,T,P,0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
    -00625         struct { glm::detail::swizzle<4,T,P,0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
    -00626         struct { glm::detail::swizzle<4,T,P,0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
    -00627         struct { glm::detail::swizzle<4,T,P,0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
    -00628         struct { glm::detail::swizzle<4,T,P,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
    -00629         struct { glm::detail::swizzle<4,T,P,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
    -00630         struct { glm::detail::swizzle<4,T,P,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
    -00631         struct { glm::detail::swizzle<4,T,P,0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
    -00632         struct { glm::detail::swizzle<4,T,P,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
    -00633         struct { glm::detail::swizzle<4,T,P,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
    -00634         struct { glm::detail::swizzle<4,T,P,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
    -00635         struct { glm::detail::swizzle<4,T,P,0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
    -00636         struct { glm::detail::swizzle<4,T,P,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
    -00637         struct { glm::detail::swizzle<4,T,P,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
    -00638         struct { glm::detail::swizzle<4,T,P,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
    -00639         struct { glm::detail::swizzle<4,T,P,0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
    -00640         struct { glm::detail::swizzle<4,T,P,0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
    -00641         struct { glm::detail::swizzle<4,T,P,0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
    -00642         struct { glm::detail::swizzle<4,T,P,0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
    -00643         struct { glm::detail::swizzle<4,T,P,0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
    -00644         struct { glm::detail::swizzle<4,T,P,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    -00645         struct { glm::detail::swizzle<4,T,P,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    -00646         struct { glm::detail::swizzle<4,T,P,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
    -00647         struct { glm::detail::swizzle<4,T,P,1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
    -00648         struct { glm::detail::swizzle<4,T,P,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    -00649         struct { glm::detail::swizzle<4,T,P,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    -00650         struct { glm::detail::swizzle<4,T,P,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
    -00651         struct { glm::detail::swizzle<4,T,P,1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
    -00652         struct { glm::detail::swizzle<4,T,P,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
    -00653         struct { glm::detail::swizzle<4,T,P,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
    -00654         struct { glm::detail::swizzle<4,T,P,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
    -00655         struct { glm::detail::swizzle<4,T,P,1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
    -00656         struct { glm::detail::swizzle<4,T,P,1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
    -00657         struct { glm::detail::swizzle<4,T,P,1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
    -00658         struct { glm::detail::swizzle<4,T,P,1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
    -00659         struct { glm::detail::swizzle<4,T,P,1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
    -00660         struct { glm::detail::swizzle<4,T,P,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    -00661         struct { glm::detail::swizzle<4,T,P,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    -00662         struct { glm::detail::swizzle<4,T,P,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
    -00663         struct { glm::detail::swizzle<4,T,P,1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
    -00664         struct { glm::detail::swizzle<4,T,P,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    -00665         struct { glm::detail::swizzle<4,T,P,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
    -00666         struct { glm::detail::swizzle<4,T,P,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
    -00667         struct { glm::detail::swizzle<4,T,P,1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
    -00668         struct { glm::detail::swizzle<4,T,P,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
    -00669         struct { glm::detail::swizzle<4,T,P,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
    -00670         struct { glm::detail::swizzle<4,T,P,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
    -00671         struct { glm::detail::swizzle<4,T,P,1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
    -00672         struct { glm::detail::swizzle<4,T,P,1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
    -00673         struct { glm::detail::swizzle<4,T,P,1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
    -00674         struct { glm::detail::swizzle<4,T,P,1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
    -00675         struct { glm::detail::swizzle<4,T,P,1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
    -00676         struct { glm::detail::swizzle<4,T,P,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
    -00677         struct { glm::detail::swizzle<4,T,P,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
    -00678         struct { glm::detail::swizzle<4,T,P,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
    -00679         struct { glm::detail::swizzle<4,T,P,1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
    -00680         struct { glm::detail::swizzle<4,T,P,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
    -00681         struct { glm::detail::swizzle<4,T,P,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
    -00682         struct { glm::detail::swizzle<4,T,P,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
    -00683         struct { glm::detail::swizzle<4,T,P,1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
    -00684         struct { glm::detail::swizzle<4,T,P,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
    -00685         struct { glm::detail::swizzle<4,T,P,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
    -00686         struct { glm::detail::swizzle<4,T,P,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
    -00687         struct { glm::detail::swizzle<4,T,P,1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
    -00688         struct { glm::detail::swizzle<4,T,P,1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
    -00689         struct { glm::detail::swizzle<4,T,P,1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
    -00690         struct { glm::detail::swizzle<4,T,P,1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
    -00691         struct { glm::detail::swizzle<4,T,P,1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
    -00692         struct { glm::detail::swizzle<4,T,P,1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
    -00693         struct { glm::detail::swizzle<4,T,P,1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
    -00694         struct { glm::detail::swizzle<4,T,P,1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
    -00695         struct { glm::detail::swizzle<4,T,P,1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
    -00696         struct { glm::detail::swizzle<4,T,P,1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
    -00697         struct { glm::detail::swizzle<4,T,P,1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
    -00698         struct { glm::detail::swizzle<4,T,P,1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
    -00699         struct { glm::detail::swizzle<4,T,P,1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
    -00700         struct { glm::detail::swizzle<4,T,P,1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
    -00701         struct { glm::detail::swizzle<4,T,P,1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
    -00702         struct { glm::detail::swizzle<4,T,P,1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
    -00703         struct { glm::detail::swizzle<4,T,P,1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
    -00704         struct { glm::detail::swizzle<4,T,P,1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
    -00705         struct { glm::detail::swizzle<4,T,P,1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
    -00706         struct { glm::detail::swizzle<4,T,P,1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
    -00707         struct { glm::detail::swizzle<4,T,P,1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
    -00708         struct { glm::detail::swizzle<4,T,P,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
    -00709         struct { glm::detail::swizzle<4,T,P,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
    -00710         struct { glm::detail::swizzle<4,T,P,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
    -00711         struct { glm::detail::swizzle<4,T,P,2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
    -00712         struct { glm::detail::swizzle<4,T,P,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
    -00713         struct { glm::detail::swizzle<4,T,P,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
    -00714         struct { glm::detail::swizzle<4,T,P,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
    -00715         struct { glm::detail::swizzle<4,T,P,2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
    -00716         struct { glm::detail::swizzle<4,T,P,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
    -00717         struct { glm::detail::swizzle<4,T,P,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
    -00718         struct { glm::detail::swizzle<4,T,P,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
    -00719         struct { glm::detail::swizzle<4,T,P,2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
    -00720         struct { glm::detail::swizzle<4,T,P,2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
    -00721         struct { glm::detail::swizzle<4,T,P,2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
    -00722         struct { glm::detail::swizzle<4,T,P,2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
    -00723         struct { glm::detail::swizzle<4,T,P,2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
    -00724         struct { glm::detail::swizzle<4,T,P,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
    -00725         struct { glm::detail::swizzle<4,T,P,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
    -00726         struct { glm::detail::swizzle<4,T,P,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
    -00727         struct { glm::detail::swizzle<4,T,P,2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
    -00728         struct { glm::detail::swizzle<4,T,P,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
    -00729         struct { glm::detail::swizzle<4,T,P,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
    -00730         struct { glm::detail::swizzle<4,T,P,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
    -00731         struct { glm::detail::swizzle<4,T,P,2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
    -00732         struct { glm::detail::swizzle<4,T,P,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
    -00733         struct { glm::detail::swizzle<4,T,P,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
    -00734         struct { glm::detail::swizzle<4,T,P,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
    -00735         struct { glm::detail::swizzle<4,T,P,2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
    -00736         struct { glm::detail::swizzle<4,T,P,2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
    -00737         struct { glm::detail::swizzle<4,T,P,2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
    -00738         struct { glm::detail::swizzle<4,T,P,2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
    -00739         struct { glm::detail::swizzle<4,T,P,2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
    -00740         struct { glm::detail::swizzle<4,T,P,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
    -00741         struct { glm::detail::swizzle<4,T,P,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
    -00742         struct { glm::detail::swizzle<4,T,P,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
    -00743         struct { glm::detail::swizzle<4,T,P,2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
    -00744         struct { glm::detail::swizzle<4,T,P,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
    -00745         struct { glm::detail::swizzle<4,T,P,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
    -00746         struct { glm::detail::swizzle<4,T,P,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
    -00747         struct { glm::detail::swizzle<4,T,P,2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
    -00748         struct { glm::detail::swizzle<4,T,P,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
    -00749         struct { glm::detail::swizzle<4,T,P,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
    -00750         struct { glm::detail::swizzle<4,T,P,2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
    -00751         struct { glm::detail::swizzle<4,T,P,2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
    -00752         struct { glm::detail::swizzle<4,T,P,2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
    -00753         struct { glm::detail::swizzle<4,T,P,2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
    -00754         struct { glm::detail::swizzle<4,T,P,2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
    -00755         struct { glm::detail::swizzle<4,T,P,2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
    -00756         struct { glm::detail::swizzle<4,T,P,2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
    -00757         struct { glm::detail::swizzle<4,T,P,2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
    -00758         struct { glm::detail::swizzle<4,T,P,2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
    -00759         struct { glm::detail::swizzle<4,T,P,2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
    -00760         struct { glm::detail::swizzle<4,T,P,2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
    -00761         struct { glm::detail::swizzle<4,T,P,2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
    -00762         struct { glm::detail::swizzle<4,T,P,2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
    -00763         struct { glm::detail::swizzle<4,T,P,2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
    -00764         struct { glm::detail::swizzle<4,T,P,2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
    -00765         struct { glm::detail::swizzle<4,T,P,2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
    -00766         struct { glm::detail::swizzle<4,T,P,2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
    -00767         struct { glm::detail::swizzle<4,T,P,2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
    -00768         struct { glm::detail::swizzle<4,T,P,2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
    -00769         struct { glm::detail::swizzle<4,T,P,2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
    -00770         struct { glm::detail::swizzle<4,T,P,2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
    -00771         struct { glm::detail::swizzle<4,T,P,2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
    -00772         struct { glm::detail::swizzle<4,T,P,3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
    -00773         struct { glm::detail::swizzle<4,T,P,3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
    -00774         struct { glm::detail::swizzle<4,T,P,3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
    -00775         struct { glm::detail::swizzle<4,T,P,3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
    -00776         struct { glm::detail::swizzle<4,T,P,3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
    -00777         struct { glm::detail::swizzle<4,T,P,3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
    -00778         struct { glm::detail::swizzle<4,T,P,3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
    -00779         struct { glm::detail::swizzle<4,T,P,3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
    -00780         struct { glm::detail::swizzle<4,T,P,3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
    -00781         struct { glm::detail::swizzle<4,T,P,3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
    -00782         struct { glm::detail::swizzle<4,T,P,3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
    -00783         struct { glm::detail::swizzle<4,T,P,3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
    -00784         struct { glm::detail::swizzle<4,T,P,3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
    -00785         struct { glm::detail::swizzle<4,T,P,3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
    -00786         struct { glm::detail::swizzle<4,T,P,3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
    -00787         struct { glm::detail::swizzle<4,T,P,3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
    -00788         struct { glm::detail::swizzle<4,T,P,3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
    -00789         struct { glm::detail::swizzle<4,T,P,3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
    -00790         struct { glm::detail::swizzle<4,T,P,3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
    -00791         struct { glm::detail::swizzle<4,T,P,3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
    -00792         struct { glm::detail::swizzle<4,T,P,3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
    -00793         struct { glm::detail::swizzle<4,T,P,3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
    -00794         struct { glm::detail::swizzle<4,T,P,3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
    -00795         struct { glm::detail::swizzle<4,T,P,3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
    -00796         struct { glm::detail::swizzle<4,T,P,3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
    -00797         struct { glm::detail::swizzle<4,T,P,3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
    -00798         struct { glm::detail::swizzle<4,T,P,3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
    -00799         struct { glm::detail::swizzle<4,T,P,3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
    -00800         struct { glm::detail::swizzle<4,T,P,3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
    -00801         struct { glm::detail::swizzle<4,T,P,3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
    -00802         struct { glm::detail::swizzle<4,T,P,3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
    -00803         struct { glm::detail::swizzle<4,T,P,3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
    -00804         struct { glm::detail::swizzle<4,T,P,3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
    -00805         struct { glm::detail::swizzle<4,T,P,3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
    -00806         struct { glm::detail::swizzle<4,T,P,3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
    -00807         struct { glm::detail::swizzle<4,T,P,3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
    -00808         struct { glm::detail::swizzle<4,T,P,3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
    -00809         struct { glm::detail::swizzle<4,T,P,3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
    -00810         struct { glm::detail::swizzle<4,T,P,3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
    -00811         struct { glm::detail::swizzle<4,T,P,3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
    -00812         struct { glm::detail::swizzle<4,T,P,3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
    -00813         struct { glm::detail::swizzle<4,T,P,3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
    -00814         struct { glm::detail::swizzle<4,T,P,3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
    -00815         struct { glm::detail::swizzle<4,T,P,3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
    -00816         struct { glm::detail::swizzle<4,T,P,3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
    -00817         struct { glm::detail::swizzle<4,T,P,3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
    -00818         struct { glm::detail::swizzle<4,T,P,3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
    -00819         struct { glm::detail::swizzle<4,T,P,3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
    -00820         struct { glm::detail::swizzle<4,T,P,3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
    -00821         struct { glm::detail::swizzle<4,T,P,3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
    -00822         struct { glm::detail::swizzle<4,T,P,3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
    -00823         struct { glm::detail::swizzle<4,T,P,3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
    -00824         struct { glm::detail::swizzle<4,T,P,3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
    -00825         struct { glm::detail::swizzle<4,T,P,3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
    -00826         struct { glm::detail::swizzle<4,T,P,3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
    -00827         struct { glm::detail::swizzle<4,T,P,3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
    -00828         struct { glm::detail::swizzle<4,T,P,3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
    -00829         struct { glm::detail::swizzle<4,T,P,3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
    -00830         struct { glm::detail::swizzle<4,T,P,3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
    -00831         struct { glm::detail::swizzle<4,T,P,3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
    -00832         struct { glm::detail::swizzle<4,T,P,3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
    -00833         struct { glm::detail::swizzle<4,T,P,3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
    -00834         struct { glm::detail::swizzle<4,T,P,3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
    -00835         struct { glm::detail::swizzle<4,T,P,3,3,3,3> E3 ## E3 ## E3 ## E3; }; 
    -00836 
    -00837 #endif//glm_core_swizzle
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #define VECTORIZE2_VEC(func) \
    +
    30  template <typename T> \
    +
    31  GLM_FUNC_QUALIFIER detail::tvec2<T> func( \
    +
    32  detail::tvec2<T> const & v) \
    +
    33  { \
    +
    34  return detail::tvec2<T>( \
    +
    35  func(v.x), \
    +
    36  func(v.y)); \
    +
    37  }
    +
    38 
    +
    39 #define VECTORIZE3_VEC(func) \
    +
    40  template <typename T> \
    +
    41  GLM_FUNC_QUALIFIER detail::tvec3<T> func( \
    +
    42  detail::tvec3<T> const & v) \
    +
    43  { \
    +
    44  return detail::tvec3<T>( \
    +
    45  func(v.x), \
    +
    46  func(v.y), \
    +
    47  func(v.z)); \
    +
    48  }
    +
    49 
    +
    50 #define VECTORIZE4_VEC(func) \
    +
    51  template <typename T> \
    +
    52  GLM_FUNC_QUALIFIER detail::tvec4<T> func( \
    +
    53  detail::tvec4<T> const & v) \
    +
    54  { \
    +
    55  return detail::tvec4<T>( \
    +
    56  func(v.x), \
    +
    57  func(v.y), \
    +
    58  func(v.z), \
    +
    59  func(v.w)); \
    +
    60  }
    +
    61 
    +
    62 #define VECTORIZE_VEC(func) \
    +
    63  VECTORIZE2_VEC(func) \
    +
    64  VECTORIZE3_VEC(func) \
    +
    65  VECTORIZE4_VEC(func)
    +
    66 
    +
    67 #define VECTORIZE2_VEC_SCA(func) \
    +
    68  template <typename T> \
    +
    69  GLM_FUNC_QUALIFIER detail::tvec2<T> func \
    +
    70  ( \
    +
    71  detail::tvec2<T> const & x, \
    +
    72  typename detail::tvec2<T>::value_type const & y \
    +
    73  ) \
    +
    74  { \
    +
    75  return detail::tvec2<T>( \
    +
    76  func(x.x, y), \
    +
    77  func(x.y, y)); \
    +
    78  }
    +
    79 
    +
    80 #define VECTORIZE3_VEC_SCA(func) \
    +
    81  template <typename T> \
    +
    82  GLM_FUNC_QUALIFIER detail::tvec3<T> func \
    +
    83  ( \
    +
    84  detail::tvec3<T> const & x, \
    +
    85  typename detail::tvec3<T>::value_type const & y \
    +
    86  ) \
    +
    87  { \
    +
    88  return detail::tvec3<T>( \
    +
    89  func(x.x, y), \
    +
    90  func(x.y, y), \
    +
    91  func(x.z, y)); \
    +
    92  }
    +
    93 
    +
    94 #define VECTORIZE4_VEC_SCA(func) \
    +
    95  template <typename T> \
    +
    96  GLM_FUNC_QUALIFIER detail::tvec4<T> func \
    +
    97  ( \
    +
    98  detail::tvec4<T> const & x, \
    +
    99  typename detail::tvec4<T>::value_type const & y \
    +
    100  ) \
    +
    101  { \
    +
    102  return detail::tvec4<T>( \
    +
    103  func(x.x, y), \
    +
    104  func(x.y, y), \
    +
    105  func(x.z, y), \
    +
    106  func(x.w, y)); \
    +
    107  }
    +
    108 
    +
    109 #define VECTORIZE_VEC_SCA(func) \
    +
    110  VECTORIZE2_VEC_SCA(func) \
    +
    111  VECTORIZE3_VEC_SCA(func) \
    +
    112  VECTORIZE4_VEC_SCA(func)
    +
    113 
    +
    114 #define VECTORIZE2_VEC_VEC(func) \
    +
    115  template <typename T> \
    +
    116  GLM_FUNC_QUALIFIER detail::tvec2<T> func \
    +
    117  ( \
    +
    118  detail::tvec2<T> const & x, \
    +
    119  detail::tvec2<T> const & y \
    +
    120  ) \
    +
    121  { \
    +
    122  return detail::tvec2<T>( \
    +
    123  func(x.x, y.x), \
    +
    124  func(x.y, y.y)); \
    +
    125  }
    +
    126 
    +
    127 #define VECTORIZE3_VEC_VEC(func) \
    +
    128  template <typename T> \
    +
    129  GLM_FUNC_QUALIFIER detail::tvec3<T> func \
    +
    130  ( \
    +
    131  detail::tvec3<T> const & x, \
    +
    132  detail::tvec3<T> const & y \
    +
    133  ) \
    +
    134  { \
    +
    135  return detail::tvec3<T>( \
    +
    136  func(x.x, y.x), \
    +
    137  func(x.y, y.y), \
    +
    138  func(x.z, y.z)); \
    +
    139  }
    +
    140 
    +
    141 #define VECTORIZE4_VEC_VEC(func) \
    +
    142  template <typename T> \
    +
    143  GLM_FUNC_QUALIFIER detail::tvec4<T> func \
    +
    144  ( \
    +
    145  detail::tvec4<T> const & x, \
    +
    146  detail::tvec4<T> const & y \
    +
    147  ) \
    +
    148  { \
    +
    149  return detail::tvec4<T>( \
    +
    150  func(x.x, y.x), \
    +
    151  func(x.y, y.y), \
    +
    152  func(x.z, y.z), \
    +
    153  func(x.w, y.w)); \
    +
    154  }
    +
    155 
    +
    156 #define VECTORIZE_VEC_VEC(func) \
    +
    157  VECTORIZE2_VEC_VEC(func) \
    +
    158  VECTORIZE3_VEC_VEC(func) \
    +
    159  VECTORIZE4_VEC_VEC(func)
    +
    + - diff --git a/doc/api/a00007.html b/doc/api/a00007.html index a2c522e5..ade7eec2 100644 --- a/doc/api/a00007.html +++ b/doc/api/a00007.html @@ -2,42 +2,31 @@ - -_swizzle_func.hpp File Reference + +associated_min_max.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,61 @@
  • File List
  • + +
    +
    -
    _swizzle_func.hpp File Reference
    -
    +
    associated_min_max.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2011-10-16 / 2011-10-16
    -
    Author:
    Christophe Riccio
    - -

    Definition in file _swizzle_func.hpp.

    -
    - +

    GLM_GTX_associated_min_max

    +
    Date
    2008-03-10 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTX_extented_min_max (dependence)
    +

    Definition in file associated_min_max.hpp.

    + + - diff --git a/doc/api/a00007_source.html b/doc/api/a00007_source.html index bd9d88a5..5687f3e1 100644 --- a/doc/api/a00007_source.html +++ b/doc/api/a00007_source.html @@ -2,42 +2,31 @@ - -_swizzle_func.hpp Source File + +associated_min_max.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,807 +35,113 @@
  • File List
  • + +
    -
    _swizzle_func.hpp
    -
    +
    associated_min_max.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_swizzle_func
    -00030 #define glm_core_swizzle_func
    -00031 
    -00032 #define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
    -00033         SWIZZLED_TYPE<TMPL_TYPE> A ## B() CONST \
    -00034         { \
    -00035                 return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B); \
    -00036         }
    -00037 
    -00038 #define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
    -00039         SWIZZLED_TYPE<TMPL_TYPE> A ## B ## C() CONST \
    -00040         { \
    -00041                 return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C); \
    -00042         }
    -00043 
    -00044 #define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
    -00045         SWIZZLED_TYPE<TMPL_TYPE> A ## B ## C ## D() CONST \
    -00046         { \
    -00047                 return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C, this->D); \
    -00048         }
    -00049 
    -00050 #define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
    -00051         template <typename TMPL_TYPE> \
    -00052         SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B() CONST \
    -00053         { \
    -00054                 return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B); \
    -00055         }
    -00056 
    -00057 #define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
    -00058         template <typename TMPL_TYPE> \
    -00059         SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B ## C() CONST \
    -00060         { \
    -00061                 return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C); \
    -00062         }
    -00063 
    -00064 #define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
    -00065         template <typename TMPL_TYPE> \
    -00066         SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B ## C ## D() CONST \
    -00067         { \
    -00068                 return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C, this->D); \
    -00069         }
    -00070 
    -00071 #define GLM_MUTABLE
    -00072 
    -00073 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    -00074         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    -00075         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)
    -00076 
    -00077 #define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \
    -00078         GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \
    -00079         GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \
    -00080         GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)
    -00081 
    -00082 //GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)
    -00083 
    -00084 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -00085         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    -00086         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
    -00087         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
    -00088         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
    -00089         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
    -00090         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)
    -00091 
    -00092 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -00093         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \
    -00094         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \
    -00095         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \
    -00096         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \
    -00097         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \
    -00098         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)
    -00099 
    -00100 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    -00101         GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    -00102         GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)
    -00103 
    -00104 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \
    -00105         GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \
    -00106         GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \
    -00107         GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, q)
    -00108 
    -00109 //GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)
    -00110 
    -00111 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -00112         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    -00113         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
    -00114         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \
    -00115         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
    -00116         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
    -00117         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \
    -00118         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
    -00119         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \
    -00120         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \
    -00121         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \
    -00122         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \
    -00123         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)
    -00124 
    -00125 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -00126         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \
    -00127         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \
    -00128         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \
    -00129         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \
    -00130         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \
    -00131         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \
    -00132         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \
    -00133         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \
    -00134         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \
    -00135         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \
    -00136         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \
    -00137         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \
    -00138         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \
    -00139         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \
    -00140         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \
    -00141         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \
    -00142         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \
    -00143         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \
    -00144         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \
    -00145         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \
    -00146         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \
    -00147         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \
    -00148         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \
    -00149         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)
    -00150 
    -00151 #define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -00152         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \
    -00153         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \
    -00154         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \
    -00155         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \
    -00156         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \
    -00157         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \
    -00158         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \
    -00159         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \
    -00160         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \
    -00161         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \
    -00162         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \
    -00163         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \
    -00164         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \
    -00165         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \
    -00166         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \
    -00167         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \
    -00168         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \
    -00169         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \
    -00170         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \
    -00171         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \
    -00172         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \
    -00173         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \
    -00174         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \
    -00175         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)
    -00176 
    -00177 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
    -00178         GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
    -00179         GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
    -00180         GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
    -00181 
    -00182 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    -00183         GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
    -00184         GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
    -00185         GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p)
    -00186 
    -00187 //GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)
    -00188 
    -00189 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    -00190         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    -00191         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    -00192         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    -00193         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)
    -00194 
    -00195 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    -00196         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    -00197         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    -00198         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    -00199         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    -00200         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    -00201         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    -00202         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    -00203         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)
    -00204 
    -00205 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    -00206         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    -00207         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    -00208         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    -00209         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    -00210         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    -00211         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    -00212         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    -00213         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    -00214         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    -00215         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    -00216         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    -00217         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    -00218         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    -00219         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    -00220         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    -00221         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)
    -00222 
    -00223 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \
    -00224         GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \
    -00225         GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \
    -00226         GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)
    -00227 
    -00228 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    -00229         GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \
    -00230         GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \
    -00231         GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)
    -00232 
    -00233 //GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)
    -00234 
    -00235 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -00236         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    -00237         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    -00238         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
    -00239         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    -00240         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
    -00241         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
    -00242         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
    -00243         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
    -00244         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)
    -00245 
    -00246 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -00247         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    -00248         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    -00249         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
    -00250         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    -00251         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    -00252         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
    -00253         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
    -00254         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
    -00255         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
    -00256         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    -00257         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    -00258         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
    -00259         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    -00260         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
    -00261         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
    -00262         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
    -00263         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
    -00264         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
    -00265         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
    -00266         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
    -00267         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
    -00268         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
    -00269         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
    -00270         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
    -00271         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
    -00272         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
    -00273         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)
    -00274 
    -00275 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -00276         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    -00277         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    -00278         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
    -00279         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    -00280         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    -00281         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
    -00282         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
    -00283         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
    -00284         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
    -00285         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    -00286         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    -00287         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
    -00288         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    -00289         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    -00290         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
    -00291         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
    -00292         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
    -00293         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
    -00294         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
    -00295         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
    -00296         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
    -00297         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
    -00298         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
    -00299         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
    -00300         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
    -00301         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
    -00302         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
    -00303         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
    -00304         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
    -00305         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
    -00306         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
    -00307         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
    -00308         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
    -00309         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
    -00310         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
    -00311         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
    -00312         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    -00313         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    -00314         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
    -00315         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    -00316         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    -00317         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
    -00318         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
    -00319         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
    -00320         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
    -00321         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    -00322         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    -00323         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
    -00324         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    -00325         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
    -00326         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
    -00327         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
    -00328         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
    -00329         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
    -00330         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
    -00331         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
    -00332         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
    -00333         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
    -00334         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
    -00335         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
    -00336         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
    -00337         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
    -00338         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
    -00339         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
    -00340         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
    -00341         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
    -00342         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
    -00343         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
    -00344         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
    -00345         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
    -00346         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
    -00347         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
    -00348         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
    -00349         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
    -00350         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
    -00351         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
    -00352         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
    -00353         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
    -00354         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
    -00355         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
    -00356         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
    -00357         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
    -00358         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
    -00359         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
    -00360         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
    -00361         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
    -00362         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
    -00363         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
    -00364         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
    -00365         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
    -00366         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
    -00367         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
    -00368         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
    -00369         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
    -00370         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
    -00371         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
    -00372         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
    -00373         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
    -00374         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
    -00375         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
    -00376         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
    -00377         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
    -00378         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
    -00379         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
    -00380         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
    -00381         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
    -00382         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
    -00383         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
    -00384         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
    -00385         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
    -00386         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
    -00387         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
    -00388         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
    -00389         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
    -00390         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
    -00391         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
    -00392         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
    -00393         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
    -00394         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
    -00395         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
    -00396         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
    -00397         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
    -00398         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
    -00399         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
    -00400         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
    -00401         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
    -00402         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
    -00403         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
    -00404         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
    -00405         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
    -00406         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
    -00407         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
    -00408         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
    -00409         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
    -00410         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
    -00411         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
    -00412         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
    -00413         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
    -00414         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
    -00415         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
    -00416         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
    -00417         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
    -00418         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
    -00419         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C)
    -00420 
    -00421 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \
    -00422         GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \
    -00423         GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    -00424         GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)
    -00425 
    -00426 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    -00427         GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \
    -00428         GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \
    -00429         GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q)
    -00430 
    -00431 //GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)
    -00432 
    -00433 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -00434         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    -00435         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    -00436         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
    -00437         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \
    -00438         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    -00439         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
    -00440         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
    -00441         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \
    -00442         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
    -00443         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
    -00444         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \
    -00445         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \
    -00446         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \
    -00447         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \
    -00448         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \
    -00449         GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)
    -00450 
    -00451 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -00452         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    -00453         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    -00454         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
    -00455         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \
    -00456         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    -00457         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    -00458         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
    -00459         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \
    -00460         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
    -00461         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
    -00462         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
    -00463         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \
    -00464         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \
    -00465         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \
    -00466         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \
    -00467         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \
    -00468         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    -00469         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    -00470         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
    -00471         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \
    -00472         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    -00473         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
    -00474         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
    -00475         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \
    -00476         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
    -00477         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
    -00478         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
    -00479         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \
    -00480         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \
    -00481         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \
    -00482         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \
    -00483         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \
    -00484         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
    -00485         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
    -00486         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
    -00487         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \
    -00488         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
    -00489         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
    -00490         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
    -00491         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \
    -00492         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
    -00493         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
    -00494         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \
    -00495         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \
    -00496         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \
    -00497         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \
    -00498         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \
    -00499         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \
    -00500         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \
    -00501         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \
    -00502         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \
    -00503         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \
    -00504         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \
    -00505         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \
    -00506         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \
    -00507         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \
    -00508         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \
    -00509         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \
    -00510         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \
    -00511         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \
    -00512         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \
    -00513         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \
    -00514         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \
    -00515         GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)
    -00516 
    -00517 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -00518         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    -00519         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    -00520         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
    -00521         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \
    -00522         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    -00523         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    -00524         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
    -00525         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \
    -00526         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
    -00527         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
    -00528         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
    -00529         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \
    -00530         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \
    -00531         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \
    -00532         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \
    -00533         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \
    -00534         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    -00535         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    -00536         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
    -00537         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \
    -00538         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    -00539         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    -00540         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
    -00541         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \
    -00542         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
    -00543         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
    -00544         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
    -00545         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \
    -00546         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \
    -00547         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \
    -00548         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \
    -00549         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \
    -00550         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
    -00551         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
    -00552         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
    -00553         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \
    -00554         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
    -00555         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
    -00556         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
    -00557         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \
    -00558         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
    -00559         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
    -00560         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
    -00561         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \
    -00562         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \
    -00563         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \
    -00564         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \
    -00565         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \
    -00566         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
    -00567         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
    -00568         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
    -00569         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \
    -00570         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
    -00571         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
    -00572         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
    -00573         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \
    -00574         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
    -00575         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
    -00576         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
    -00577         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \
    -00578         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \
    -00579         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \
    -00580         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \
    -00581         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \
    -00582         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    -00583         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    -00584         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
    -00585         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \
    -00586         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    -00587         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    -00588         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
    -00589         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \
    -00590         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
    -00591         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
    -00592         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
    -00593         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \
    -00594         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \
    -00595         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \
    -00596         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \
    -00597         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \
    -00598         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    -00599         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    -00600         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
    -00601         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \
    -00602         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    -00603         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
    -00604         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
    -00605         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \
    -00606         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
    -00607         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
    -00608         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
    -00609         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \
    -00610         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \
    -00611         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \
    -00612         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \
    -00613         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \
    -00614         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
    -00615         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
    -00616         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
    -00617         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \
    -00618         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
    -00619         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
    -00620         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
    -00621         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \
    -00622         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
    -00623         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
    -00624         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
    -00625         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \
    -00626         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \
    -00627         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \
    -00628         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \
    -00629         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \
    -00630         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
    -00631         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
    -00632         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
    -00633         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \
    -00634         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
    -00635         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
    -00636         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
    -00637         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \
    -00638         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
    -00639         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
    -00640         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
    -00641         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \
    -00642         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \
    -00643         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \
    -00644         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \
    -00645         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \
    -00646         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
    -00647         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
    -00648         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
    -00649         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \
    -00650         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
    -00651         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
    -00652         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
    -00653         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \
    -00654         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
    -00655         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
    -00656         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
    -00657         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \
    -00658         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \
    -00659         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \
    -00660         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \
    -00661         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \
    -00662         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
    -00663         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
    -00664         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
    -00665         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \
    -00666         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
    -00667         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
    -00668         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
    -00669         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \
    -00670         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
    -00671         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
    -00672         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
    -00673         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \
    -00674         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \
    -00675         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \
    -00676         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \
    -00677         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \
    -00678         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
    -00679         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
    -00680         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
    -00681         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \
    -00682         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
    -00683         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
    -00684         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
    -00685         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \
    -00686         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
    -00687         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
    -00688         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
    -00689         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \
    -00690         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \
    -00691         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \
    -00692         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \
    -00693         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \
    -00694         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
    -00695         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
    -00696         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
    -00697         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \
    -00698         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
    -00699         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
    -00700         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
    -00701         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \
    -00702         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
    -00703         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
    -00704         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
    -00705         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \
    -00706         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \
    -00707         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \
    -00708         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \
    -00709         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \
    -00710         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
    -00711         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
    -00712         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
    -00713         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \
    -00714         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
    -00715         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
    -00716         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
    -00717         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \
    -00718         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
    -00719         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
    -00720         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
    -00721         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \
    -00722         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \
    -00723         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \
    -00724         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \
    -00725         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \
    -00726         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
    -00727         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
    -00728         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
    -00729         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \
    -00730         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
    -00731         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
    -00732         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
    -00733         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \
    -00734         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
    -00735         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
    -00736         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
    -00737         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \
    -00738         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \
    -00739         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \
    -00740         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \
    -00741         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \
    -00742         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
    -00743         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
    -00744         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
    -00745         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \
    -00746         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
    -00747         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
    -00748         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
    -00749         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \
    -00750         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
    -00751         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
    -00752         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
    -00753         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \
    -00754         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \
    -00755         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \
    -00756         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \
    -00757         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \
    -00758         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
    -00759         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
    -00760         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
    -00761         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \
    -00762         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
    -00763         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
    -00764         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
    -00765         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \
    -00766         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
    -00767         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
    -00768         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \
    -00769         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \
    -00770         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \
    -00771         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \
    -00772         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \
    -00773         GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)
    -00774 
    -00775 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
    -00776         GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
    -00777         GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
    -00778         GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
    -00779 
    -00780 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    -00781         GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
    -00782         GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
    -00783         GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p)
    -00784 
    -00785 //GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)
    -00786 
    -00787 #endif//glm_core_swizzle_func
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_associated_min_max
    +
    39 #define GLM_GTX_associated_min_max GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_associated_min_max extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template<typename genTypeT, typename genTypeU>
    +
    56  genTypeU associatedMin(
    +
    57  const genTypeT& x, const genTypeU& a,
    +
    58  const genTypeT& y, const genTypeU& b);
    +
    59 
    +
    62  template<typename genTypeT, typename genTypeU>
    +
    63  genTypeU associatedMin(
    +
    64  const genTypeT& x, const genTypeU& a,
    +
    65  const genTypeT& y, const genTypeU& b,
    +
    66  const genTypeT& z, const genTypeU& c);
    +
    67 
    +
    70  template<typename genTypeT, typename genTypeU>
    +
    71  genTypeU associatedMin(
    +
    72  const genTypeT& x, const genTypeU& a,
    +
    73  const genTypeT& y, const genTypeU& b,
    +
    74  const genTypeT& z, const genTypeU& c,
    +
    75  const genTypeT& w, const genTypeU& d);
    +
    76 
    +
    79  template<typename genTypeT, typename genTypeU>
    +
    80  genTypeU associatedMax(
    +
    81  const genTypeT& x, const genTypeU& a,
    +
    82  const genTypeT& y, const genTypeU& b);
    +
    83 
    +
    86  template<typename genTypeT, typename genTypeU>
    +
    87  genTypeU associatedMax(
    +
    88  const genTypeT& x, const genTypeU& a,
    +
    89  const genTypeT& y, const genTypeU& b,
    +
    90  const genTypeT& z, const genTypeU& c);
    +
    91 
    +
    94  template<typename genTypeT, typename genTypeU>
    +
    95  genTypeU associatedMax(
    +
    96  const genTypeT& x, const genTypeU& a,
    +
    97  const genTypeT& y, const genTypeU& b,
    +
    98  const genTypeT& z, const genTypeU& c,
    +
    99  const genTypeT& w, const genTypeU& d);
    +
    100 
    +
    102 } //namespace glm
    +
    103 
    +
    104 #include "associated_min_max.inl"
    +
    105 
    +
    106 #endif//GLM_GTX_associated_min_max
    +
    + - diff --git a/doc/api/a00008.html b/doc/api/a00008.html index c9f44ad8..5e78b107 100644 --- a/doc/api/a00008.html +++ b/doc/api/a00008.html @@ -2,42 +2,31 @@ - -_vectorize.hpp File Reference + +bit.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,92 @@
  • File List
  • + +
    +
    -
    _vectorize.hpp File Reference
    -
    +
    bit.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_DEPRECATED genType bitRevert (genType const &value)
     
    template<typename genType >
    genType bitRotateLeft (genType const &In, std::size_t Shift)
     
    template<typename genType >
    genType bitRotateRight (genType const &In, std::size_t Shift)
     
    template<typename genIUType , typename sizeType >
    GLM_DEPRECATED genIUType extractField (genIUType const &v, sizeType const &first, sizeType const &count)
     
    template<typename genIUType >
    genIUType fillBitfieldWithOne (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genIUType >
    genIUType fillBitfieldWithZero (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genType >
    GLM_DEPRECATED int highestBit (genType const &value)
     
    template<typename genType >
    genType highestBitValue (genType const &value)
     
    template<typename genType >
    bool isPowerOfTwo (genType const &value)
     
    template<typename genType >
    GLM_DEPRECATED int lowestBit (genType const &value)
     
    template<typename genIType >
    genIType mask (genIType const &count)
     
    template<typename genType >
    genType powerOfTwoAbove (genType const &value)
     
    template<typename genType >
    genType powerOfTwoBelow (genType const &value)
     
    template<typename genType >
    genType powerOfTwoNearest (genType const &value)
     
    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2011-10-14 / 2011-10-14
    -
    Author:
    Christophe Riccio
    - -

    Definition in file _vectorize.hpp.

    -
    - +

    GLM_GTX_bit

    +
    Date
    2007-03-14 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTC_half_float (dependence)
    +

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_bit

    +
    Date
    2005-12-30 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file bit.hpp.

    + + - diff --git a/doc/api/a00008_source.html b/doc/api/a00008_source.html index 79d873ed..c230eded 100644 --- a/doc/api/a00008_source.html +++ b/doc/api/a00008_source.html @@ -2,42 +2,31 @@ - -_vectorize.hpp Source File + +bit.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,179 +35,130 @@
  • File List
  • + +
    -
    _vectorize.hpp
    -
    +
    bit.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #define VECTORIZE2_VEC(func) \
    -00030     template <typename T> \
    -00031     GLM_FUNC_QUALIFIER detail::tvec2<T> func( \
    -00032                 detail::tvec2<T> const & v) \
    -00033     { \
    -00034         return detail::tvec2<T>( \
    -00035             func(v.x), \
    -00036             func(v.y)); \
    -00037     }
    -00038 
    -00039 #define VECTORIZE3_VEC(func) \
    -00040     template <typename T> \
    -00041     GLM_FUNC_QUALIFIER detail::tvec3<T> func( \
    -00042                 detail::tvec3<T> const & v) \
    -00043     { \
    -00044         return detail::tvec3<T>( \
    -00045             func(v.x), \
    -00046             func(v.y), \
    -00047             func(v.z)); \
    -00048     }
    -00049 
    -00050 #define VECTORIZE4_VEC(func) \
    -00051     template <typename T> \
    -00052     GLM_FUNC_QUALIFIER detail::tvec4<T> func( \
    -00053                 detail::tvec4<T> const & v) \
    -00054     { \
    -00055         return detail::tvec4<T>( \
    -00056             func(v.x), \
    -00057             func(v.y), \
    -00058             func(v.z), \
    -00059             func(v.w)); \
    -00060     }
    -00061 
    -00062 #define VECTORIZE_VEC(func) \
    -00063         VECTORIZE2_VEC(func) \
    -00064         VECTORIZE3_VEC(func) \
    -00065         VECTORIZE4_VEC(func)
    -00066 
    -00067 #define VECTORIZE2_VEC_SCA(func) \
    -00068     template <typename T> \
    -00069     GLM_FUNC_QUALIFIER detail::tvec2<T> func \
    -00070         ( \
    -00071                 detail::tvec2<T> const & x,  \
    -00072                 typename detail::tvec2<T>::value_type const & y \
    -00073         ) \
    -00074     { \
    -00075         return detail::tvec2<T>( \
    -00076             func(x.x, y), \
    -00077             func(x.y, y)); \
    -00078     }
    -00079 
    -00080 #define VECTORIZE3_VEC_SCA(func) \
    -00081     template <typename T> \
    -00082     GLM_FUNC_QUALIFIER detail::tvec3<T> func \
    -00083         ( \
    -00084                 detail::tvec3<T> const & x,  \
    -00085                 typename detail::tvec3<T>::value_type const & y \
    -00086         ) \
    -00087     { \
    -00088         return detail::tvec3<T>( \
    -00089             func(x.x, y), \
    -00090             func(x.y, y), \
    -00091             func(x.z, y)); \
    -00092     }
    -00093 
    -00094 #define VECTORIZE4_VEC_SCA(func) \
    -00095     template <typename T> \
    -00096     GLM_FUNC_QUALIFIER detail::tvec4<T> func \
    -00097         ( \
    -00098                 detail::tvec4<T> const & x,  \
    -00099                 typename detail::tvec4<T>::value_type const & y \
    -00100         ) \
    -00101     { \
    -00102         return detail::tvec4<T>( \
    -00103             func(x.x, y), \
    -00104             func(x.y, y), \
    -00105             func(x.z, y), \
    -00106             func(x.w, y)); \
    -00107     }
    -00108 
    -00109 #define VECTORIZE_VEC_SCA(func) \
    -00110         VECTORIZE2_VEC_SCA(func) \
    -00111         VECTORIZE3_VEC_SCA(func) \
    -00112         VECTORIZE4_VEC_SCA(func)
    -00113 
    -00114 #define VECTORIZE2_VEC_VEC(func) \
    -00115     template <typename T> \
    -00116     GLM_FUNC_QUALIFIER detail::tvec2<T> func \
    -00117         ( \
    -00118                 detail::tvec2<T> const & x,  \
    -00119                 detail::tvec2<T> const & y \
    -00120         ) \
    -00121     { \
    -00122         return detail::tvec2<T>( \
    -00123             func(x.x, y.x), \
    -00124             func(x.y, y.y)); \
    -00125     }
    -00126 
    -00127 #define VECTORIZE3_VEC_VEC(func) \
    -00128     template <typename T> \
    -00129     GLM_FUNC_QUALIFIER detail::tvec3<T> func \
    -00130         ( \
    -00131                 detail::tvec3<T> const & x,  \
    -00132                 detail::tvec3<T> const & y \
    -00133         ) \
    -00134     { \
    -00135         return detail::tvec3<T>( \
    -00136             func(x.x, y.x), \
    -00137             func(x.y, y.y), \
    -00138             func(x.z, y.z)); \
    -00139     }
    -00140 
    -00141 #define VECTORIZE4_VEC_VEC(func) \
    -00142     template <typename T> \
    -00143     GLM_FUNC_QUALIFIER detail::tvec4<T> func \
    -00144         ( \
    -00145                 detail::tvec4<T> const & x,  \
    -00146                 detail::tvec4<T> const & y \
    -00147         ) \
    -00148     { \
    -00149         return detail::tvec4<T>( \
    -00150             func(x.x, y.x), \
    -00151             func(x.y, y.y), \
    -00152             func(x.z, y.z), \
    -00153             func(x.w, y.w)); \
    -00154     }
    -00155 
    -00156 #define VECTORIZE_VEC_VEC(func) \
    -00157         VECTORIZE2_VEC_VEC(func) \
    -00158         VECTORIZE3_VEC_VEC(func) \
    -00159         VECTORIZE4_VEC_VEC(func)
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_bit
    +
    40 #define GLM_GTX_bit GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/half_float.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_bit extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename genIType>
    +
    58  genIType mask(genIType const & count);
    +
    59 
    +
    63  template <typename genIUType, typename sizeType>
    +
    64  GLM_DEPRECATED genIUType extractField(
    +
    65  genIUType const & v,
    +
    66  sizeType const & first,
    +
    67  sizeType const & count);
    +
    68 
    +
    71  template <typename genType>
    +
    72  GLM_DEPRECATED int lowestBit(genType const & value);
    +
    73 
    +
    76  template <typename genType>
    +
    77  GLM_DEPRECATED int highestBit(genType const & value);
    +
    78 
    +
    81  template <typename genType>
    +
    82  genType highestBitValue(genType const & value);
    +
    83 
    +
    86  template <typename genType>
    +
    87  bool isPowerOfTwo(genType const & value);
    +
    88 
    +
    91  template <typename genType>
    +
    92  genType powerOfTwoAbove(genType const & value);
    +
    93 
    +
    96  template <typename genType>
    +
    97  genType powerOfTwoBelow(genType const & value);
    +
    98 
    +
    101  template <typename genType>
    +
    102  genType powerOfTwoNearest(genType const & value);
    +
    103 
    +
    106  template <typename genType>
    +
    107  GLM_DEPRECATED genType bitRevert(genType const & value);
    +
    108 
    +
    111  template <typename genType>
    +
    112  genType bitRotateRight(genType const & In, std::size_t Shift);
    +
    113 
    +
    116  template <typename genType>
    +
    117  genType bitRotateLeft(genType const & In, std::size_t Shift);
    +
    118 
    +
    121  template <typename genIUType>
    +
    122  genIUType fillBitfieldWithOne(
    +
    123  genIUType const & Value,
    +
    124  int const & FromBit,
    +
    125  int const & ToBit);
    +
    126 
    +
    129  template <typename genIUType>
    +
    130  genIUType fillBitfieldWithZero(
    +
    131  genIUType const & Value,
    +
    132  int const & FromBit,
    +
    133  int const & ToBit);
    +
    134 
    +
    136 } //namespace glm
    +
    137 
    +
    138 #include "bit.inl"
    +
    139 
    +
    140 #endif//GLM_GTX_bit
    +
    + - diff --git a/doc/api/a00009.html b/doc/api/a00009.html deleted file mode 100644 index 9e6aab82..00000000 --- a/doc/api/a00009.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - -associated_min_max.hpp File Reference - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -
    -
    associated_min_max.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - -

    -Functions

    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_associated_min_max: Associated Min/Max

    -
    Date:
    2008-03-10 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    - -

    Definition in file associated_min_max.hpp.

    -
    - - - - - - diff --git a/doc/api/a00009_source.html b/doc/api/a00009_source.html index 4e831d99..9730d7ec 100644 --- a/doc/api/a00009_source.html +++ b/doc/api/a00009_source.html @@ -2,42 +2,31 @@ - -associated_min_max.hpp Source File + +closest_point.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,111 +35,83 @@
  • File List
  • + +
    -
    associated_min_max.hpp
    -
    +
    closest_point.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_associated_min_max
    -00039 #define GLM_GTX_associated_min_max GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_associated_min_max extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template<typename genTypeT, typename genTypeU>
    -00056         genTypeU associatedMin(
    -00057                 const genTypeT& x, const genTypeU& a, 
    -00058                 const genTypeT& y, const genTypeU& b);
    -00059 
    -00062         template<typename genTypeT, typename genTypeU>
    -00063         genTypeU associatedMin(
    -00064                 const genTypeT& x, const genTypeU& a, 
    -00065                 const genTypeT& y, const genTypeU& b, 
    -00066                 const genTypeT& z, const genTypeU& c);
    -00067 
    -00070         template<typename genTypeT, typename genTypeU>
    -00071         genTypeU associatedMin(
    -00072                 const genTypeT& x, const genTypeU& a, 
    -00073                 const genTypeT& y, const genTypeU& b, 
    -00074                 const genTypeT& z, const genTypeU& c, 
    -00075                 const genTypeT& w, const genTypeU& d);
    -00076 
    -00079         template<typename genTypeT, typename genTypeU>
    -00080         genTypeU associatedMax(
    -00081                 const genTypeT& x, const genTypeU& a, 
    -00082                 const genTypeT& y, const genTypeU& b);
    -00083 
    -00086         template<typename genTypeT, typename genTypeU>
    -00087         genTypeU associatedMax(
    -00088                 const genTypeT& x, const genTypeU& a, 
    -00089                 const genTypeT& y, const genTypeU& b, 
    -00090                 const genTypeT& z, const genTypeU& c);
    -00091 
    -00094         template<typename genTypeT, typename genTypeU>
    -00095         genTypeU associatedMax(
    -00096                 const genTypeT& x, const genTypeU& a, 
    -00097                 const genTypeT& y, const genTypeU& b, 
    -00098                 const genTypeT& z, const genTypeU& c, 
    -00099                 const genTypeT& w, const genTypeU& d);
    -00100 
    -00102 } //namespace glm
    -00103 
    -00104 #include "associated_min_max.inl"
    -00105 
    -00106 #endif//GLM_GTX_associated_min_max
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_closest_point
    +
    39 #define GLM_GTX_closest_point GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_closest_point extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T>
    +
    56  detail::tvec3<T> closestPointOnLine(
    +
    57  detail::tvec3<T> const & point,
    +
    58  detail::tvec3<T> const & a,
    +
    59  detail::tvec3<T> const & b);
    +
    60 
    +
    62 }// namespace glm
    +
    63 
    +
    64 #include "closest_point.inl"
    +
    65 
    +
    66 #endif//GLM_GTX_closest_point
    +
    + - diff --git a/doc/api/a00010.html b/doc/api/a00010.html index 8d5dc1c6..4046cd0a 100644 --- a/doc/api/a00010.html +++ b/doc/api/a00010.html @@ -2,42 +2,31 @@ - -bit.hpp File Reference + +color_cast.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,76 +35,221 @@
  • File List
  • + +
    -
    bit.hpp File Reference
    -
    +
    color_cast.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType bitRevert (genType const &value)
    template<typename genType >
    genType bitRotateLeft (genType const &In, std::size_t Shift)
    template<typename genType >
    genType bitRotateRight (genType const &In, std::size_t Shift)
    template<typename genIUType , typename sizeType >
    genIUType extractField (genIUType const &v, sizeType const &first, sizeType const &count)
    template<typename genIUType >
    genIUType fillBitfieldWithOne (genIUType const &Value, int const &FromBit, int const &ToBit)
    template<typename genIUType >
    genIUType fillBitfieldWithZero (genIUType const &Value, int const &FromBit, int const &ToBit)
    template<typename genType >
    int highestBit (genType const &value)
    template<typename genType >
    genType highestBitValue (genType const &value)
    template<typename genType >
    bool isPowerOfTwo (genType const &value)
    template<typename genType >
    int lowestBit (genType const &value)
    template<typename genIType >
    genIType mask (genIType const &count)
    template<typename genType >
    genType powerOfTwoAbove (genType const &value)
    template<typename genType >
    genType powerOfTwoBelow (genType const &value)
    template<typename genType >
    genType powerOfTwoNearest (genType const &value)
    +template<typename T >
    f16vec4 f16_abgr_cast (T c)
     
    +template<typename T >
    f16vec4 f16_argb_cast (T c)
     
    +template<typename T >
    f16vec4 f16_bgra_cast (T c)
     
    +template<typename T >
    f16vec3 f16_bgrx_cast (T c)
     
    +template<typename T >
    f16 f16_channel_cast (T a)
     
    +template<typename T >
    f16vec4 f16_rgba_cast (T c)
     
    +template<typename T >
    f16vec3 f16_rgbx_cast (T c)
     
    +template<typename T >
    f16vec3 f16_xbgr_cast (T c)
     
    +template<typename T >
    f16vec3 f16_xrgb_cast (T c)
     
    +template<typename T >
    f32vec4 f32_abgr_cast (T c)
     
    +template<typename T >
    f32vec4 f32_argb_cast (T c)
     
    +template<typename T >
    f32vec4 f32_bgra_cast (T c)
     
    +template<typename T >
    f32vec3 f32_bgrx_cast (T c)
     
    +template<typename T >
    f32 f32_channel_cast (T a)
     
    +template<typename T >
    f32vec4 f32_rgba_cast (T c)
     
    +template<typename T >
    f32vec3 f32_rgbx_cast (T c)
     
    +template<typename T >
    f32vec3 f32_xbgr_cast (T c)
     
    +template<typename T >
    f32vec3 f32_xrgb_cast (T c)
     
    +template<typename T >
    f64vec4 f64_abgr_cast (T c)
     
    +template<typename T >
    f64vec4 f64_argb_cast (T c)
     
    +template<typename T >
    f64vec4 f64_bgra_cast (T c)
     
    +template<typename T >
    f64vec3 f64_bgrx_cast (T c)
     
    +template<typename T >
    f64 f64_channel_cast (T a)
     
    +template<typename T >
    f64vec4 f64_rgba_cast (T c)
     
    +template<typename T >
    f64vec3 f64_rgbx_cast (T c)
     
    +template<typename T >
    f64vec3 f64_xbgr_cast (T c)
     
    +template<typename T >
    f64vec3 f64_xrgb_cast (T c)
     
    template<typename valType >
    uint16 u16channel_cast (valType a)
     
    +template<typename T >
    uint32 u32_abgr_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint32 u32_argb_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint32 u32_bgra_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint32 u32_bgrx_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint32 u32_rgba_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint32 u32_rgbx_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint32 u32_xbgr_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint32 u32_xrgb_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint64 u64_abgr_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint64 u64_argb_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint64 u64_bgra_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint64 u64_bgrx_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint64 u64_rgba_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint64 u64_rgbx_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint64 u64_xbgr_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint64 u64_xrgb_cast (const detail::tvec3< T > &c)
     
    template<typename valType >
    uint8 u8channel_cast (valType a)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_bit: Extended bitwise operations

    -
    Date:
    2007-03-14 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_color_cast

    +
    Date
    2007-06-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_bit: Extended bitwise operations

    -
    Date:
    2005-12-30 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file bit.hpp.

    -
    - +GLM_GTX_number_precision (dependence) +

    Definition in file color_cast.hpp.

    + + - diff --git a/doc/api/a00010_source.html b/doc/api/a00010_source.html index 36cdbfe3..54432a06 100644 --- a/doc/api/a00010_source.html +++ b/doc/api/a00010_source.html @@ -2,42 +2,31 @@ - -bit.hpp Source File + +color_cast.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,128 +35,139 @@
  • File List
  • + +
    -
    bit.hpp
    -
    +
    color_cast.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_bit
    -00040 #define GLM_GTX_bit GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtc/half_float.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_bit extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename genIType>
    -00058         genIType mask(genIType const & count);
    -00059 
    -00063         template <typename genIUType, typename sizeType>
    -00064         genIUType extractField(
    -00065                 genIUType const & v, 
    -00066                 sizeType const & first, 
    -00067                 sizeType const & count);
    -00068 
    -00071         template <typename genType> 
    -00072         int lowestBit(genType const & value);
    -00073 
    -00076         template <typename genType> 
    -00077         int highestBit(genType const & value);
    -00078 
    -00081         template <typename genType> 
    -00082         genType highestBitValue(genType const & value);
    -00083 
    -00086         template <typename genType> 
    -00087         bool isPowerOfTwo(genType const & value);
    -00088 
    -00091         template <typename genType> 
    -00092         genType powerOfTwoAbove(genType const & value);
    -00093 
    -00096         template <typename genType> 
    -00097         genType powerOfTwoBelow(genType const & value);
    -00098 
    -00101         template <typename genType> 
    -00102         genType powerOfTwoNearest(genType const & value);
    -00103 
    -00106         template <typename genType> 
    -00107         genType bitRevert(genType const & value);
    -00108 
    -00111         template <typename genType>
    -00112         genType bitRotateRight(genType const & In, std::size_t Shift);
    -00113 
    -00116         template <typename genType>
    -00117         genType bitRotateLeft(genType const & In, std::size_t Shift);
    -00118 
    -00121         template <typename genIUType>
    -00122         genIUType fillBitfieldWithOne(
    -00123                 genIUType const & Value,
    -00124                 int const & FromBit, 
    -00125                 int const & ToBit);
    -00126 
    -00129         template <typename genIUType>
    -00130         genIUType fillBitfieldWithZero(
    -00131                 genIUType const & Value,
    -00132                 int const & FromBit, 
    -00133                 int const & ToBit);
    -00134 
    -00136 } //namespace glm
    -00137 
    -00138 #include "bit.inl"
    -00139 
    -00140 #endif//GLM_GTX_bit
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_color_cast
    +
    40 #define GLM_GTX_color_cast GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/number_precision.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_color_cast extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename valType> uint8 u8channel_cast(valType a);
    +
    58 
    +
    61  template <typename valType> uint16 u16channel_cast(valType a);
    +
    62 
    +
    63  template <typename T> uint32 u32_rgbx_cast(const detail::tvec3<T>& c);
    +
    64  template <typename T> uint32 u32_xrgb_cast(const detail::tvec3<T>& c);
    +
    65  template <typename T> uint32 u32_bgrx_cast(const detail::tvec3<T>& c);
    +
    66  template <typename T> uint32 u32_xbgr_cast(const detail::tvec3<T>& c);
    +
    67 
    +
    68  template <typename T> uint32 u32_rgba_cast(const detail::tvec4<T>& c);
    +
    69  template <typename T> uint32 u32_argb_cast(const detail::tvec4<T>& c);
    +
    70  template <typename T> uint32 u32_bgra_cast(const detail::tvec4<T>& c);
    +
    71  template <typename T> uint32 u32_abgr_cast(const detail::tvec4<T>& c);
    +
    72 
    +
    73  template <typename T> uint64 u64_rgbx_cast(const detail::tvec3<T>& c);
    +
    74  template <typename T> uint64 u64_xrgb_cast(const detail::tvec3<T>& c);
    +
    75  template <typename T> uint64 u64_bgrx_cast(const detail::tvec3<T>& c);
    +
    76  template <typename T> uint64 u64_xbgr_cast(const detail::tvec3<T>& c);
    +
    77 
    +
    78  template <typename T> uint64 u64_rgba_cast(const detail::tvec4<T>& c);
    +
    79  template <typename T> uint64 u64_argb_cast(const detail::tvec4<T>& c);
    +
    80  template <typename T> uint64 u64_bgra_cast(const detail::tvec4<T>& c);
    +
    81  template <typename T> uint64 u64_abgr_cast(const detail::tvec4<T>& c);
    +
    82 
    +
    83  template <typename T> f16 f16_channel_cast(T a);
    +
    84 
    +
    85  template <typename T> f16vec3 f16_rgbx_cast(T c);
    +
    86  template <typename T> f16vec3 f16_xrgb_cast(T c);
    +
    87  template <typename T> f16vec3 f16_bgrx_cast(T c);
    +
    88  template <typename T> f16vec3 f16_xbgr_cast(T c);
    +
    89 
    +
    90  template <typename T> f16vec4 f16_rgba_cast(T c);
    +
    91  template <typename T> f16vec4 f16_argb_cast(T c);
    +
    92  template <typename T> f16vec4 f16_bgra_cast(T c);
    +
    93  template <typename T> f16vec4 f16_abgr_cast(T c);
    +
    94 
    +
    95  template <typename T> f32 f32_channel_cast(T a);
    +
    96 
    +
    97  template <typename T> f32vec3 f32_rgbx_cast(T c);
    +
    98  template <typename T> f32vec3 f32_xrgb_cast(T c);
    +
    99  template <typename T> f32vec3 f32_bgrx_cast(T c);
    +
    100  template <typename T> f32vec3 f32_xbgr_cast(T c);
    +
    101 
    +
    102  template <typename T> f32vec4 f32_rgba_cast(T c);
    +
    103  template <typename T> f32vec4 f32_argb_cast(T c);
    +
    104  template <typename T> f32vec4 f32_bgra_cast(T c);
    +
    105  template <typename T> f32vec4 f32_abgr_cast(T c);
    +
    106 
    +
    107  template <typename T> f64 f64_channel_cast(T a);
    +
    108 
    +
    109  template <typename T> f64vec3 f64_rgbx_cast(T c);
    +
    110  template <typename T> f64vec3 f64_xrgb_cast(T c);
    +
    111  template <typename T> f64vec3 f64_bgrx_cast(T c);
    +
    112  template <typename T> f64vec3 f64_xbgr_cast(T c);
    +
    113 
    +
    114  template <typename T> f64vec4 f64_rgba_cast(T c);
    +
    115  template <typename T> f64vec4 f64_argb_cast(T c);
    +
    116  template <typename T> f64vec4 f64_bgra_cast(T c);
    +
    117  template <typename T> f64vec4 f64_abgr_cast(T c);
    +
    118 
    +
    120 }//namespace glm
    +
    121 
    +
    122 #include "color_cast.inl"
    +
    123 
    +
    124 #endif//GLM_GTX_color_cast
    +
    + - diff --git a/doc/api/a00011.html b/doc/api/a00011.html new file mode 100644 index 00000000..9840209a --- /dev/null +++ b/doc/api/a00011.html @@ -0,0 +1,93 @@ + + + + + +color_space.hpp File Reference + + + + + + +
    +
    + + + + + + +
    +
    + + + + + +
    +
    + +
    +
    color_space.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename valType >
    detail::tvec3< valType > hsvColor (detail::tvec3< valType > const &rgbValue)
     
    template<typename valType >
    valType luminosity (detail::tvec3< valType > const &color)
     
    template<typename valType >
    detail::tvec3< valType > rgbColor (detail::tvec3< valType > const &hsvValue)
     
    template<typename valType >
    detail::tmat4x4< valType > saturation (valType const s)
     
    template<typename valType >
    detail::tvec3< valType > saturation (valType const s, detail::tvec3< valType > const &color)
     
    template<typename valType >
    detail::tvec4< valType > saturation (valType const s, detail::tvec4< valType > const &color)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_color_space

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    + +

    Definition in file color_space.hpp.

    +
    + + + + diff --git a/doc/api/a00011_source.html b/doc/api/a00011_source.html index 9c70aaff..8806fdcf 100644 --- a/doc/api/a00011_source.html +++ b/doc/api/a00011_source.html @@ -2,42 +2,31 @@ - -closest_point.hpp Source File + +color_space.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,81 +35,103 @@
  • File List
  • + +
    -
    closest_point.hpp
    -
    +
    color_space.hpp
    +
    -
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_closest_point
    -00039 #define GLM_GTX_closest_point GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_closest_point extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename T> 
    -00056         detail::tvec3<T> closestPointOnLine(
    -00057                 detail::tvec3<T> const & point, 
    -00058                 detail::tvec3<T> const & a, 
    -00059                 detail::tvec3<T> const & b);
    -00060 
    -00062 }// namespace glm
    -00063 
    -00064 #include "closest_point.inl"
    -00065 
    -00066 #endif//GLM_GTX_closest_point
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_color_space
    +
    39 #define GLM_GTX_color_space GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_color_space extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename valType>
    +
    56  detail::tvec3<valType> rgbColor(
    +
    57  detail::tvec3<valType> const & hsvValue);
    +
    58 
    +
    61  template <typename valType>
    +
    62  detail::tvec3<valType> hsvColor(
    +
    63  detail::tvec3<valType> const & rgbValue);
    +
    64 
    +
    67  template <typename valType>
    +
    68  detail::tmat4x4<valType> saturation(
    +
    69  valType const s);
    +
    70 
    +
    73  template <typename valType>
    +
    74  detail::tvec3<valType> saturation(
    +
    75  valType const s,
    +
    76  detail::tvec3<valType> const & color);
    +
    77 
    +
    80  template <typename valType>
    +
    81  detail::tvec4<valType> saturation(
    +
    82  valType const s,
    +
    83  detail::tvec4<valType> const & color);
    +
    84 
    +
    87  template <typename valType>
    +
    88  valType luminosity(
    +
    89  detail::tvec3<valType> const & color);
    +
    90 
    +
    92 }//namespace glm
    +
    93 
    +
    94 #include "color_space.inl"
    +
    95 
    +
    96 #endif//GLM_GTX_color_space
    +
    + - diff --git a/doc/api/a00012.html b/doc/api/a00012.html index f533df9b..1e74c20f 100644 --- a/doc/api/a00012.html +++ b/doc/api/a00012.html @@ -2,42 +2,31 @@ - -color_cast.hpp File Reference + +color_space_YCoCg.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,174 +35,53 @@
  • File List
  • + +
    -
    color_cast.hpp File Reference
    -
    +
    color_space_YCoCg.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    +

    Functions

    -template<typename T >
    f16vec4 f16_abgr_cast (T c)
    -template<typename T >
    f16vec4 f16_argb_cast (T c)
    -template<typename T >
    f16vec4 f16_bgra_cast (T c)
    -template<typename T >
    f16vec3 f16_bgrx_cast (T c)
    -template<typename T >
    f16 f16_channel_cast (T a)
    -template<typename T >
    f16vec4 f16_rgba_cast (T c)
    -template<typename T >
    f16vec3 f16_rgbx_cast (T c)
    -template<typename T >
    f16vec3 f16_xbgr_cast (T c)
    -template<typename T >
    f16vec3 f16_xrgb_cast (T c)
    -template<typename T >
    f32vec4 f32_abgr_cast (T c)
    -template<typename T >
    f32vec4 f32_argb_cast (T c)
    -template<typename T >
    f32vec4 f32_bgra_cast (T c)
    -template<typename T >
    f32vec3 f32_bgrx_cast (T c)
    -template<typename T >
    f32 f32_channel_cast (T a)
    -template<typename T >
    f32vec4 f32_rgba_cast (T c)
    -template<typename T >
    f32vec3 f32_rgbx_cast (T c)
    -template<typename T >
    f32vec3 f32_xbgr_cast (T c)
    -template<typename T >
    f32vec3 f32_xrgb_cast (T c)
    -template<typename T >
    f64vec4 f64_abgr_cast (T c)
    -template<typename T >
    f64vec4 f64_argb_cast (T c)
    -template<typename T >
    f64vec4 f64_bgra_cast (T c)
    -template<typename T >
    f64vec3 f64_bgrx_cast (T c)
    -template<typename T >
    f64 f64_channel_cast (T a)
    -template<typename T >
    f64vec4 f64_rgba_cast (T c)
    -template<typename T >
    f64vec3 f64_rgbx_cast (T c)
    -template<typename T >
    f64vec3 f64_xbgr_cast (T c)
    -template<typename T >
    f64vec3 f64_xrgb_cast (T c)
    template<typename valType >
    uint16 u16channel_cast (valType a)
    -template<typename T >
    uint32 u32_abgr_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint32 u32_argb_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint32 u32_bgra_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint32 u32_bgrx_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint32 u32_rgba_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint32 u32_rgbx_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint32 u32_xbgr_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint32 u32_xrgb_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint64 u64_abgr_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint64 u64_argb_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint64 u64_bgra_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint64 u64_bgrx_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint64 u64_rgba_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint64 u64_rgbx_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint64 u64_xbgr_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint64 u64_xrgb_cast (const detail::tvec3< T > &c)
    template<typename valType >
    uint8 u8channel_cast (valType a)
    template<typename valType >
    detail::tvec3< valType > rgb2YCoCg (detail::tvec3< valType > const &rgbColor)
     
    template<typename valType >
    detail::tvec3< valType > rgb2YCoCgR (detail::tvec3< valType > const &rgbColor)
     
    template<typename valType >
    detail::tvec3< valType > YCoCg2rgb (detail::tvec3< valType > const &YCoCgColor)
     
    template<typename valType >
    detail::tvec3< valType > YCoCgR2rgb (detail::tvec3< valType > const &YCoCgColor)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_color_cast: Color conversion

    -
    Date:
    2007-06-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTX_number_precision: Number precision (dependence)
    - -

    Definition in file color_cast.hpp.

    -
    - +

    GLM_GTX_color_space_YCoCg

    +
    Date
    2008-10-28 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file color_space_YCoCg.hpp.

    + + - diff --git a/doc/api/a00012_source.html b/doc/api/a00012_source.html index 5efb2e32..1d5c1e99 100644 --- a/doc/api/a00012_source.html +++ b/doc/api/a00012_source.html @@ -2,42 +2,31 @@ - -color_cast.hpp Source File + +color_space_YCoCg.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,137 +35,93 @@
  • File List
  • + +
    -
    color_cast.hpp
    -
    +
    color_space_YCoCg.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_color_cast
    -00040 #define GLM_GTX_color_cast GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/number_precision.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_color_cast extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename valType> uint8 u8channel_cast(valType a);
    -00058 
    -00061         template <typename valType>     uint16 u16channel_cast(valType a);
    -00062 
    -00063         template <typename T> uint32 u32_rgbx_cast(const detail::tvec3<T>& c);          
    -00064         template <typename T> uint32 u32_xrgb_cast(const detail::tvec3<T>& c);          
    -00065         template <typename T> uint32 u32_bgrx_cast(const detail::tvec3<T>& c);          
    -00066         template <typename T> uint32 u32_xbgr_cast(const detail::tvec3<T>& c);          
    -00067 
    -00068         template <typename T> uint32 u32_rgba_cast(const detail::tvec4<T>& c);          
    -00069         template <typename T> uint32 u32_argb_cast(const detail::tvec4<T>& c);          
    -00070         template <typename T> uint32 u32_bgra_cast(const detail::tvec4<T>& c);          
    -00071         template <typename T> uint32 u32_abgr_cast(const detail::tvec4<T>& c);          
    -00072 
    -00073         template <typename T> uint64 u64_rgbx_cast(const detail::tvec3<T>& c);          
    -00074         template <typename T> uint64 u64_xrgb_cast(const detail::tvec3<T>& c);          
    -00075         template <typename T> uint64 u64_bgrx_cast(const detail::tvec3<T>& c);          
    -00076         template <typename T> uint64 u64_xbgr_cast(const detail::tvec3<T>& c);          
    -00077 
    -00078         template <typename T> uint64 u64_rgba_cast(const detail::tvec4<T>& c);          
    -00079         template <typename T> uint64 u64_argb_cast(const detail::tvec4<T>& c);          
    -00080         template <typename T> uint64 u64_bgra_cast(const detail::tvec4<T>& c);          
    -00081         template <typename T> uint64 u64_abgr_cast(const detail::tvec4<T>& c);          
    -00082 
    -00083         template <typename T> f16 f16_channel_cast(T a);        
    -00084 
    -00085         template <typename T> f16vec3 f16_rgbx_cast(T c);               
    -00086         template <typename T> f16vec3 f16_xrgb_cast(T c);               
    -00087         template <typename T> f16vec3 f16_bgrx_cast(T c);               
    -00088         template <typename T> f16vec3 f16_xbgr_cast(T c);               
    -00089 
    -00090         template <typename T> f16vec4 f16_rgba_cast(T c);               
    -00091         template <typename T> f16vec4 f16_argb_cast(T c);               
    -00092         template <typename T> f16vec4 f16_bgra_cast(T c);               
    -00093         template <typename T> f16vec4 f16_abgr_cast(T c);               
    -00094 
    -00095         template <typename T> f32 f32_channel_cast(T a);                
    -00096 
    -00097         template <typename T> f32vec3 f32_rgbx_cast(T c);               
    -00098         template <typename T> f32vec3 f32_xrgb_cast(T c);               
    -00099         template <typename T> f32vec3 f32_bgrx_cast(T c);               
    -00100         template <typename T> f32vec3 f32_xbgr_cast(T c);               
    -00101 
    -00102         template <typename T> f32vec4 f32_rgba_cast(T c);               
    -00103         template <typename T> f32vec4 f32_argb_cast(T c);               
    -00104         template <typename T> f32vec4 f32_bgra_cast(T c);               
    -00105         template <typename T> f32vec4 f32_abgr_cast(T c);               
    -00106 
    -00107         template <typename T> f64 f64_channel_cast(T a);                
    -00108 
    -00109         template <typename T> f64vec3 f64_rgbx_cast(T c);               
    -00110         template <typename T> f64vec3 f64_xrgb_cast(T c);               
    -00111         template <typename T> f64vec3 f64_bgrx_cast(T c);               
    -00112         template <typename T> f64vec3 f64_xbgr_cast(T c);               
    -00113 
    -00114         template <typename T> f64vec4 f64_rgba_cast(T c);               
    -00115         template <typename T> f64vec4 f64_argb_cast(T c);               
    -00116         template <typename T> f64vec4 f64_bgra_cast(T c);               
    -00117         template <typename T> f64vec4 f64_abgr_cast(T c);               
    -00118 
    -00120 }//namespace glm
    -00121 
    -00122 #include "color_cast.inl"
    -00123 
    -00124 #endif//GLM_GTX_color_cast
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef glm_gtx_color_space_YCoCg
    +
    39 #define glm_gtx_color_space_YCoCg GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename valType>
    +
    56  detail::tvec3<valType> rgb2YCoCg(
    +
    57  detail::tvec3<valType> const & rgbColor);
    +
    58 
    +
    61  template <typename valType>
    +
    62  detail::tvec3<valType> YCoCg2rgb(
    +
    63  detail::tvec3<valType> const & YCoCgColor);
    +
    64 
    +
    68  template <typename valType>
    +
    69  detail::tvec3<valType> rgb2YCoCgR(
    +
    70  detail::tvec3<valType> const & rgbColor);
    +
    71 
    +
    75  template <typename valType>
    +
    76  detail::tvec3<valType> YCoCgR2rgb(
    +
    77  detail::tvec3<valType> const & YCoCgColor);
    +
    78 
    +
    80 }//namespace glm
    +
    81 
    +
    82 #include "color_space_YCoCg.inl"
    +
    83 
    +
    84 #endif//glm_gtx_color_space_YCoCg
    +
    + - diff --git a/doc/api/a00013.html b/doc/api/a00013.html index 3e29bbad..97d6ced0 100644 --- a/doc/api/a00013.html +++ b/doc/api/a00013.html @@ -2,42 +2,31 @@ - -color_space.hpp File Reference + +compatibility.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,51 +35,361 @@
  • File List
  • + +
    -
    color_space.hpp File Reference
    -
    +
    compatibility.hpp File Reference
    +

    Go to the source code of this file.

    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    +Typedefs

    +typedef bool bool1
     
    +typedef bool bool1x1
     
    +typedef detail::tvec2< bool > bool2
     
    +typedef detail::tmat2x2< bool > bool2x2
     
    +typedef detail::tmat2x3< bool > bool2x3
     
    +typedef detail::tmat2x4< bool > bool2x4
     
    +typedef detail::tvec3< bool > bool3
     
    +typedef detail::tmat3x2< bool > bool3x2
     
    +typedef detail::tmat3x3< bool > bool3x3
     
    +typedef detail::tmat3x4< bool > bool3x4
     
    +typedef detail::tvec4< bool > bool4
     
    +typedef detail::tmat4x2< bool > bool4x2
     
    +typedef detail::tmat4x3< bool > bool4x3
     
    +typedef detail::tmat4x4< bool > bool4x4
     
    +typedef double double1
     
    +typedef double double1x1
     
    +typedef detail::tvec2< double > double2
     
    +typedef detail::tmat2x2< double > double2x2
     
    +typedef detail::tmat2x3< double > double2x3
     
    +typedef detail::tmat2x4< double > double2x4
     
    +typedef detail::tvec3< double > double3
     
    +typedef detail::tmat3x2< double > double3x2
     
    +typedef detail::tmat3x3< double > double3x3
     
    +typedef detail::tmat3x4< double > double3x4
     
    +typedef detail::tvec4< double > double4
     
    +typedef detail::tmat4x2< double > double4x2
     
    +typedef detail::tmat4x3< double > double4x3
     
    +typedef detail::tmat4x4< double > double4x4
     
    +typedef float float1
     
    +typedef float float1x1
     
    +typedef detail::tvec2< float > float2
     
    +typedef detail::tmat2x2< float > float2x2
     
    +typedef detail::tmat2x3< float > float2x3
     
    +typedef detail::tmat2x4< float > float2x4
     
    +typedef detail::tvec3< float > float3
     
    +typedef detail::tmat3x2< float > float3x2
     
    +typedef detail::tmat3x3< float > float3x3
     
    +typedef detail::tmat3x4< float > float3x4
     
    +typedef detail::tvec4< float > float4
     
    +typedef detail::tmat4x2< float > float4x2
     
    +typedef detail::tmat4x3< float > float4x3
     
    +typedef detail::tmat4x4< float > float4x4
     
    +typedef detail::half half1
     
    +typedef detail::half half1x1
     
    +typedef detail::tvec2
    +< detail::half > 
    half2
     
    +typedef detail::tmat2x2
    +< detail::half > 
    half2x2
     
    +typedef detail::tmat2x3
    +< detail::half > 
    half2x3
     
    +typedef detail::tmat2x4
    +< detail::half > 
    half2x4
     
    +typedef detail::tvec3
    +< detail::half > 
    half3
     
    +typedef detail::tmat3x2
    +< detail::half > 
    half3x2
     
    +typedef detail::tmat3x3
    +< detail::half > 
    half3x3
     
    +typedef detail::tmat3x4
    +< detail::half > 
    half3x4
     
    +typedef detail::tvec4
    +< detail::half > 
    half4
     
    +typedef detail::tmat4x2
    +< detail::half > 
    half4x2
     
    +typedef detail::tmat4x3
    +< detail::half > 
    half4x3
     
    +typedef detail::tmat4x4
    +< detail::half > 
    half4x4
     
    +typedef int int1
     
    +typedef int int1x1
     
    +typedef detail::tvec2< int > int2
     
    +typedef detail::tmat2x2< int > int2x2
     
    +typedef detail::tmat2x3< int > int2x3
     
    +typedef detail::tmat2x4< int > int2x4
     
    +typedef detail::tvec3< int > int3
     
    +typedef detail::tmat3x2< int > int3x2
     
    +typedef detail::tmat3x3< int > int3x3
     
    +typedef detail::tmat3x4< int > int3x4
     
    +typedef detail::tvec4< int > int4
     
    +typedef detail::tmat4x2< int > int4x2
     
    +typedef detail::tmat4x3< int > int4x3
     
    +typedef detail::tmat4x4< int > int4x4
     
    + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename valType >
    detail::tvec3< valType > hsvColor (detail::tvec3< valType > const &rgbValue)
    template<typename valType >
    valType luminosity (detail::tvec3< valType > const &color)
    template<typename valType >
    detail::tvec3< valType > rgbColor (detail::tvec3< valType > const &hsvValue)
    template<typename valType >
    detail::tmat4x4< valType > saturation (valType const s)
    template<typename valType >
    detail::tvec3< valType > saturation (valType const s, detail::tvec3< valType > const &color)
    template<typename valType >
    detail::tvec4< valType > saturation (valType const s, detail::tvec4< valType > const &color)
    +template<typename T >
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec2< T > 
    atan2 (const detail::tvec2< T > &x, const detail::tvec2< T > &y)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    atan2 (const detail::tvec3< T > &x, const detail::tvec3< T > &y)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec4< T > 
    atan2 (const detail::tvec4< T > &x, const detail::tvec4< T > &y)
     
    +template<typename genType >
    bool isfinite (genType const &x)
     
    +template<typename valType >
    detail::tvec2< bool > isfinite (const detail::tvec2< valType > &x)
     
    +template<typename valType >
    detail::tvec3< bool > isfinite (const detail::tvec3< valType > &x)
     
    +template<typename valType >
    detail::tvec4< bool > isfinite (const detail::tvec4< valType > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec2< T > 
    lerp (const detail::tvec2< T > &x, const detail::tvec2< T > &y, T a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    lerp (const detail::tvec3< T > &x, const detail::tvec3< T > &y, T a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec4< T > 
    lerp (const detail::tvec4< T > &x, const detail::tvec4< T > &y, T a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec2< T > 
    lerp (const detail::tvec2< T > &x, const detail::tvec2< T > &y, const detail::tvec2< T > &a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    lerp (const detail::tvec3< T > &x, const detail::tvec3< T > &y, const detail::tvec3< T > &a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec4< T > 
    lerp (const detail::tvec4< T > &x, const detail::tvec4< T > &y, const detail::tvec4< T > &a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER T saturate (T x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec2< T > 
    saturate (const detail::tvec2< T > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    saturate (const detail::tvec3< T > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec4< T > 
    saturate (const detail::tvec4< T > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER T slerp (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_color_space: RGB to HSV conversion

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file color_space.hpp.

    -
    - +

    GLM_GTX_compatibility

    +
    Date
    2007-01-24 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTC_half_float (dependence)
    +

    Definition in file compatibility.hpp.

    + + - diff --git a/doc/api/a00013_source.html b/doc/api/a00013_source.html index 16bbffe9..60e50bcc 100644 --- a/doc/api/a00013_source.html +++ b/doc/api/a00013_source.html @@ -2,42 +2,31 @@ - -color_space.hpp Source File + +compatibility.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,101 +35,195 @@
  • File List
  • + +
    -
    color_space.hpp
    -
    +
    compatibility.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_color_space
    -00039 #define GLM_GTX_color_space GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_color_space extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055     template <typename valType> 
    -00056         detail::tvec3<valType> rgbColor(
    -00057                 detail::tvec3<valType> const & hsvValue);
    -00058 
    -00061     template <typename valType> 
    -00062         detail::tvec3<valType> hsvColor(
    -00063                 detail::tvec3<valType> const & rgbValue);
    -00064                 
    -00067     template <typename valType> 
    -00068         detail::tmat4x4<valType> saturation(
    -00069                 valType const s);
    -00070 
    -00073         template <typename valType> 
    -00074         detail::tvec3<valType> saturation(
    -00075                 valType const s, 
    -00076                 detail::tvec3<valType> const & color);
    -00077                 
    -00080     template <typename valType> 
    -00081         detail::tvec4<valType> saturation(
    -00082                 valType const s, 
    -00083                 detail::tvec4<valType> const & color);
    -00084                 
    -00087         template <typename valType> 
    -00088         valType luminosity(
    -00089                 detail::tvec3<valType> const & color);
    -00090 
    -00092 }//namespace glm
    -00093 
    -00094 #include "color_space.inl"
    -00095 
    -00096 #endif//GLM_GTX_color_space
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_compatibility
    +
    40 #define GLM_GTX_compatibility GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/half_float.hpp"
    +
    45 #include "../gtc/quaternion.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    48 # pragma message("GLM: GLM_GTX_compatibility extension included")
    +
    49 #endif
    +
    50 
    +
    51 #if(GLM_COMPILER & GLM_COMPILER_VC)
    +
    52 # include <cfloat>
    +
    53 #elif(GLM_COMPILER & GLM_COMPILER_GCC)
    +
    54 # include <cmath>
    +
    55 # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
    +
    56 # undef isfinite
    +
    57 # endif
    +
    58 #endif//GLM_COMPILER
    +
    59 
    +
    60 namespace glm
    +
    61 {
    +
    64 
    +
    65  template <typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}
    +
    66  template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> lerp(const detail::tvec2<T>& x, const detail::tvec2<T>& y, T a){return mix(x, y, a);}
    +
    67  template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> lerp(const detail::tvec3<T>& x, const detail::tvec3<T>& y, T a){return mix(x, y, a);}
    +
    68  template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> lerp(const detail::tvec4<T>& x, const detail::tvec4<T>& y, T a){return mix(x, y, a);}
    +
    69  template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> lerp(const detail::tvec2<T>& x, const detail::tvec2<T>& y, const detail::tvec2<T>& a){return mix(x, y, a);}
    +
    70  template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> lerp(const detail::tvec3<T>& x, const detail::tvec3<T>& y, const detail::tvec3<T>& a){return mix(x, y, a);}
    +
    71  template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> lerp(const detail::tvec4<T>& x, const detail::tvec4<T>& y, const detail::tvec4<T>& a){return mix(x, y, a);}
    +
    72 
    +
    73  template <typename T> GLM_FUNC_QUALIFIER T slerp(detail::tquat<T> const & x, detail::tquat<T> const & y, T const & a){return mix(x, y, a);}
    +
    74 
    +
    75  template <typename T> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}
    +
    76  template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> saturate(const detail::tvec2<T>& x){return clamp(x, T(0), T(1));}
    +
    77  template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> saturate(const detail::tvec3<T>& x){return clamp(x, T(0), T(1));}
    +
    78  template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> saturate(const detail::tvec4<T>& x){return clamp(x, T(0), T(1));}
    +
    79 
    +
    80  template <typename T> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}
    +
    81  template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> atan2(const detail::tvec2<T>& x, const detail::tvec2<T>& y){return atan(x, y);}
    +
    82  template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> atan2(const detail::tvec3<T>& x, const detail::tvec3<T>& y){return atan(x, y);}
    +
    83  template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> atan2(const detail::tvec4<T>& x, const detail::tvec4<T>& y){return atan(x, y);}
    +
    84 
    +
    85  template <typename genType> bool isfinite(genType const & x);
    +
    86  template <typename valType> detail::tvec2<bool> isfinite(const detail::tvec2<valType>& x);
    +
    87  template <typename valType> detail::tvec3<bool> isfinite(const detail::tvec3<valType>& x);
    +
    88  template <typename valType> detail::tvec4<bool> isfinite(const detail::tvec4<valType>& x);
    +
    89 
    +
    90  typedef bool bool1;
    +
    91  typedef detail::tvec2<bool> bool2;
    +
    92  typedef detail::tvec3<bool> bool3;
    +
    93  typedef detail::tvec4<bool> bool4;
    +
    94 
    +
    95  typedef bool bool1x1;
    +
    96  typedef detail::tmat2x2<bool> bool2x2;
    +
    97  typedef detail::tmat2x3<bool> bool2x3;
    +
    98  typedef detail::tmat2x4<bool> bool2x4;
    +
    99  typedef detail::tmat3x2<bool> bool3x2;
    +
    100  typedef detail::tmat3x3<bool> bool3x3;
    +
    101  typedef detail::tmat3x4<bool> bool3x4;
    +
    102  typedef detail::tmat4x2<bool> bool4x2;
    +
    103  typedef detail::tmat4x3<bool> bool4x3;
    +
    104  typedef detail::tmat4x4<bool> bool4x4;
    +
    105 
    +
    106  typedef int int1;
    +
    107  typedef detail::tvec2<int> int2;
    +
    108  typedef detail::tvec3<int> int3;
    +
    109  typedef detail::tvec4<int> int4;
    +
    110 
    +
    111  typedef int int1x1;
    +
    112  typedef detail::tmat2x2<int> int2x2;
    +
    113  typedef detail::tmat2x3<int> int2x3;
    +
    114  typedef detail::tmat2x4<int> int2x4;
    +
    115  typedef detail::tmat3x2<int> int3x2;
    +
    116  typedef detail::tmat3x3<int> int3x3;
    +
    117  typedef detail::tmat3x4<int> int3x4;
    +
    118  typedef detail::tmat4x2<int> int4x2;
    +
    119  typedef detail::tmat4x3<int> int4x3;
    +
    120  typedef detail::tmat4x4<int> int4x4;
    +
    121 
    +
    122  typedef detail::half half1;
    +
    123  typedef detail::tvec2<detail::half> half2;
    +
    124  typedef detail::tvec3<detail::half> half3;
    +
    125  typedef detail::tvec4<detail::half> half4;
    +
    126 
    + +
    128  typedef detail::tmat2x2<detail::half> half2x2;
    +
    129  typedef detail::tmat2x3<detail::half> half2x3;
    +
    130  typedef detail::tmat2x4<detail::half> half2x4;
    +
    131  typedef detail::tmat3x2<detail::half> half3x2;
    +
    132  typedef detail::tmat3x3<detail::half> half3x3;
    +
    133  typedef detail::tmat3x4<detail::half> half3x4;
    +
    134  typedef detail::tmat4x2<detail::half> half4x2;
    +
    135  typedef detail::tmat4x3<detail::half> half4x3;
    +
    136  typedef detail::tmat4x4<detail::half> half4x4;
    +
    137 
    +
    138  typedef float float1;
    +
    139  typedef detail::tvec2<float> float2;
    +
    140  typedef detail::tvec3<float> float3;
    +
    141  typedef detail::tvec4<float> float4;
    +
    142 
    +
    143  typedef float float1x1;
    +
    144  typedef detail::tmat2x2<float> float2x2;
    +
    145  typedef detail::tmat2x3<float> float2x3;
    +
    146  typedef detail::tmat2x4<float> float2x4;
    +
    147  typedef detail::tmat3x2<float> float3x2;
    +
    148  typedef detail::tmat3x3<float> float3x3;
    +
    149  typedef detail::tmat3x4<float> float3x4;
    +
    150  typedef detail::tmat4x2<float> float4x2;
    +
    151  typedef detail::tmat4x3<float> float4x3;
    +
    152  typedef detail::tmat4x4<float> float4x4;
    +
    153 
    +
    154  typedef double double1;
    +
    155  typedef detail::tvec2<double> double2;
    +
    156  typedef detail::tvec3<double> double3;
    +
    157  typedef detail::tvec4<double> double4;
    +
    158 
    +
    159  typedef double double1x1;
    +
    160  typedef detail::tmat2x2<double> double2x2;
    +
    161  typedef detail::tmat2x3<double> double2x3;
    +
    162  typedef detail::tmat2x4<double> double2x4;
    +
    163  typedef detail::tmat3x2<double> double3x2;
    +
    164  typedef detail::tmat3x3<double> double3x3;
    +
    165  typedef detail::tmat3x4<double> double3x4;
    +
    166  typedef detail::tmat4x2<double> double4x2;
    +
    167  typedef detail::tmat4x3<double> double4x3;
    +
    168  typedef detail::tmat4x4<double> double4x4;
    +
    169 
    +
    171 }//namespace glm
    +
    172 
    +
    173 #include "compatibility.inl"
    +
    174 
    +
    175 #endif//GLM_GTX_compatibility
    +
    176 
    +
    + - diff --git a/doc/api/a00014.html b/doc/api/a00014.html index 886f5ab7..a42a76eb 100644 --- a/doc/api/a00014.html +++ b/doc/api/a00014.html @@ -2,42 +2,31 @@ - -color_space_YCoCg.hpp File Reference + +component_wise.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,47 +35,53 @@
  • File List
  • + +
    -
    color_space_YCoCg.hpp File Reference
    -
    +
    component_wise.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tvec3< valType > rgb2YCoCg (detail::tvec3< valType > const &rgbColor)
    template<typename valType >
    detail::tvec3< valType > rgb2YCoCgR (detail::tvec3< valType > const &rgbColor)
    template<typename valType >
    detail::tvec3< valType > YCoCg2rgb (detail::tvec3< valType > const &YCoCgColor)
    template<typename valType >
    detail::tvec3< valType > YCoCgR2rgb (detail::tvec3< valType > const &YCoCgColor)
    template<typename genType >
    genType::value_type compAdd (genType const &v)
     
    template<typename genType >
    genType::value_type compMax (genType const &v)
     
    template<typename genType >
    genType::value_type compMin (genType const &v)
     
    template<typename genType >
    genType::value_type compMul (genType const &v)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion

    -
    Date:
    2008-10-28 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file color_space_YCoCg.hpp.

    -
    - +

    GLM_GTX_component_wise

    +
    Date
    2007-05-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file component_wise.hpp.

    + + - diff --git a/doc/api/a00014_source.html b/doc/api/a00014_source.html index 44bd2606..f18a3911 100644 --- a/doc/api/a00014_source.html +++ b/doc/api/a00014_source.html @@ -2,42 +2,31 @@ - -color_space_YCoCg.hpp Source File + +component_wise.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,91 +35,93 @@
  • File List
  • + +
    -
    color_space_YCoCg.hpp
    -
    +
    component_wise.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef glm_gtx_color_space_YCoCg
    -00039 #define glm_gtx_color_space_YCoCg GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename valType> 
    -00056         detail::tvec3<valType> rgb2YCoCg(
    -00057                 detail::tvec3<valType> const & rgbColor);
    -00058 
    -00061     template <typename valType> 
    -00062         detail::tvec3<valType> YCoCg2rgb(
    -00063                 detail::tvec3<valType> const & YCoCgColor);
    -00064 
    -00068         template <typename valType> 
    -00069         detail::tvec3<valType> rgb2YCoCgR(
    -00070                 detail::tvec3<valType> const & rgbColor);
    -00071 
    -00075     template <typename valType> 
    -00076         detail::tvec3<valType> YCoCgR2rgb(
    -00077                 detail::tvec3<valType> const & YCoCgColor);
    -00078 
    -00080 }//namespace glm
    -00081 
    -00082 #include "color_space_YCoCg.inl"
    -00083 
    -00084 #endif//glm_gtx_color_space_YCoCg
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_component_wise
    +
    39 #define GLM_GTX_component_wise GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_component_wise extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename genType>
    +
    56  typename genType::value_type compAdd(
    +
    57  genType const & v);
    +
    58 
    +
    61  template <typename genType>
    +
    62  typename genType::value_type compMul(
    +
    63  genType const & v);
    +
    64 
    +
    67  template <typename genType>
    +
    68  typename genType::value_type compMin(
    +
    69  genType const & v);
    +
    70 
    +
    73  template <typename genType>
    +
    74  typename genType::value_type compMax(
    +
    75  genType const & v);
    +
    76 
    +
    78 }//namespace glm
    +
    79 
    +
    80 #include "component_wise.inl"
    +
    81 
    +
    82 #endif//GLM_GTX_component_wise
    +
    + - diff --git a/doc/api/a00015.html b/doc/api/a00015.html index 142c92be..a2ad98e0 100644 --- a/doc/api/a00015.html +++ b/doc/api/a00015.html @@ -2,42 +2,31 @@ - -compatibility.hpp File Reference + +constants.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,287 +35,118 @@
  • File List
  • + +
    -
    compatibility.hpp File Reference
    -
    +
    gtc/constants.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    -typedef bool bool1
    -typedef bool bool1x1
    -typedef detail::tvec2< bool > bool2
    -typedef detail::tmat2x2< bool > bool2x2
    -typedef detail::tmat2x3< bool > bool2x3
    -typedef detail::tmat2x4< bool > bool2x4
    -typedef detail::tvec3< bool > bool3
    -typedef detail::tmat3x2< bool > bool3x2
    -typedef detail::tmat3x3< bool > bool3x3
    -typedef detail::tmat3x4< bool > bool3x4
    -typedef detail::tvec4< bool > bool4
    -typedef detail::tmat4x2< bool > bool4x2
    -typedef detail::tmat4x3< bool > bool4x3
    -typedef detail::tmat4x4< bool > bool4x4
    -typedef double double1
    -typedef double double1x1
    -typedef detail::tvec2< double > double2
    -typedef detail::tmat2x2< double > double2x2
    -typedef detail::tmat2x3< double > double2x3
    -typedef detail::tmat2x4< double > double2x4
    -typedef detail::tvec3< double > double3
    -typedef detail::tmat3x2< double > double3x2
    -typedef detail::tmat3x3< double > double3x3
    -typedef detail::tmat3x4< double > double3x4
    -typedef detail::tvec4< double > double4
    -typedef detail::tmat4x2< double > double4x2
    -typedef detail::tmat4x3< double > double4x3
    -typedef detail::tmat4x4< double > double4x4
    -typedef float float1
    -typedef float float1x1
    -typedef detail::tvec2< float > float2
    -typedef detail::tmat2x2< float > float2x2
    -typedef detail::tmat2x3< float > float2x3
    -typedef detail::tmat2x4< float > float2x4
    -typedef detail::tvec3< float > float3
    -typedef detail::tmat3x2< float > float3x2
    -typedef detail::tmat3x3< float > float3x3
    -typedef detail::tmat3x4< float > float3x4
    -typedef detail::tvec4< float > float4
    -typedef detail::tmat4x2< float > float4x2
    -typedef detail::tmat4x3< float > float4x3
    -typedef detail::tmat4x4< float > float4x4
    -typedef detail::half half1
    -typedef detail::half half1x1
    -typedef detail::tvec2
    -< detail::half > 
    half2
    -typedef detail::tmat2x2
    -< detail::half > 
    half2x2
    -typedef detail::tmat2x3
    -< detail::half > 
    half2x3
    -typedef detail::tmat2x4
    -< detail::half > 
    half2x4
    -typedef detail::tvec3
    -< detail::half > 
    half3
    -typedef detail::tmat3x2
    -< detail::half > 
    half3x2
    -typedef detail::tmat3x3
    -< detail::half > 
    half3x3
    -typedef detail::tmat3x4
    -< detail::half > 
    half3x4
    -typedef detail::tvec4
    -< detail::half > 
    half4
    -typedef detail::tmat4x2
    -< detail::half > 
    half4x2
    -typedef detail::tmat4x3
    -< detail::half > 
    half4x3
    -typedef detail::tmat4x4
    -< detail::half > 
    half4x4
    -typedef int int1
    -typedef int int1x1
    -typedef detail::tvec2< int > int2
    -typedef detail::tmat2x2< int > int2x2
    -typedef detail::tmat2x3< int > int2x3
    -typedef detail::tmat2x4< int > int2x4
    -typedef detail::tvec3< int > int3
    -typedef detail::tmat3x2< int > int3x2
    -typedef detail::tmat3x3< int > int3x3
    -typedef detail::tmat3x4< int > int3x4
    -typedef detail::tvec4< int > int4
    -typedef detail::tmat4x2< int > int4x2
    -typedef detail::tmat4x3< int > int4x3
    -typedef detail::tmat4x4< int > int4x4

    +

    Functions

    -template<typename T >
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T > 
    atan2 (const detail::tvec2< T > &x, const detail::tvec2< T > &y)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    atan2 (const detail::tvec3< T > &x, const detail::tvec3< T > &y)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T > 
    atan2 (const detail::tvec4< T > &x, const detail::tvec4< T > &y)
    -template<typename genType >
    bool isfinite (genType const &x)
    -template<typename valType >
    detail::tvec2< bool > isfinite (const detail::tvec2< valType > &x)
    -template<typename valType >
    detail::tvec3< bool > isfinite (const detail::tvec3< valType > &x)
    -template<typename valType >
    detail::tvec4< bool > isfinite (const detail::tvec4< valType > &x)
    -template<typename genType >
    detail::tvec2< bool > isinf (const detail::tvec2< genType > &x)
    -template<typename genType >
    detail::tvec3< bool > isinf (const detail::tvec3< genType > &x)
    -template<typename genType >
    detail::tvec4< bool > isinf (const detail::tvec4< genType > &x)
    template<typename genType >
    genType::bool_type isinf (genType const &x)
    -template<typename genType >
    detail::tvec2< bool > isnan (const detail::tvec2< genType > &x)
    -template<typename genType >
    detail::tvec3< bool > isnan (const detail::tvec3< genType > &x)
    -template<typename genType >
    detail::tvec4< bool > isnan (const detail::tvec4< genType > &x)
    template<typename genType >
    genType::bool_type isnan (genType const &x)
    -template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T > 
    lerp (const detail::tvec2< T > &x, const detail::tvec2< T > &y, T a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    lerp (const detail::tvec3< T > &x, const detail::tvec3< T > &y, T a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T > 
    lerp (const detail::tvec4< T > &x, const detail::tvec4< T > &y, T a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T > 
    lerp (const detail::tvec2< T > &x, const detail::tvec2< T > &y, const detail::tvec2< T > &a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    lerp (const detail::tvec3< T > &x, const detail::tvec3< T > &y, const detail::tvec3< T > &a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T > 
    lerp (const detail::tvec4< T > &x, const detail::tvec4< T > &y, const detail::tvec4< T > &a)
    -template<typename T >
    GLM_FUNC_QUALIFIER T saturate (T x)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T > 
    saturate (const detail::tvec2< T > &x)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    saturate (const detail::tvec3< T > &x)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T > 
    saturate (const detail::tvec4< T > &x)
    template<typename T >
    GLM_CONSTEXPR T e ()
     
    template<typename T >
    GLM_CONSTEXPR T epsilon ()
     
    template<typename T >
    GLM_CONSTEXPR T euler ()
     
    template<typename T >
    GLM_CONSTEXPR T golden_ratio ()
     
    template<typename T >
    GLM_CONSTEXPR T half_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T ln_ln_two ()
     
    template<typename T >
    GLM_CONSTEXPR T ln_ten ()
     
    template<typename T >
    GLM_CONSTEXPR T ln_two ()
     
    template<typename T >
    GLM_CONSTEXPR T one ()
     
    template<typename T >
    GLM_CONSTEXPR T one_over_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T one_over_root_two ()
     
    template<typename T >
    GLM_CONSTEXPR T pi ()
     
    template<typename T >
    GLM_CONSTEXPR T quarter_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T root_five ()
     
    template<typename T >
    GLM_CONSTEXPR T root_half_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T root_ln_four ()
     
    template<typename T >
    GLM_CONSTEXPR T root_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T root_three ()
     
    template<typename T >
    GLM_CONSTEXPR T root_two ()
     
    template<typename T >
    GLM_CONSTEXPR T root_two_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T third ()
     
    template<typename T >
    GLM_CONSTEXPR T two_over_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T two_over_root_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T two_thirds ()
     
    template<typename T >
    GLM_CONSTEXPR T zero ()
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_compatibility: Cg and HLSL compatibility

    -
    Date:
    2007-01-24 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_constants

    +
    Date
    2011-09-30 / 2012-01-25
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    - -

    Definition in file compatibility.hpp.

    -
    - +GLM_GTC_half_float (dependence) +

    Definition in file gtc/constants.hpp.

    + + - diff --git a/doc/api/a00015_source.html b/doc/api/a00015_source.html index a92f5762..baedf1ca 100644 --- a/doc/api/a00015_source.html +++ b/doc/api/a00015_source.html @@ -2,42 +2,31 @@ - -compatibility.hpp Source File + +constants.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,197 +35,154 @@
  • File List
  • + +
    -
    compatibility.hpp
    -
    +
    gtc/constants.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_compatibility
    -00040 #define GLM_GTX_compatibility GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"  
    -00044 #include "../gtc/half_float.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_compatibility extension included")
    -00048 #endif
    -00049 
    -00050 #if(GLM_COMPILER & GLM_COMPILER_VC)
    -00051 #include <cfloat>
    -00052 #elif(GLM_COMPILER & GLM_COMPILER_GCC)
    -00053 #include <cmath>
    -00054 #endif//GLM_COMPILER
    -00055 
    -00056 namespace glm
    -00057 {
    -00060 
    -00061         template <typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}                                                                                                                                                                    
    -00062         template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> lerp(const detail::tvec2<T>& x, const detail::tvec2<T>& y, T a){return mix(x, y, a);}                                                 
    -00063         template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> lerp(const detail::tvec3<T>& x, const detail::tvec3<T>& y, T a){return mix(x, y, a);}                                                 
    -00064         template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> lerp(const detail::tvec4<T>& x, const detail::tvec4<T>& y, T a){return mix(x, y, a);}                                                 
    -00065         template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> lerp(const detail::tvec2<T>& x, const detail::tvec2<T>& y, const detail::tvec2<T>& a){return mix(x, y, a);}   
    -00066         template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> lerp(const detail::tvec3<T>& x, const detail::tvec3<T>& y, const detail::tvec3<T>& a){return mix(x, y, a);}   
    -00067         template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> lerp(const detail::tvec4<T>& x, const detail::tvec4<T>& y, const detail::tvec4<T>& a){return mix(x, y, a);}   
    -00068 
    -00069         template <typename T> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}                                                                                                          
    -00070         template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> saturate(const detail::tvec2<T>& x){return clamp(x, T(0), T(1));}                                     
    -00071         template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> saturate(const detail::tvec3<T>& x){return clamp(x, T(0), T(1));}                                     
    -00072         template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> saturate(const detail::tvec4<T>& x){return clamp(x, T(0), T(1));}                                     
    -00073 
    -00074         template <typename T> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}                                                                                                                          
    -00075         template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> atan2(const detail::tvec2<T>& x, const detail::tvec2<T>& y){return atan(x, y);}       
    -00076         template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> atan2(const detail::tvec3<T>& x, const detail::tvec3<T>& y){return atan(x, y);}       
    -00077         template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> atan2(const detail::tvec4<T>& x, const detail::tvec4<T>& y){return atan(x, y);}       
    -00078 
    -00079         template <typename genType> bool isfinite(genType const & x);                                                                                   
    -00080         template <typename valType> detail::tvec2<bool> isfinite(const detail::tvec2<valType>& x);                              
    -00081         template <typename valType> detail::tvec3<bool> isfinite(const detail::tvec3<valType>& x);                              
    -00082         template <typename valType> detail::tvec4<bool> isfinite(const detail::tvec4<valType>& x);                              
    -00083 
    -00084         template <typename genType> bool isinf(genType const & x);                                                                                                              
    -00085         template <typename genType> detail::tvec2<bool> isinf(const detail::tvec2<genType>& x);                                 
    -00086         template <typename genType> detail::tvec3<bool> isinf(const detail::tvec3<genType>& x);                                 
    -00087         template <typename genType> detail::tvec4<bool> isinf(const detail::tvec4<genType>& x);                                 
    -00088 
    -00089         template <typename genType> bool isnan(genType const & x);                                                                                                              
    -00090         template <typename genType> detail::tvec2<bool> isnan(const detail::tvec2<genType>& x);                                 
    -00091         template <typename genType> detail::tvec3<bool> isnan(const detail::tvec3<genType>& x);                                 
    -00092         template <typename genType> detail::tvec4<bool> isnan(const detail::tvec4<genType>& x);                                 
    -00093 
    -00094         typedef bool                                            bool1;                  
    -00095         typedef detail::tvec2<bool>                     bool2;                  
    -00096         typedef detail::tvec3<bool>                     bool3;                  
    -00097         typedef detail::tvec4<bool>                     bool4;                  
    -00098 
    -00099         typedef bool                                            bool1x1;                
    -00100         typedef detail::tmat2x2<bool>           bool2x2;                
    -00101         typedef detail::tmat2x3<bool>           bool2x3;                
    -00102         typedef detail::tmat2x4<bool>           bool2x4;                
    -00103         typedef detail::tmat3x2<bool>           bool3x2;                
    -00104         typedef detail::tmat3x3<bool>           bool3x3;                
    -00105         typedef detail::tmat3x4<bool>           bool3x4;                
    -00106         typedef detail::tmat4x2<bool>           bool4x2;                
    -00107         typedef detail::tmat4x3<bool>           bool4x3;                
    -00108         typedef detail::tmat4x4<bool>           bool4x4;                
    -00109 
    -00110         typedef int                                                     int1;                   
    -00111         typedef detail::tvec2<int>                      int2;                   
    -00112         typedef detail::tvec3<int>                      int3;                   
    -00113         typedef detail::tvec4<int>                      int4;                   
    -00114 
    -00115         typedef int                                                     int1x1;                 
    -00116         typedef detail::tmat2x2<int>            int2x2;                 
    -00117         typedef detail::tmat2x3<int>            int2x3;                 
    -00118         typedef detail::tmat2x4<int>            int2x4;                 
    -00119         typedef detail::tmat3x2<int>            int3x2;                 
    -00120         typedef detail::tmat3x3<int>            int3x3;                 
    -00121         typedef detail::tmat3x4<int>            int3x4;                 
    -00122         typedef detail::tmat4x2<int>            int4x2;                 
    -00123         typedef detail::tmat4x3<int>            int4x3;                 
    -00124         typedef detail::tmat4x4<int>            int4x4;                 
    -00125 
    -00126         typedef detail::half                                    half1;                  
    -00127         typedef detail::tvec2<detail::half>     half2;                  
    -00128         typedef detail::tvec3<detail::half>     half3;                  
    -00129         typedef detail::tvec4<detail::half>     half4;                  
    -00130 
    -00131         typedef detail::half                                    half1x1;                
    -00132         typedef detail::tmat2x2<detail::half>   half2x2;                
    -00133         typedef detail::tmat2x3<detail::half>   half2x3;                
    -00134         typedef detail::tmat2x4<detail::half>   half2x4;                
    -00135         typedef detail::tmat3x2<detail::half>   half3x2;                
    -00136         typedef detail::tmat3x3<detail::half>   half3x3;                
    -00137         typedef detail::tmat3x4<detail::half>   half3x4;                
    -00138         typedef detail::tmat4x2<detail::half>   half4x2;                
    -00139         typedef detail::tmat4x3<detail::half>   half4x3;                
    -00140         typedef detail::tmat4x4<detail::half>   half4x4;                
    -00141 
    -00142         typedef float                                           float1;                 
    -00143         typedef detail::tvec2<float>            float2;                 
    -00144         typedef detail::tvec3<float>            float3;                 
    -00145         typedef detail::tvec4<float>            float4;                 
    -00146 
    -00147         typedef float                                           float1x1;               
    -00148         typedef detail::tmat2x2<float>          float2x2;               
    -00149         typedef detail::tmat2x3<float>          float2x3;               
    -00150         typedef detail::tmat2x4<float>          float2x4;               
    -00151         typedef detail::tmat3x2<float>          float3x2;               
    -00152         typedef detail::tmat3x3<float>          float3x3;               
    -00153         typedef detail::tmat3x4<float>          float3x4;               
    -00154         typedef detail::tmat4x2<float>          float4x2;               
    -00155         typedef detail::tmat4x3<float>          float4x3;               
    -00156         typedef detail::tmat4x4<float>          float4x4;               
    -00157 
    -00158         typedef double                                          double1;                
    -00159         typedef detail::tvec2<double>           double2;                
    -00160         typedef detail::tvec3<double>           double3;                
    -00161         typedef detail::tvec4<double>           double4;                
    -00162 
    -00163         typedef double                                          double1x1;              
    -00164         typedef detail::tmat2x2<double>         double2x2;              
    -00165         typedef detail::tmat2x3<double>         double2x3;              
    -00166         typedef detail::tmat2x4<double>         double2x4;              
    -00167         typedef detail::tmat3x2<double>         double3x2;              
    -00168         typedef detail::tmat3x3<double>         double3x3;              
    -00169         typedef detail::tmat3x4<double>         double3x4;              
    -00170         typedef detail::tmat4x2<double>         double4x2;              
    -00171         typedef detail::tmat4x3<double>         double4x3;              
    -00172         typedef detail::tmat4x4<double>         double4x4;              
    -00173 
    -00175 }//namespace glm
    -00176 
    -00177 #include "compatibility.inl"
    -00178     
    -00179 #endif//GLM_GTX_compatibility
    -00180 
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTC_constants
    +
    40 #define GLM_GTC_constants GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/half_float.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTC_constants extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    58  template <typename T>
    +
    59  GLM_CONSTEXPR T epsilon();
    +
    60 
    +
    63  template <typename T>
    +
    64  GLM_CONSTEXPR T zero();
    +
    65 
    +
    68  template <typename T>
    +
    69  GLM_CONSTEXPR T one();
    +
    70 
    +
    73  template <typename T>
    +
    74  GLM_CONSTEXPR T pi();
    +
    75 
    +
    78  template <typename T>
    +
    79  GLM_CONSTEXPR T root_pi();
    +
    80 
    +
    83  template <typename T>
    +
    84  GLM_CONSTEXPR T half_pi();
    +
    85 
    +
    88  template <typename T>
    +
    89  GLM_CONSTEXPR T quarter_pi();
    +
    90 
    +
    93  template <typename T>
    +
    94  GLM_CONSTEXPR T one_over_pi();
    +
    95 
    +
    98  template <typename T>
    +
    99  GLM_CONSTEXPR T two_over_pi();
    +
    100 
    +
    103  template <typename T>
    +
    104  GLM_CONSTEXPR T two_over_root_pi();
    +
    105 
    +
    108  template <typename T>
    +
    109  GLM_CONSTEXPR T one_over_root_two();
    +
    110 
    +
    113  template <typename T>
    +
    114  GLM_CONSTEXPR T root_half_pi();
    +
    115 
    +
    118  template <typename T>
    +
    119  GLM_CONSTEXPR T root_two_pi();
    +
    120 
    +
    123  template <typename T>
    +
    124  GLM_CONSTEXPR T root_ln_four();
    +
    125 
    +
    128  template <typename T>
    +
    129  GLM_CONSTEXPR T e();
    +
    130 
    +
    133  template <typename T>
    +
    134  GLM_CONSTEXPR T euler();
    +
    135 
    +
    138  template <typename T>
    +
    139  GLM_CONSTEXPR T root_two();
    +
    140 
    +
    143  template <typename T>
    +
    144  GLM_CONSTEXPR T root_three();
    +
    145 
    +
    148  template <typename T>
    +
    149  GLM_CONSTEXPR T root_five();
    +
    150 
    +
    153  template <typename T>
    +
    154  GLM_CONSTEXPR T ln_two();
    +
    155 
    +
    158  template <typename T>
    +
    159  GLM_CONSTEXPR T ln_ten();
    +
    160 
    +
    163  template <typename T>
    +
    164  GLM_CONSTEXPR T ln_ln_two();
    +
    165 
    +
    168  template <typename T>
    +
    169  GLM_CONSTEXPR T third();
    +
    170 
    +
    173  template <typename T>
    +
    174  GLM_CONSTEXPR T two_thirds();
    +
    175 
    +
    178  template <typename T>
    +
    179  GLM_CONSTEXPR T golden_ratio();
    +
    180 
    +
    182 } //namespace glm
    +
    183 
    +
    184 #include "constants.inl"
    +
    185 
    +
    186 #endif//GLM_GTC_constants
    +
    + - diff --git a/doc/api/a00016.html b/doc/api/a00016.html deleted file mode 100644 index 009fe594..00000000 --- a/doc/api/a00016.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - -component_wise.hpp File Reference - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -
    -
    component_wise.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - - - - - - - -

    -Functions

    template<typename genType >
    genType::value_type compAdd (genType const &v)
    template<typename genType >
    genType::value_type compMax (genType const &v)
    template<typename genType >
    genType::value_type compMin (genType const &v)
    template<typename genType >
    genType::value_type compMul (genType const &v)
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_component_wise: Component wise

    -
    Date:
    2007-05-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file component_wise.hpp.

    -
    - - - - - - diff --git a/doc/api/a00016_source.html b/doc/api/a00016_source.html index 2b0dda2d..1d107483 100644 --- a/doc/api/a00016_source.html +++ b/doc/api/a00016_source.html @@ -2,42 +2,31 @@ - -component_wise.hpp Source File + +constants.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,91 +35,55 @@
  • File List
  • + +
    -
    component_wise.hpp
    -
    +
    gtx/constants.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_component_wise
    -00039 #define GLM_GTX_component_wise GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_component_wise extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename genType> 
    -00056         typename genType::value_type compAdd(
    -00057                 genType const & v);
    -00058 
    -00061         template <typename genType> 
    -00062         typename genType::value_type compMul(
    -00063                 genType const & v);
    -00064 
    -00067         template <typename genType> 
    -00068         typename genType::value_type compMin(
    -00069                 genType const & v);
    -00070 
    -00073         template <typename genType> 
    -00074         typename genType::value_type compMax(
    -00075                 genType const & v);
    -00076 
    -00078 }//namespace glm
    -00079 
    -00080 #include "component_wise.inl"
    -00081 
    -00082 #endif//GLM_GTX_component_wise
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 #ifndef GLM_GTX_constants
    +
    25 #define GLM_GTX_constants GLM_VERSION
    +
    26 
    +
    27 #include "../gtc/constants.hpp"
    +
    28 
    +
    29 #if(defined(GLM_MESSAGES))
    +
    30 # pragma message("GLM: GLM_GTX_constants extension is deprecated, include GLM_GTC_constants (glm/gtc/constants.hpp) instead")
    +
    31 #endif
    +
    32 
    +
    33 #endif//GLM_GTX_constants
    +
    + - diff --git a/doc/api/a00017.html b/doc/api/a00017.html index e5bd1452..144784b7 100644 --- a/doc/api/a00017.html +++ b/doc/api/a00017.html @@ -2,42 +2,31 @@ - -constants.hpp File Reference + +epsilon.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,91 +35,57 @@
  • File List
  • + +
    -
    constants.hpp File Reference
    -
    +
    gtc/epsilon.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    e ()
    template<typename T >
    epsilon ()
    template<typename T >
    euler ()
    template<typename T >
    golden_ratio ()
    template<typename T >
    half_pi ()
    template<typename T >
    ln_ln_two ()
    template<typename T >
    ln_ten ()
    template<typename T >
    ln_two ()
    template<typename T >
    one ()
    template<typename T >
    one_over_pi ()
    template<typename T >
    one_over_root_two ()
    template<typename T >
    pi ()
    template<typename T >
    quarter_pi ()
    template<typename T >
    root_five ()
    template<typename T >
    root_half_pi ()
    template<typename T >
    root_ln_four ()
    template<typename T >
    root_pi ()
    template<typename T >
    root_three ()
    template<typename T >
    root_two ()
    template<typename T >
    root_two_pi ()
    template<typename T >
    third ()
    template<typename T >
    two_over_pi ()
    template<typename T >
    two_over_root_pi ()
    template<typename T >
    two_thirds ()
    template<typename T >
    zero ()
    template<typename genType >
    genType::boolType epsilonEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    genType::boolType epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename genType >
    genType::boolType epsilonNotEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    genType::boolType epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_constants: Provide build-in constants

    -
    Date:
    2011-09-30 / 2011-09-30
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_epsilon

    +
    Date
    2012-04-07 / 2012-04-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    - -

    Definition in file constants.hpp.

    -
    - +GLM_GTC_half_float (dependence) +
    +GLM_GTC_quaternion (dependence)
    +

    Definition in file gtc/epsilon.hpp.

    + + - diff --git a/doc/api/a00017_source.html b/doc/api/a00017_source.html index 617af77d..e625d199 100644 --- a/doc/api/a00017_source.html +++ b/doc/api/a00017_source.html @@ -2,42 +2,31 @@ - -constants.hpp Source File + +epsilon.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,152 +35,105 @@
  • File List
  • + +
    -
    constants.hpp
    -
    +
    gtc/epsilon.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_constants
    -00040 #define GLM_GTX_constants GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtc/half_float.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_constants extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00058         template <typename T>
    -00059         T epsilon();
    -00060 
    -00063         template <typename T>
    -00064         T zero();
    -00065 
    -00068         template <typename T>
    -00069         T one();
    -00070 
    -00073         template <typename T>
    -00074         T pi();
    -00075 
    -00078         template <typename T>
    -00079         T root_pi();
    -00080 
    -00083         template <typename T>
    -00084         T half_pi();
    -00085 
    -00088         template <typename T>
    -00089         T quarter_pi();
    -00090 
    -00093         template <typename T>
    -00094         T one_over_pi();
    -00095 
    -00098         template <typename T>
    -00099         T two_over_pi();
    -00100 
    -00103         template <typename T>
    -00104         T two_over_root_pi();
    -00105 
    -00108         template <typename T>
    -00109         T one_over_root_two();
    -00110 
    -00113         template <typename T>
    -00114         T root_half_pi();
    -00115 
    -00118         template <typename T>
    -00119         T root_two_pi();
    -00120 
    -00123         template <typename T>
    -00124         T root_ln_four();
    -00125 
    -00128         template <typename T>
    -00129         T e();
    -00130 
    -00133         template <typename T>
    -00134         T euler();
    -00135 
    -00138         template <typename T>
    -00139         T root_two();
    -00140 
    -00143         template <typename T>
    -00144         T root_three();
    -00145 
    -00148         template <typename T>
    -00149         T root_five();
    -00150 
    -00153         template <typename T>
    -00154         T ln_two();
    -00155 
    -00158         template <typename T>
    -00159         T ln_ten();
    -00160 
    -00163         template <typename T>
    -00164         T ln_ln_two();
    -00165 
    -00168         template <typename T>
    -00169         T third();
    -00170 
    -00173         template <typename T>
    -00174         T two_thirds();
    -00175 
    -00178         template <typename T>
    -00179         T golden_ratio();
    -00180 
    -00182 } //namespace glm
    -00183 
    -00184 #include "constants.inl"
    -00185 
    -00186 #endif//GLM_GTX_constants
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 #ifndef GLM_GTC_epsilon
    +
    41 #define GLM_GTC_epsilon GLM_VERSION
    +
    42 
    +
    43 // Dependency:
    +
    44 #include "../glm.hpp"
    +
    45 #include "../gtc/half_float.hpp"
    +
    46 #include "../gtc/quaternion.hpp"
    +
    47 
    +
    48 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    49 # pragma message("GLM: GLM_GTC_epsilon extension included")
    +
    50 #endif
    +
    51 
    +
    52 namespace glm
    +
    53 {
    +
    56 
    +
    59  template <typename genType>
    +
    60  typename genType::boolType epsilonEqual(
    +
    61  genType const & x,
    +
    62  genType const & y,
    +
    63  typename genType::value_type const & epsilon);
    +
    64 
    +
    67  template <typename genType>
    +
    68  typename genType::boolType epsilonEqual(
    +
    69  genType const & x,
    +
    70  genType const & y,
    +
    71  genType const & epsilon);
    +
    72 
    +
    75  template <typename genType>
    +
    76  typename genType::boolType epsilonNotEqual(
    +
    77  genType const & x,
    +
    78  genType const & y,
    +
    79  typename genType::value_type const & epsilon);
    +
    80 
    +
    83  template <typename genType>
    +
    84  typename genType::boolType epsilonNotEqual(
    +
    85  genType const & x,
    +
    86  genType const & y,
    +
    87  genType const & epsilon);
    +
    88 
    +
    90 }//namespace glm
    +
    91 
    +
    92 #include "epsilon.inl"
    +
    93 
    +
    94 #endif//GLM_GTC_epsilon
    +
    + - diff --git a/doc/api/a00018.html b/doc/api/a00018.html deleted file mode 100644 index e8a88eab..00000000 --- a/doc/api/a00018.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - -epsilon.hpp File Reference - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -
    -
    epsilon.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - - - -

    -Functions

    template<typename genTypeT , typename genTypeU >
    bool equalEpsilon (genTypeT const &x, genTypeT const &y, genTypeU const &epsilon)
    template<typename genTypeT , typename genTypeU >
    bool notEqualEpsilon (genTypeT const &x, genTypeT const &y, genTypeU const &epsilon)
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_epsilon: Epsilon comparison

    -
    Date:
    2007-05-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    -
    -GLM_GTC_quaternion: Quaternion types and functions (dependence)
    - -

    Definition in file epsilon.hpp.

    -
    - - - - - - diff --git a/doc/api/a00018_source.html b/doc/api/a00018_source.html index 65b303ca..eeda8409 100644 --- a/doc/api/a00018_source.html +++ b/doc/api/a00018_source.html @@ -2,42 +2,31 @@ - + epsilon.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,91 +35,51 @@
  • File List
  • + +
    -
    epsilon.hpp
    -
    +
    gtx/epsilon.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 #ifndef GLM_GTX_epsilon
    -00041 #define GLM_GTX_epsilon GLM_VERSION
    -00042 
    -00043 // Dependency:
    -00044 #include "../glm.hpp"
    -00045 #include "../gtc/half_float.hpp"
    -00046 #include "../gtc/quaternion.hpp"
    -00047 
    -00048 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00049 #       pragma message("GLM: GLM_GTX_epsilon extension included")
    -00050 #endif
    -00051 
    -00052 namespace glm
    -00053 {
    -00056 
    -00059         template <typename genTypeT, typename genTypeU> 
    -00060         bool equalEpsilon(
    -00061                 genTypeT const & x, 
    -00062                 genTypeT const & y, 
    -00063                 genTypeU const & epsilon);
    -00064                 
    -00067         template <typename genTypeT, typename genTypeU>
    -00068         bool notEqualEpsilon(
    -00069                 genTypeT const & x, 
    -00070                 genTypeT const & y, 
    -00071                 genTypeU const & epsilon);
    -00072 
    -00074 }//namespace glm
    -00075 
    -00076 #include "epsilon.inl"
    -00077 
    -00078 #endif//GLM_GTX_epsilon
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 #if(defined(GLM_MESSAGES))
    +
    25 # pragma message("GLM: GLM_GTX_epsilon extension is deprecated, include GLM_GTC_epsilon (glm/gtc/epsilon) instead")
    +
    26 #endif
    +
    27 
    +
    28 // Promoted:
    +
    29 #include "../gtc/epsilon.hpp"
    +
    + - diff --git a/doc/api/a00019.html b/doc/api/a00019.html index f4625c10..cb76e9c6 100644 --- a/doc/api/a00019.html +++ b/doc/api/a00019.html @@ -2,42 +2,31 @@ - + euler_angles.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,71 +35,88 @@
  • File List
  • + +
    euler_angles.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tmat4x4< valType > eulerAngleX (valType const &angleX)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleXY (valType const &angleX, valType const &angleY)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleXZ (valType const &angleX, valType const &angleZ)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleY (valType const &angleY)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYX (valType const &angleY, valType const &angleX)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYXZ (valType const &yaw, valType const &pitch, valType const &roll)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYZ (valType const &angleY, valType const &angleZ)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZ (valType const &angleZ)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZX (valType const &angleZ, valType const &angleX)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZY (valType const &angleZ, valType const &angleY)
    template<typename T >
    detail::tmat2x2< T > orientate2 (T const &angle)
    template<typename T >
    detail::tmat3x3< T > orientate3 (T const &angle)
    template<typename T >
    detail::tmat3x3< T > orientate3 (detail::tvec3< T > const &angles)
    template<typename T >
    detail::tmat4x4< T > orientate4 (detail::tvec3< T > const &angles)
    template<typename valType >
    detail::tmat4x4< valType > yawPitchRoll (valType const &yaw, valType const &pitch, valType const &roll)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleX (valType const &angleX)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleXY (valType const &angleX, valType const &angleY)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleXZ (valType const &angleX, valType const &angleZ)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleY (valType const &angleY)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYX (valType const &angleY, valType const &angleX)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYXZ (valType const &yaw, valType const &pitch, valType const &roll)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYZ (valType const &angleY, valType const &angleZ)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZ (valType const &angleZ)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZX (valType const &angleZ, valType const &angleX)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZY (valType const &angleZ, valType const &angleY)
     
    template<typename T >
    detail::tmat2x2< T > orientate2 (T const &angle)
     
    template<typename T >
    detail::tmat3x3< T > orientate3 (T const &angle)
     
    template<typename T >
    detail::tmat3x3< T > orientate3 (detail::tvec3< T > const &angles)
     
    template<typename T >
    detail::tmat4x4< T > orientate4 (detail::tvec3< T > const &angles)
     
    template<typename valType >
    detail::tmat4x4< valType > yawPitchRoll (valType const &yaw, valType const &pitch, valType const &roll)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_euler_angles: Matrix from euler angles

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_euler_angles

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    +GLM_GTC_half_float (dependence)

    Definition in file euler_angles.hpp.

    -
    - - + + - diff --git a/doc/api/a00019_source.html b/doc/api/a00019_source.html index 40bbcc1d..e8cc9cd3 100644 --- a/doc/api/a00019_source.html +++ b/doc/api/a00019_source.html @@ -2,42 +2,31 @@ - + euler_angles.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,143 +35,145 @@
  • File List
  • + +
    euler_angles.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_euler_angles
    -00040 #define GLM_GTX_euler_angles GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtc/half_float.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_euler_angles extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename valType> 
    -00058         detail::tmat4x4<valType> eulerAngleX(
    -00059                 valType const & angleX);
    -00060 
    -00063         template <typename valType> 
    -00064         detail::tmat4x4<valType> eulerAngleY(
    -00065                 valType const & angleY);
    -00066 
    -00069         template <typename valType> 
    -00070         detail::tmat4x4<valType> eulerAngleZ(
    -00071                 valType const & angleZ);
    -00072 
    -00075         template <typename valType> 
    -00076         detail::tmat4x4<valType> eulerAngleXY(
    -00077                 valType const & angleX, 
    -00078                 valType const & angleY);
    -00079 
    -00082         template <typename valType> 
    -00083         detail::tmat4x4<valType> eulerAngleYX(
    -00084                 valType const & angleY, 
    -00085                 valType const & angleX);
    -00086 
    -00089         template <typename valType> 
    -00090         detail::tmat4x4<valType> eulerAngleXZ(
    -00091                 valType const & angleX, 
    -00092                 valType const & angleZ);
    -00093 
    -00096         template <typename valType> 
    -00097         detail::tmat4x4<valType> eulerAngleZX(
    -00098                 valType const & angleZ, 
    -00099                 valType const & angleX);
    -00100 
    -00103         template <typename valType> 
    -00104         detail::tmat4x4<valType> eulerAngleYZ(
    -00105                 valType const & angleY, 
    -00106                 valType const & angleZ);
    -00107 
    -00110         template <typename valType> 
    -00111         detail::tmat4x4<valType> eulerAngleZY(
    -00112                 valType const & angleZ, 
    -00113                 valType const & angleY);
    -00114 
    -00117         template <typename valType> 
    -00118         detail::tmat4x4<valType> eulerAngleYXZ(
    -00119                 valType const & yaw, 
    -00120                 valType const & pitch, 
    -00121                 valType const & roll);
    -00122 
    -00125         template <typename valType> 
    -00126         detail::tmat4x4<valType> yawPitchRoll(
    -00127                 valType const & yaw, 
    -00128                 valType const & pitch, 
    -00129                 valType const & roll);
    -00130 
    -00133         template <typename T> 
    -00134         detail::tmat2x2<T> orientate2(T const & angle);
    -00135 
    -00138         template <typename T> 
    -00139         detail::tmat3x3<T> orientate3(T const & angle);
    -00140 
    -00143         template <typename T> 
    -00144         detail::tmat3x3<T> orientate3(detail::tvec3<T> const & angles);
    -00145                 
    -00148         template <typename T> 
    -00149         detail::tmat4x4<T> orientate4(detail::tvec3<T> const & angles);
    -00150 
    -00152 }//namespace glm
    -00153 
    -00154 #include "euler_angles.inl"
    -00155 
    -00156 #endif//GLM_GTX_euler_angles
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_euler_angles
    +
    40 #define GLM_GTX_euler_angles GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/half_float.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_euler_angles extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename valType>
    +
    58  detail::tmat4x4<valType> eulerAngleX(
    +
    59  valType const & angleX);
    +
    60 
    +
    63  template <typename valType>
    +
    64  detail::tmat4x4<valType> eulerAngleY(
    +
    65  valType const & angleY);
    +
    66 
    +
    69  template <typename valType>
    +
    70  detail::tmat4x4<valType> eulerAngleZ(
    +
    71  valType const & angleZ);
    +
    72 
    +
    75  template <typename valType>
    +
    76  detail::tmat4x4<valType> eulerAngleXY(
    +
    77  valType const & angleX,
    +
    78  valType const & angleY);
    +
    79 
    +
    82  template <typename valType>
    +
    83  detail::tmat4x4<valType> eulerAngleYX(
    +
    84  valType const & angleY,
    +
    85  valType const & angleX);
    +
    86 
    +
    89  template <typename valType>
    +
    90  detail::tmat4x4<valType> eulerAngleXZ(
    +
    91  valType const & angleX,
    +
    92  valType const & angleZ);
    +
    93 
    +
    96  template <typename valType>
    +
    97  detail::tmat4x4<valType> eulerAngleZX(
    +
    98  valType const & angleZ,
    +
    99  valType const & angleX);
    +
    100 
    +
    103  template <typename valType>
    +
    104  detail::tmat4x4<valType> eulerAngleYZ(
    +
    105  valType const & angleY,
    +
    106  valType const & angleZ);
    +
    107 
    +
    110  template <typename valType>
    +
    111  detail::tmat4x4<valType> eulerAngleZY(
    +
    112  valType const & angleZ,
    +
    113  valType const & angleY);
    +
    114 
    +
    117  template <typename valType>
    +
    118  detail::tmat4x4<valType> eulerAngleYXZ(
    +
    119  valType const & yaw,
    +
    120  valType const & pitch,
    +
    121  valType const & roll);
    +
    122 
    +
    125  template <typename valType>
    +
    126  detail::tmat4x4<valType> yawPitchRoll(
    +
    127  valType const & yaw,
    +
    128  valType const & pitch,
    +
    129  valType const & roll);
    +
    130 
    +
    133  template <typename T>
    +
    134  detail::tmat2x2<T> orientate2(T const & angle);
    +
    135 
    +
    138  template <typename T>
    +
    139  detail::tmat3x3<T> orientate3(T const & angle);
    +
    140 
    +
    143  template <typename T>
    +
    144  detail::tmat3x3<T> orientate3(detail::tvec3<T> const & angles);
    +
    145 
    +
    148  template <typename T>
    +
    149  detail::tmat4x4<T> orientate4(detail::tvec3<T> const & angles);
    +
    150 
    +
    152 }//namespace glm
    +
    153 
    +
    154 #include "euler_angles.inl"
    +
    155 
    +
    156 #endif//GLM_GTX_euler_angles
    +
    + - diff --git a/doc/api/a00020_source.html b/doc/api/a00020_source.html index 1d921735..d80f8579 100644 --- a/doc/api/a00020_source.html +++ b/doc/api/a00020_source.html @@ -2,42 +2,31 @@ - + ext.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,164 +35,167 @@
  • File List
  • + +
    ext.hpp
    -
    +
    -
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 
    -00042 
    -00043 
    -00044 
    -00045 
    -00046 
    -00047 
    -00048 
    -00049 
    -00050 
    -00051 
    -00052 
    -00053 
    -00054 
    -00055 
    -00056 
    -00057 
    -00058 #ifndef glm_ext
    -00059 #define glm_ext
    -00060 
    -00061 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED))
    -00062 #       define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED
    -00063 #       pragma message("GLM: All extensions included (not recommanded)")
    -00064 #endif//GLM_MESSAGES
    -00065 
    -00066 #include "./gtc/half_float.hpp"
    -00067 #include "./gtc/matrix_access.hpp"
    -00068 #include "./gtc/matrix_integer.hpp"
    -00069 #include "./gtc/matrix_inverse.hpp"
    -00070 #include "./gtc/matrix_transform.hpp"
    -00071 #include "./gtc/quaternion.hpp"
    -00072 #include "./gtc/swizzle.hpp"
    -00073 #include "./gtc/type_precision.hpp"
    -00074 #include "./gtc/type_ptr.hpp"
    -00075 
    -00076 #include "./gtx/associated_min_max.hpp"
    -00077 #include "./gtx/bit.hpp"
    -00078 #include "./gtx/closest_point.hpp"
    -00079 #include "./gtx/color_cast.hpp"
    -00080 #include "./gtx/color_space.hpp"
    -00081 #include "./gtx/color_space_YCoCg.hpp"
    -00082 #include "./gtx/compatibility.hpp"
    -00083 #include "./gtx/component_wise.hpp"
    -00084 #include "./gtx/epsilon.hpp"
    -00085 #include "./gtx/euler_angles.hpp"
    -00086 #include "./gtx/extend.hpp"
    -00087 #include "./gtx/extented_min_max.hpp"
    -00088 #include "./gtx/fast_exponential.hpp"
    -00089 #include "./gtx/fast_square_root.hpp"
    -00090 #include "./gtx/fast_trigonometry.hpp"
    -00091 #include "./gtx/gradient_paint.hpp"
    -00092 #include "./gtx/handed_coordinate_space.hpp"
    -00093 #include "./gtx/inertia.hpp"
    -00094 #include "./gtx/int_10_10_10_2.hpp"
    -00095 #include "./gtx/integer.hpp"
    -00096 #include "./gtx/intersect.hpp"
    -00097 #include "./gtx/log_base.hpp"
    -00098 #include "./gtx/matrix_cross_product.hpp"
    -00099 #include "./gtx/matrix_interpolation.hpp"
    -00100 #include "./gtx/matrix_major_storage.hpp"
    -00101 #include "./gtx/matrix_operation.hpp"
    -00102 #include "./gtx/matrix_query.hpp"
    -00103 #include "./gtx/mixed_product.hpp"
    -00104 #include "./gtx/multiple.hpp"
    -00105 #include "./gtx/noise.hpp"
    -00106 #include "./gtx/norm.hpp"
    -00107 #include "./gtx/normal.hpp"
    -00108 #include "./gtx/normalize_dot.hpp"
    -00109 #include "./gtx/number_precision.hpp"
    -00110 #include "./gtx/ocl_type.hpp"
    -00111 #include "./gtx/optimum_pow.hpp"
    -00112 #include "./gtx/orthonormalize.hpp"
    -00113 #include "./gtx/perpendicular.hpp"
    -00114 #include "./gtx/polar_coordinates.hpp"
    -00115 #include "./gtx/projection.hpp"
    -00116 #include "./gtx/quaternion.hpp"
    -00117 #include "./gtx/random.hpp"
    -00118 #include "./gtx/raw_data.hpp"
    -00119 #include "./gtx/reciprocal.hpp"
    -00120 #include "./gtx/rotate_vector.hpp"
    -00121 #include "./gtx/spline.hpp"
    -00122 #include "./gtx/std_based_type.hpp"
    -00123 #include "./gtx/string_cast.hpp"
    -00124 #include "./gtx/transform.hpp"
    -00125 #include "./gtx/transform2.hpp"
    -00126 #include "./gtx/ulp.hpp"
    -00127 #include "./gtx/vec1.hpp"
    -00128 #include "./gtx/vector_access.hpp"
    -00129 #include "./gtx/vector_angle.hpp"
    -00130 #include "./gtx/vector_query.hpp"
    -00131 #include "./gtx/verbose_operator.hpp"
    -00132 #include "./gtx/wrap.hpp"
    -00133 
    -00134 #if(GLM_ARCH & GLM_ARCH_SSE2)
    -00135 #       include "./gtx/simd_vec4.hpp"
    -00136 #       include "./gtx/simd_mat4.hpp"
    -00137 #endif
    -00138 
    -00139 #include "./virtrev/xstream.hpp"
    -00140 
    -00141 //const float goldenRatio = 1.618033988749894848f;
    -00142 //const float pi = 3.141592653589793238f;
    -00143 
    -00144 #endif //glm_ext
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 
    +
    42 
    +
    43 
    +
    44 
    +
    45 
    +
    46 
    +
    47 
    +
    48 
    +
    49 
    +
    50 
    +
    51 
    +
    52 
    +
    53 
    +
    54 
    +
    55 
    +
    56 
    +
    57 
    +
    58 #ifndef glm_ext
    +
    59 #define glm_ext
    +
    60 
    +
    61 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED))
    +
    62 # define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED
    +
    63 # pragma message("GLM: All extensions included (not recommanded)")
    +
    64 #endif//GLM_MESSAGES
    +
    65 
    +
    66 #include "./gtc/constants.hpp"
    +
    67 #include "./gtc/epsilon.hpp"
    +
    68 #include "./gtc/half_float.hpp"
    +
    69 #include "./gtc/matrix_access.hpp"
    +
    70 #include "./gtc/matrix_integer.hpp"
    +
    71 #include "./gtc/matrix_inverse.hpp"
    + +
    73 #include "./gtc/noise.hpp"
    +
    74 #include "./gtc/quaternion.hpp"
    +
    75 #include "./gtc/random.hpp"
    +
    76 #include "./gtc/reciprocal.hpp"
    +
    77 #include "./gtc/swizzle.hpp"
    +
    78 #include "./gtc/type_precision.hpp"
    +
    79 #include "./gtc/type_ptr.hpp"
    +
    80 #include "./gtc/ulp.hpp"
    +
    81 
    + +
    83 #include "./gtx/bit.hpp"
    +
    84 #include "./gtx/closest_point.hpp"
    +
    85 #include "./gtx/color_cast.hpp"
    +
    86 #include "./gtx/color_space.hpp"
    + +
    88 #include "./gtx/compatibility.hpp"
    +
    89 #include "./gtx/component_wise.hpp"
    +
    90 #include "./gtx/euler_angles.hpp"
    +
    91 #include "./gtx/extend.hpp"
    + + + + +
    96 #include "./gtx/gradient_paint.hpp"
    + +
    98 #include "./gtx/inertia.hpp"
    +
    99 #include "./gtx/int_10_10_10_2.hpp"
    +
    100 #include "./gtx/integer.hpp"
    +
    101 #include "./gtx/intersect.hpp"
    +
    102 #include "./gtx/log_base.hpp"
    + + + + +
    107 #include "./gtx/matrix_query.hpp"
    +
    108 #include "./gtx/mixed_product.hpp"
    +
    109 #include "./gtx/multiple.hpp"
    +
    110 #include "./gtx/norm.hpp"
    +
    111 #include "./gtx/normal.hpp"
    +
    112 #include "./gtx/normalize_dot.hpp"
    + +
    114 #include "./gtx/ocl_type.hpp"
    +
    115 #include "./gtx/optimum_pow.hpp"
    +
    116 #include "./gtx/orthonormalize.hpp"
    +
    117 #include "./gtx/perpendicular.hpp"
    + +
    119 #include "./gtx/projection.hpp"
    +
    120 #include "./gtx/quaternion.hpp"
    +
    121 #include "./gtx/raw_data.hpp"
    +
    122 #include "./gtx/rotate_vector.hpp"
    +
    123 #include "./gtx/spline.hpp"
    +
    124 #include "./gtx/std_based_type.hpp"
    +
    125 #include "./gtx/string_cast.hpp"
    +
    126 #include "./gtx/transform.hpp"
    +
    127 #include "./gtx/transform2.hpp"
    +
    128 #include "./gtx/vec1.hpp"
    +
    129 #include "./gtx/vector_access.hpp"
    +
    130 #include "./gtx/vector_angle.hpp"
    +
    131 #include "./gtx/vector_query.hpp"
    + +
    133 #include "./gtx/wrap.hpp"
    +
    134 
    +
    135 #if(GLM_ARCH & GLM_ARCH_SSE2)
    +
    136 # include "./gtx/simd_vec4.hpp"
    +
    137 # include "./gtx/simd_mat4.hpp"
    +
    138 #endif
    +
    139 
    +
    140 #include "./virtrev/xstream.hpp"
    +
    141 
    +
    142 //const float goldenRatio = 1.618033988749894848f;
    +
    143 //const float pi = 3.141592653589793238f;
    +
    144 
    +
    145 #endif //glm_ext
    +
    + - diff --git a/doc/api/a00021.html b/doc/api/a00021.html index 446a15ff..d3b7fdbb 100644 --- a/doc/api/a00021.html +++ b/doc/api/a00021.html @@ -2,42 +2,31 @@ - + extend.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,41 +35,44 @@
  • File List
  • + +
    extend.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - + + +

    +

    Functions

    template<typename genType >
    genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
    template<typename genType >
    genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_extend: Position extending

    -
    Date:
    2006-01-07 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_extend

    +
    Date
    2006-01-07 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file extend.hpp.

    -
    - - + + - diff --git a/doc/api/a00021_source.html b/doc/api/a00021_source.html index c5be2e85..0789ab05 100644 --- a/doc/api/a00021_source.html +++ b/doc/api/a00021_source.html @@ -2,42 +2,31 @@ - + extend.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,81 +35,83 @@
  • File List
  • + +
    extend.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_extend
    -00039 #define GLM_GTX_extend GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_extend extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename genType> 
    -00056         genType extend(
    -00057                 genType const & Origin, 
    -00058                 genType const & Source, 
    -00059                 typename genType::value_type const Length);
    -00060 
    -00062 }//namespace glm
    -00063 
    -00064 #include "extend.inl"
    -00065 
    -00066 #endif//GLM_GTX_extend
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_extend
    +
    39 #define GLM_GTX_extend GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_extend extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename genType>
    +
    56  genType extend(
    +
    57  genType const & Origin,
    +
    58  genType const & Source,
    +
    59  typename genType::value_type const Length);
    +
    60 
    +
    62 }//namespace glm
    +
    63 
    +
    64 #include "extend.inl"
    +
    65 
    +
    66 #endif//GLM_GTX_extend
    +
    + - diff --git a/doc/api/a00022.html b/doc/api/a00022.html index f8dfba18..ef6a80b3 100644 --- a/doc/api/a00022.html +++ b/doc/api/a00022.html @@ -2,42 +2,31 @@ - + extented_min_max.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,65 +35,79 @@
  • File List
  • + +
    extented_min_max.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    max (T const &x, T const &y, T const &z)
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z)
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
    template<typename T >
    max (T const &x, T const &y, T const &z, T const &w)
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z, typename C< T >::value_type const &w)
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
    template<typename T >
    min (T const &x, T const &y, T const &z)
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z)
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
    template<typename T >
    min (T const &x, T const &y, T const &z, T const &w)
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z, typename C< T >::value_type const &w)
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
    template<typename T >
    max (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    max (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z, typename C< T >::value_type const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename T >
    min (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    min (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z, typename C< T >::value_type const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_extented_min_max: Extended min max

    -
    Date:
    2007-03-14 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_extented_min_max

    +
    Date
    2007-03-14 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    gtx_half_float (dependence)

    Definition in file extented_min_max.hpp.

    -
    - - + + - diff --git a/doc/api/a00022_source.html b/doc/api/a00022_source.html index 8beb4a4d..723dc058 100644 --- a/doc/api/a00022_source.html +++ b/doc/api/a00022_source.html @@ -2,42 +2,31 @@ - + extented_min_max.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,187 +35,189 @@
  • File List
  • + +
    extented_min_max.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_extented_min_max
    -00040 #define GLM_GTX_extented_min_max GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtc/half_float.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_extented_min_max extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename T>
    -00058         T min(
    -00059                 T const & x, 
    -00060                 T const & y, 
    -00061                 T const & z);
    -00062 
    -00065         template 
    -00066         <
    -00067                 typename T, 
    -00068                 template <typename> class C
    -00069         >
    -00070         C<T> min(
    -00071                 C<T> const & x, 
    -00072                 typename C<T>::value_type const & y, 
    -00073                 typename C<T>::value_type const & z);
    -00074 
    -00077         template 
    -00078         <
    -00079                 typename T, 
    -00080                 template <typename> class C
    -00081         >
    -00082         C<T> min(
    -00083                 C<T> const & x, 
    -00084                 C<T> const & y, 
    -00085                 C<T> const & z);
    -00086 
    -00089         template <typename T>
    -00090         T min(
    -00091                 T const & x, 
    -00092                 T const & y, 
    -00093                 T const & z, 
    -00094                 T const & w);
    -00095 
    -00098         template 
    -00099         <
    -00100                 typename T, 
    -00101                 template <typename> class C
    -00102         >
    -00103         C<T> min(
    -00104                 C<T> const & x, 
    -00105                 typename C<T>::value_type const & y, 
    -00106                 typename C<T>::value_type const & z, 
    -00107                 typename C<T>::value_type const & w);
    -00108 
    -00111         template 
    -00112         <
    -00113                 typename T, 
    -00114                 template <typename> class C
    -00115         >
    -00116         C<T> min(
    -00117                 C<T> const & x, 
    -00118                 C<T> const & y, 
    -00119                 C<T> const & z,
    -00120                 C<T> const & w);
    -00121 
    -00124         template <typename T>
    -00125         T max(
    -00126                 T const & x, 
    -00127                 T const & y, 
    -00128                 T const & z);
    -00129 
    -00132         template 
    -00133         <
    -00134                 typename T, 
    -00135                 template <typename> class C
    -00136         >
    -00137         C<T> max(
    -00138                 C<T> const & x, 
    -00139                 typename C<T>::value_type const & y, 
    -00140                 typename C<T>::value_type const & z);
    -00141 
    -00144         template 
    -00145         <
    -00146                 typename T, 
    -00147                 template <typename> class C
    -00148         >
    -00149         C<T> max(
    -00150                 C<T> const & x, 
    -00151                 C<T> const & y, 
    -00152                 C<T> const & z);
    -00153 
    -00156         template <typename T>
    -00157         T max(
    -00158                 T const & x, 
    -00159                 T const & y, 
    -00160                 T const & z, 
    -00161                 T const & w);
    -00162 
    -00165         template 
    -00166         <
    -00167                 typename T, 
    -00168                 template <typename> class C
    -00169         >
    -00170         C<T> max(
    -00171                 C<T> const & x, 
    -00172                 typename C<T>::value_type const & y, 
    -00173                 typename C<T>::value_type const & z, 
    -00174                 typename C<T>::value_type const & w);
    -00175 
    -00178         template 
    -00179         <
    -00180                 typename T, 
    -00181                 template <typename> class C
    -00182         >
    -00183         C<T> max(
    -00184                 C<T> const & x, 
    -00185                 C<T> const & y, 
    -00186                 C<T> const & z, 
    -00187                 C<T> const & w);
    -00188 
    -00190 }//namespace glm
    -00191 
    -00192 #include "extented_min_max.inl"
    -00193 
    -00194 #endif//GLM_GTX_extented_min_max
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_extented_min_max
    +
    40 #define GLM_GTX_extented_min_max GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/half_float.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_extented_min_max extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename T>
    +
    58  T min(
    +
    59  T const & x,
    +
    60  T const & y,
    +
    61  T const & z);
    +
    62 
    +
    65  template
    +
    66  <
    +
    67  typename T,
    +
    68  template <typename> class C
    +
    69  >
    +
    70  C<T> min(
    +
    71  C<T> const & x,
    +
    72  typename C<T>::value_type const & y,
    +
    73  typename C<T>::value_type const & z);
    +
    74 
    +
    77  template
    +
    78  <
    +
    79  typename T,
    +
    80  template <typename> class C
    +
    81  >
    +
    82  C<T> min(
    +
    83  C<T> const & x,
    +
    84  C<T> const & y,
    +
    85  C<T> const & z);
    +
    86 
    +
    89  template <typename T>
    +
    90  T min(
    +
    91  T const & x,
    +
    92  T const & y,
    +
    93  T const & z,
    +
    94  T const & w);
    +
    95 
    +
    98  template
    +
    99  <
    +
    100  typename T,
    +
    101  template <typename> class C
    +
    102  >
    +
    103  C<T> min(
    +
    104  C<T> const & x,
    +
    105  typename C<T>::value_type const & y,
    +
    106  typename C<T>::value_type const & z,
    +
    107  typename C<T>::value_type const & w);
    +
    108 
    +
    111  template
    +
    112  <
    +
    113  typename T,
    +
    114  template <typename> class C
    +
    115  >
    +
    116  C<T> min(
    +
    117  C<T> const & x,
    +
    118  C<T> const & y,
    +
    119  C<T> const & z,
    +
    120  C<T> const & w);
    +
    121 
    +
    124  template <typename T>
    +
    125  T max(
    +
    126  T const & x,
    +
    127  T const & y,
    +
    128  T const & z);
    +
    129 
    +
    132  template
    +
    133  <
    +
    134  typename T,
    +
    135  template <typename> class C
    +
    136  >
    +
    137  C<T> max(
    +
    138  C<T> const & x,
    +
    139  typename C<T>::value_type const & y,
    +
    140  typename C<T>::value_type const & z);
    +
    141 
    +
    144  template
    +
    145  <
    +
    146  typename T,
    +
    147  template <typename> class C
    +
    148  >
    +
    149  C<T> max(
    +
    150  C<T> const & x,
    +
    151  C<T> const & y,
    +
    152  C<T> const & z);
    +
    153 
    +
    156  template <typename T>
    +
    157  T max(
    +
    158  T const & x,
    +
    159  T const & y,
    +
    160  T const & z,
    +
    161  T const & w);
    +
    162 
    +
    165  template
    +
    166  <
    +
    167  typename T,
    +
    168  template <typename> class C
    +
    169  >
    +
    170  C<T> max(
    +
    171  C<T> const & x,
    +
    172  typename C<T>::value_type const & y,
    +
    173  typename C<T>::value_type const & z,
    +
    174  typename C<T>::value_type const & w);
    +
    175 
    +
    178  template
    +
    179  <
    +
    180  typename T,
    +
    181  template <typename> class C
    +
    182  >
    +
    183  C<T> max(
    +
    184  C<T> const & x,
    +
    185  C<T> const & y,
    +
    186  C<T> const & z,
    +
    187  C<T> const & w);
    +
    188 
    +
    190 }//namespace glm
    +
    191 
    +
    192 #include "extented_min_max.inl"
    +
    193 
    +
    194 #endif//GLM_GTX_extented_min_max
    +
    + - diff --git a/doc/api/a00023.html b/doc/api/a00023.html index bbd81932..7fbd6509 100644 --- a/doc/api/a00023.html +++ b/doc/api/a00023.html @@ -2,42 +2,31 @@ - + fast_exponential.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,55 +35,64 @@
  • File List
  • + +
    fast_exponential.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    fastExp (const T &x)
    template<typename T >
    fastExp2 (const T &x)
    template<typename T >
    fastLn (const T &x)
    template<typename T >
    fastLog (const T &x)
    template<typename T >
    fastLog2 (const T &x)
    template<typename genType >
    genType fastPow (genType const &x, genType const &y)
    template<typename genTypeT , typename genTypeU >
    genTypeT fastPow (genTypeT const &x, genTypeU const &y)
    template<typename T >
    fastExp (const T &x)
     
    template<typename T >
    fastExp2 (const T &x)
     
    template<typename T >
    fastLn (const T &x)
     
    template<typename T >
    fastLog (const T &x)
     
    template<typename T >
    fastLog2 (const T &x)
     
    template<typename genType >
    genType fastPow (genType const &x, genType const &y)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT fastPow (genTypeT const &x, genTypeU const &y)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_fast_exponential: Fast exponentiation functions

    -
    Date:
    2006-01-09 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_fast_exponential

    +
    Date
    2006-01-09 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    gtx_half_float (dependence)

    Definition in file fast_exponential.hpp.

    -
    - - + + - diff --git a/doc/api/a00023_source.html b/doc/api/a00023_source.html index cdf97caa..95589994 100644 --- a/doc/api/a00023_source.html +++ b/doc/api/a00023_source.html @@ -2,42 +2,31 @@ - + fast_exponential.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,102 +35,104 @@
  • File List
  • + +
    fast_exponential.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_fast_exponential
    -00040 #define GLM_GTX_fast_exponential GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtc/half_float.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_fast_exponential extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename genType> 
    -00058         genType fastPow(
    -00059                 genType const & x, 
    -00060                 genType const & y);
    -00061 
    -00064         template <typename genTypeT, typename genTypeU> 
    -00065         genTypeT fastPow(
    -00066                 genTypeT const & x, 
    -00067                 genTypeU const & y);
    -00068                 
    -00071         template <typename T> 
    -00072         T fastExp(const T& x);
    -00073                 
    -00076         template <typename T> 
    -00077         T fastLog(const T& x);
    -00078 
    -00081         template <typename T> 
    -00082         T fastExp2(const T& x);
    -00083                 
    -00086         template <typename T> 
    -00087         T fastLog2(const T& x);
    -00088 
    -00091         template <typename T> 
    -00092         T fastLn(const T& x);
    -00093 
    -00095 }//namespace glm
    -00096 
    -00097 #include "fast_exponential.inl"
    -00098 
    -00099 #endif//GLM_GTX_fast_exponential
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_fast_exponential
    +
    40 #define GLM_GTX_fast_exponential GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/half_float.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_fast_exponential extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename genType>
    +
    58  genType fastPow(
    +
    59  genType const & x,
    +
    60  genType const & y);
    +
    61 
    +
    64  template <typename genTypeT, typename genTypeU>
    +
    65  genTypeT fastPow(
    +
    66  genTypeT const & x,
    +
    67  genTypeU const & y);
    +
    68 
    +
    71  template <typename T>
    +
    72  T fastExp(const T& x);
    +
    73 
    +
    76  template <typename T>
    +
    77  T fastLog(const T& x);
    +
    78 
    +
    81  template <typename T>
    +
    82  T fastExp2(const T& x);
    +
    83 
    +
    86  template <typename T>
    +
    87  T fastLog2(const T& x);
    +
    88 
    +
    91  template <typename T>
    +
    92  T fastLn(const T& x);
    +
    93 
    +
    95 }//namespace glm
    +
    96 
    +
    97 #include "fast_exponential.inl"
    +
    98 
    +
    99 #endif//GLM_GTX_fast_exponential
    +
    + - diff --git a/doc/api/a00024.html b/doc/api/a00024.html index 6bd281ee..2ac066e4 100644 --- a/doc/api/a00024.html +++ b/doc/api/a00024.html @@ -2,42 +2,31 @@ - + fast_square_root.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,49 +35,56 @@
  • File List
  • + +
    fast_square_root.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType::value_type fastDistance (genType const &x, genType const &y)
    template<typename genType >
    genType fastInverseSqrt (genType const &x)
    template<typename genType >
    genType::value_type fastLength (genType const &x)
    template<typename genType >
    genType fastNormalize (genType const &x)
    template<typename genType >
    genType fastSqrt (genType const &x)
    template<typename genType >
    genType::value_type fastDistance (genType const &x, genType const &y)
     
    template<typename genType >
    genType fastInverseSqrt (genType const &x)
     
    template<typename genType >
    genType::value_type fastLength (genType const &x)
     
    template<typename genType >
    genType fastNormalize (genType const &x)
     
    template<typename genType >
    genType fastSqrt (genType const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_fast_square_root: Fast square root functions

    -
    Date:
    2006-01-04 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_fast_square_root

    +
    Date
    2006-01-04 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file fast_square_root.hpp.

    -
    - - + + - diff --git a/doc/api/a00024_source.html b/doc/api/a00024_source.html index 388bcd16..e27d73d7 100644 --- a/doc/api/a00024_source.html +++ b/doc/api/a00024_source.html @@ -2,42 +2,31 @@ - + fast_square_root.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,92 +35,94 @@
  • File List
  • + +
    fast_square_root.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 #ifndef GLM_GTX_fast_square_root
    -00041 #define GLM_GTX_fast_square_root GLM_VERSION
    -00042 
    -00043 // Dependency:
    -00044 #include "../glm.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_fast_square_root extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename genType> 
    -00058         genType fastSqrt(genType const & x);
    -00059 
    -00062         template <typename genType> 
    -00063         genType fastInverseSqrt(genType const & x);
    -00064                 
    -00067         template <typename genType> 
    -00068         typename genType::value_type fastLength(genType const & x);
    -00069 
    -00072         template <typename genType> 
    -00073         typename genType::value_type fastDistance(genType const & x, genType const & y);
    -00074 
    -00077         template <typename genType> 
    -00078         genType fastNormalize(genType const & x);
    -00079 
    -00081 }// namespace glm
    -00082 
    -00083 #include "fast_square_root.inl"
    -00084 
    -00085 #endif//GLM_GTX_fast_square_root
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 #ifndef GLM_GTX_fast_square_root
    +
    41 #define GLM_GTX_fast_square_root GLM_VERSION
    +
    42 
    +
    43 // Dependency:
    +
    44 #include "../glm.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_fast_square_root extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename genType>
    +
    58  genType fastSqrt(genType const & x);
    +
    59 
    +
    62  template <typename genType>
    +
    63  genType fastInverseSqrt(genType const & x);
    +
    64 
    +
    67  template <typename genType>
    +
    68  typename genType::value_type fastLength(genType const & x);
    +
    69 
    +
    72  template <typename genType>
    +
    73  typename genType::value_type fastDistance(genType const & x, genType const & y);
    +
    74 
    +
    77  template <typename genType>
    +
    78  genType fastNormalize(genType const & x);
    +
    79 
    +
    81 }// namespace glm
    +
    82 
    +
    83 #include "fast_square_root.inl"
    +
    84 
    +
    85 #endif//GLM_GTX_fast_square_root
    +
    + - diff --git a/doc/api/a00025.html b/doc/api/a00025.html index 502b92c6..71f4ec04 100644 --- a/doc/api/a00025.html +++ b/doc/api/a00025.html @@ -2,42 +2,31 @@ - + fast_trigonometry.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,53 +35,62 @@
  • File List
  • + +
    fast_trigonometry.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    fastAcos (const T &angle)
    template<typename T >
    fastAsin (const T &angle)
    template<typename T >
    fastAtan (const T &y, const T &x)
    template<typename T >
    fastAtan (const T &angle)
    template<typename T >
    fastCos (const T &angle)
    template<typename T >
    fastSin (const T &angle)
    template<typename T >
    fastTan (const T &angle)
    template<typename T >
    fastAcos (const T &angle)
     
    template<typename T >
    fastAsin (const T &angle)
     
    template<typename T >
    fastAtan (const T &y, const T &x)
     
    template<typename T >
    fastAtan (const T &angle)
     
    template<typename T >
    fastCos (const T &angle)
     
    template<typename T >
    fastSin (const T &angle)
     
    template<typename T >
    fastTan (const T &angle)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_fast_trigonometry: Fast trigonometric functions

    -
    Date:
    2006-01-08 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_fast_trigonometry

    +
    Date
    2006-01-08 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file fast_trigonometry.hpp.

    -
    - - + + - diff --git a/doc/api/a00025_source.html b/doc/api/a00025_source.html index 8ae18def..ab535981 100644 --- a/doc/api/a00025_source.html +++ b/doc/api/a00025_source.html @@ -2,42 +2,31 @@ - + fast_trigonometry.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,96 +35,98 @@
  • File List
  • + +
    fast_trigonometry.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_fast_trigonometry
    -00039 #define GLM_GTX_fast_trigonometry GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_fast_trigonometry extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00056     template <typename T> 
    -00057         T fastSin(const T& angle);
    -00058 
    -00062         template <typename T> 
    -00063         T fastCos(const T& angle);
    -00064 
    -00068         template <typename T> 
    -00069         T fastTan(const T& angle);
    -00070 
    -00074         template <typename T> 
    -00075         T fastAsin(const T& angle);
    -00076 
    -00080     template <typename T> 
    -00081         T fastAcos(const T& angle);
    -00082 
    -00086         template <typename T> 
    -00087         T fastAtan(const T& y, const T& x);
    -00088 
    -00092     template <typename T> 
    -00093         T fastAtan(const T& angle);
    -00094 
    -00096 }//namespace glm
    -00097 
    -00098 #include "fast_trigonometry.inl"
    -00099 
    -00100 #endif//GLM_GTX_fast_trigonometry
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_fast_trigonometry
    +
    39 #define GLM_GTX_fast_trigonometry GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_fast_trigonometry extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    56  template <typename T>
    +
    57  T fastSin(const T& angle);
    +
    58 
    +
    62  template <typename T>
    +
    63  T fastCos(const T& angle);
    +
    64 
    +
    68  template <typename T>
    +
    69  T fastTan(const T& angle);
    +
    70 
    +
    74  template <typename T>
    +
    75  T fastAsin(const T& angle);
    +
    76 
    +
    80  template <typename T>
    +
    81  T fastAcos(const T& angle);
    +
    82 
    +
    86  template <typename T>
    +
    87  T fastAtan(const T& y, const T& x);
    +
    88 
    +
    92  template <typename T>
    +
    93  T fastAtan(const T& angle);
    +
    94 
    +
    96 }//namespace glm
    +
    97 
    +
    98 #include "fast_trigonometry.inl"
    +
    99 
    +
    100 #endif//GLM_GTX_fast_trigonometry
    +
    + - diff --git a/doc/api/a00026.html b/doc/api/a00026.html index 943f046a..8d559c8d 100644 --- a/doc/api/a00026.html +++ b/doc/api/a00026.html @@ -2,42 +2,31 @@ - + func_common.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,91 +35,119 @@
  • File List
  • + +
    func_common.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType abs (genType const &x)
    template<typename genType >
    genType ceil (genType const &x)
    template<typename genType >
    genType clamp (genType const &x, genType const &minVal, genType const &maxVal)
    template<typename genType , typename genIType >
    genIType floatBitsToInt (genType const &value)
    template<typename genType , typename genUType >
    genUType floatBitsToUint (genType const &value)
    template<typename genType >
    genType floor (genType const &x)
    template<typename genType >
    genType fma (genType const &a, genType const &b, genType const &c)
    template<typename genType >
    genType fract (genType const &x)
    template<typename genType , typename genIType >
    genType frexp (genType const &x, genIType &exp)
    template<typename genType , typename genIType >
    genType intBitsToFloat (genIType const &value)
    template<typename genType >
    genType::bool_type isinf (genType const &x)
    template<typename genType >
    genType::bool_type isnan (genType const &x)
    template<typename genType , typename genIType >
    genType ldexp (genType const &x, genIType const &exp)
    template<typename genType >
    genType max (genType const &x, genType const &y)
    template<typename genType >
    genType min (genType const &x, genType const &y)
    template<typename genTypeT , typename genTypeU >
    genTypeT mix (genTypeT const &x, genTypeT const &y, genTypeU const &a)
    template<typename genType >
    genType mod (genType const &x, genType const &y)
    template<typename genType >
    genType mod (genType const &x, typename genType::value_type const &y)
    template<typename genType >
    genType modf (genType const &x, genType &i)
    template<typename genType >
    genType round (genType const &x)
    template<typename genType >
    genType roundEven (genType const &x)
    template<typename genType >
    genType sign (genType const &x)
    template<typename genType >
    genType smoothstep (genType const &edge0, genType const &edge1, genType const &x)
    template<typename genType >
    genType step (genType const &edge, genType const &x)
    template<typename genType >
    genType trunc (genType const &x)
    template<typename genType , typename genUType >
    genType uintBitsToFloat (genUType const &value)
    template<typename genType >
    genType abs (genType const &x)
     
    template<typename genType >
    genType ceil (genType const &x)
     
    template<typename genType >
    genType clamp (genType const &x, genType const &minVal, genType const &maxVal)
     
    template<typename genType , typename genIType >
    genIType floatBitsToInt (genType const &value)
     
    template<typename genType , typename genUType >
    genUType floatBitsToUint (genType const &value)
     
    template<typename genType >
    genType floor (genType const &x)
     
    template<typename genType >
    genType fma (genType const &a, genType const &b, genType const &c)
     
    template<typename genType >
    genType fract (genType const &x)
     
    template<typename genType , typename genIType >
    genType frexp (genType const &x, genIType &exp)
     
    template<typename genType , typename genIType >
    genType intBitsToFloat (genIType const &value)
     
    template<typename genType >
    genType::bool_type isinf (genType const &x)
     
    template<typename genType >
    genType::bool_type isnan (genType const &x)
     
    template<typename genType , typename genIType >
    genType ldexp (genType const &x, genIType const &exp)
     
    template<typename genType >
    genType max (genType const &x, genType const &y)
     
    template<typename genType >
    genType min (genType const &x, genType const &y)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT mix (genTypeT const &x, genTypeT const &y, genTypeU const &a)
     
    template<typename genType >
    genType mod (genType const &x, genType const &y)
     
    template<typename genType >
    genType mod (genType const &x, typename genType::value_type const &y)
     
    template<typename genType >
    genType modf (genType const &x, genType &i)
     
    template<typename genType >
    genType round (genType const &x)
     
    template<typename genType >
    genType roundEven (genType const &x)
     
    template<typename genType >
    genType sign (genType const &x)
     
    template<typename genType >
    genType smoothstep (genType const &edge0, genType const &edge1, genType const &x)
     
    template<typename genType >
    genType step (genType const &edge, genType const &x)
     
    template<typename genType >
    genType trunc (genType const &x)
     
    template<typename genType , typename genUType >
    genType uintBitsToFloat (genUType const &value)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-03-08 / 2010-01-26
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.3 Common Functions
    +

    GLM Core

    +
    Date
    2008-03-08 / 2010-01-26
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.3 Common Functions

    Definition in file func_common.hpp.

    -
    - - + + - diff --git a/doc/api/a00026_source.html b/doc/api/a00026_source.html index 7cfaf113..eb8494df 100644 --- a/doc/api/a00026_source.html +++ b/doc/api/a00026_source.html @@ -2,42 +2,31 @@ - + func_common.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,191 +35,193 @@
  • File List
  • + +
    func_common.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 #ifndef GLM_CORE_func_common
    -00037 #define GLM_CORE_func_common GLM_VERSION
    -00038 
    -00039 #include "_fixes.hpp"
    -00040 
    -00041 namespace glm
    -00042 {
    -00045 
    -00052     template <typename genType> 
    -00053         genType abs(genType const & x);
    -00054 
    -00061         template <typename genType> 
    -00062         genType sign(genType const & x);
    -00063 
    -00070         template <typename genType> 
    -00071         genType floor(genType const & x);
    -00072 
    -00080         template <typename genType> 
    -00081         genType trunc(genType const & x);
    -00082 
    -00093         template <typename genType> 
    -00094         genType round(genType const & x);
    -00095 
    -00105         template <typename genType> 
    -00106         genType roundEven(genType const & x);
    -00107 
    -00115     template <typename genType> 
    -00116         genType ceil(genType const & x);
    -00117 
    -00124     template <typename genType> 
    -00125         genType fract(genType const & x);
    -00126 
    -00134     template <typename genType> 
    -00135         genType mod(
    -00136                 genType const & x, 
    -00137                 genType const & y);
    -00138 
    -00146     template <typename genType> 
    -00147         genType mod(
    -00148                 genType const & x, 
    -00149                 typename genType::value_type const & y);
    -00150 
    -00160         template <typename genType> 
    -00161         genType modf(
    -00162                 genType const & x, 
    -00163                 genType & i);
    -00164 
    -00171         template <typename genType> 
    -00172         genType min(
    -00173                 genType const & x, 
    -00174                 genType const & y);
    -00175 
    -00176         template <typename genType> 
    -00177         genType min(
    -00178                 genType const & x, 
    -00179                 typename genType::value_type const & y);
    -00180 
    -00187         template <typename genType> 
    -00188         genType max(
    -00189                 genType const & x, 
    -00190                 genType const & y);
    -00191 
    -00192         template <typename genType> 
    -00193         genType max(
    -00194                 genType const & x, 
    -00195                 typename genType::value_type const & y);
    -00196 
    -00204         template <typename genType> 
    -00205         genType clamp(
    -00206                 genType const & x, 
    -00207                 genType const & minVal, 
    -00208                 genType const & maxVal); 
    -00209 
    -00210         template <typename genType> 
    -00211         genType clamp(
    -00212                 genType const & x, 
    -00213                 typename genType::value_type const & minVal, 
    -00214                 typename genType::value_type const & maxVal); 
    -00215 
    -00258         template <typename genTypeT, typename genTypeU> 
    -00259         genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a);
    -00260 
    -00265         template <typename genType> 
    -00266         genType step(
    -00267                 genType const & edge, 
    -00268                 genType const & x);
    -00269 
    -00270         template <typename genType> 
    -00271         genType step(
    -00272                 typename genType::value_type const & edge, 
    -00273                 genType const & x);
    -00274 
    -00289         template <typename genType> 
    -00290         genType smoothstep(
    -00291                 genType const & edge0, 
    -00292                 genType const & edge1, 
    -00293                 genType const & x);
    -00294 
    -00295         template <typename genType> 
    -00296         genType smoothstep(
    -00297                 typename genType::value_type const & edge0, 
    -00298                 typename genType::value_type const & edge1, 
    -00299                 genType const & x);
    -00300 
    -00311         template <typename genType> 
    -00312         typename genType::bool_type isnan(genType const & x);
    -00313 
    -00324         template <typename genType> 
    -00325         typename genType::bool_type isinf(genType const & x);
    -00326 
    -00336         template <typename genType, typename genIType>
    -00337         genIType floatBitsToInt(genType const & value);
    -00338 
    -00348         template <typename genType, typename genUType>
    -00349         genUType floatBitsToUint(genType const & value);
    -00350 
    -00364         template <typename genType, typename genIType>
    -00365         genType intBitsToFloat(genIType const & value);
    -00366         
    -00380     template <typename genType, typename genUType>
    -00381     genType uintBitsToFloat(genUType const & value);
    -00382         
    -00389         template <typename genType>
    -00390         genType fma(genType const & a, genType const & b, genType const & c);
    -00391 
    -00406         template <typename genType, typename genIType>
    -00407         genType frexp(genType const & x, genIType & exp);
    -00408 
    -00420         template <typename genType, typename genIType>
    -00421         genType ldexp(genType const & x, genIType const & exp);
    -00422 
    -00424 }//namespace glm
    -00425 
    -00426 #include "func_common.inl"
    -00427 
    -00428 #endif//GLM_CORE_func_common
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 #ifndef GLM_CORE_func_common
    +
    37 #define GLM_CORE_func_common GLM_VERSION
    +
    38 
    +
    39 #include "_fixes.hpp"
    +
    40 
    +
    41 namespace glm
    +
    42 {
    +
    45 
    +
    52  template <typename genType>
    +
    53  genType abs(genType const & x);
    +
    54 
    +
    61  template <typename genType>
    +
    62  genType sign(genType const & x);
    +
    63 
    +
    70  template <typename genType>
    +
    71  genType floor(genType const & x);
    +
    72 
    +
    80  template <typename genType>
    +
    81  genType trunc(genType const & x);
    +
    82 
    +
    93  template <typename genType>
    +
    94  genType round(genType const & x);
    +
    95 
    +
    105  template <typename genType>
    +
    106  genType roundEven(genType const & x);
    +
    107 
    +
    115  template <typename genType>
    +
    116  genType ceil(genType const & x);
    +
    117 
    +
    124  template <typename genType>
    +
    125  genType fract(genType const & x);
    +
    126 
    +
    134  template <typename genType>
    +
    135  genType mod(
    +
    136  genType const & x,
    +
    137  genType const & y);
    +
    138 
    +
    146  template <typename genType>
    +
    147  genType mod(
    +
    148  genType const & x,
    +
    149  typename genType::value_type const & y);
    +
    150 
    +
    160  template <typename genType>
    +
    161  genType modf(
    +
    162  genType const & x,
    +
    163  genType & i);
    +
    164 
    +
    171  template <typename genType>
    +
    172  genType min(
    +
    173  genType const & x,
    +
    174  genType const & y);
    +
    175 
    +
    176  template <typename genType>
    +
    177  genType min(
    +
    178  genType const & x,
    +
    179  typename genType::value_type const & y);
    +
    180 
    +
    187  template <typename genType>
    +
    188  genType max(
    +
    189  genType const & x,
    +
    190  genType const & y);
    +
    191 
    +
    192  template <typename genType>
    +
    193  genType max(
    +
    194  genType const & x,
    +
    195  typename genType::value_type const & y);
    +
    196 
    +
    204  template <typename genType>
    +
    205  genType clamp(
    +
    206  genType const & x,
    +
    207  genType const & minVal,
    +
    208  genType const & maxVal);
    +
    209 
    +
    210  template <typename genType>
    +
    211  genType clamp(
    +
    212  genType const & x,
    +
    213  typename genType::value_type const & minVal,
    +
    214  typename genType::value_type const & maxVal);
    +
    215 
    +
    258  template <typename genTypeT, typename genTypeU>
    +
    259  genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a);
    +
    260 
    +
    265  template <typename genType>
    +
    266  genType step(
    +
    267  genType const & edge,
    +
    268  genType const & x);
    +
    269 
    +
    270  template <typename genType>
    +
    271  genType step(
    +
    272  typename genType::value_type const & edge,
    +
    273  genType const & x);
    +
    274 
    +
    289  template <typename genType>
    +
    290  genType smoothstep(
    +
    291  genType const & edge0,
    +
    292  genType const & edge1,
    +
    293  genType const & x);
    +
    294 
    +
    295  template <typename genType>
    +
    296  genType smoothstep(
    +
    297  typename genType::value_type const & edge0,
    +
    298  typename genType::value_type const & edge1,
    +
    299  genType const & x);
    +
    300 
    +
    313  template <typename genType>
    +
    314  typename genType::bool_type isnan(genType const & x);
    +
    315 
    +
    326  template <typename genType>
    +
    327  typename genType::bool_type isinf(genType const & x);
    +
    328 
    +
    338  template <typename genType, typename genIType>
    +
    339  genIType floatBitsToInt(genType const & value);
    +
    340 
    +
    350  template <typename genType, typename genUType>
    +
    351  genUType floatBitsToUint(genType const & value);
    +
    352 
    +
    366  template <typename genType, typename genIType>
    +
    367  genType intBitsToFloat(genIType const & value);
    +
    368 
    +
    382  template <typename genType, typename genUType>
    +
    383  genType uintBitsToFloat(genUType const & value);
    +
    384 
    +
    391  template <typename genType>
    +
    392  genType fma(genType const & a, genType const & b, genType const & c);
    +
    393 
    +
    408  template <typename genType, typename genIType>
    +
    409  genType frexp(genType const & x, genIType & exp);
    +
    410 
    +
    422  template <typename genType, typename genIType>
    +
    423  genType ldexp(genType const & x, genIType const & exp);
    +
    424 
    +
    426 }//namespace glm
    +
    427 
    +
    428 #include "func_common.inl"
    +
    429 
    +
    430 #endif//GLM_CORE_func_common
    +
    + - diff --git a/doc/api/a00027.html b/doc/api/a00027.html index 3749d0fe..3bfbe38c 100644 --- a/doc/api/a00027.html +++ b/doc/api/a00027.html @@ -2,42 +2,31 @@ - + func_exponential.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,53 +35,62 @@
  • File List
  • + +
    func_exponential.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType exp (genType const &x)
    template<typename genType >
    genType exp2 (genType const &x)
    template<typename genType >
    genType inversesqrt (genType const &x)
    template<typename genType >
    genType log (genType const &x)
    template<typename genType >
    genType log2 (genType const &x)
    template<typename genType >
    genType pow (genType const &x, genType const &y)
    template<typename genType >
    genType sqrt (genType const &x)
    template<typename genType >
    genType exp (genType const &x)
     
    template<typename genType >
    genType exp2 (genType const &x)
     
    template<typename genType >
    genType inversesqrt (genType const &x)
     
    template<typename genType >
    genType log (genType const &x)
     
    template<typename genType >
    genType log2 (genType const &x)
     
    template<typename genType >
    genType pow (genType const &x, genType const &y)
     
    template<typename genType >
    genType sqrt (genType const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-08 / 2011-06-14
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.2 Exponential Functions
    +

    GLM Core

    +
    Date
    2008-08-08 / 2011-06-14
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.2 Exponential Functions

    Definition in file func_exponential.hpp.

    -
    - - + + - diff --git a/doc/api/a00027_source.html b/doc/api/a00027_source.html index b9f45f99..e13827a0 100644 --- a/doc/api/a00027_source.html +++ b/doc/api/a00027_source.html @@ -2,42 +2,31 @@ - + func_exponential.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,87 +35,89 @@
  • File List
  • + +
    func_exponential.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 #ifndef glm_core_func_exponential
    -00037 #define glm_core_func_exponential GLM_VERSION
    -00038 
    -00039 namespace glm
    -00040 {
    -00043 
    -00052         template <typename genType> 
    -00053         genType pow(genType const & x, genType const & y);
    -00054 
    -00062         template <typename genType> 
    -00063         genType exp(genType const & x);
    -00064 
    -00074         template <typename genType> 
    -00075         genType log(genType const & x);
    -00076 
    -00084         template <typename genType> 
    -00085         genType exp2(genType const & x);
    -00086 
    -00095         template <typename genType> 
    -00096         genType log2(genType const & x);
    -00097 
    -00105         template <typename genType> 
    -00106         genType sqrt(genType const & x);
    -00107     
    -00115         template <typename genType> 
    -00116         genType inversesqrt(genType const & x);
    -00117 
    -00119 }//namespace glm
    -00120 
    -00121 #include "func_exponential.inl"
    -00122 
    -00123 #endif//glm_core_func_exponential
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 #ifndef glm_core_func_exponential
    +
    37 #define glm_core_func_exponential GLM_VERSION
    +
    38 
    +
    39 namespace glm
    +
    40 {
    +
    43 
    +
    52  template <typename genType>
    +
    53  genType pow(genType const & x, genType const & y);
    +
    54 
    +
    62  template <typename genType>
    +
    63  genType exp(genType const & x);
    +
    64 
    +
    74  template <typename genType>
    +
    75  genType log(genType const & x);
    +
    76 
    +
    84  template <typename genType>
    +
    85  genType exp2(genType const & x);
    +
    86 
    +
    95  template <typename genType>
    +
    96  genType log2(genType const & x);
    +
    97 
    +
    105  template <typename genType>
    +
    106  genType sqrt(genType const & x);
    +
    107 
    +
    115  template <typename genType>
    +
    116  genType inversesqrt(genType const & x);
    +
    117 
    +
    119 }//namespace glm
    +
    120 
    +
    121 #include "func_exponential.inl"
    +
    122 
    +
    123 #endif//glm_core_func_exponential
    +
    + - diff --git a/doc/api/a00028.html b/doc/api/a00028.html index 4fbf030d..540e5128 100644 --- a/doc/api/a00028.html +++ b/doc/api/a00028.html @@ -2,42 +2,31 @@ - + func_geometric.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,55 +35,65 @@
  • File List
  • + +
    func_geometric.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tvec3< valType > cross (detail::tvec3< valType > const &x, detail::tvec3< valType > const &y)
    template<typename genType >
    genType::value_type distance (genType const &p0, genType const &p1)
    template<typename genType >
    genType::value_type dot (genType const &x, genType const &y)
    template<typename genType >
    genType faceforward (genType const &N, genType const &I, genType const &Nref)
    template<typename genType >
    genType::value_type length (genType const &x)
    template<typename genType >
    genType normalize (genType const &x)
    template<typename genType >
    genType reflect (genType const &I, genType const &N)
    template<typename genType >
    genType refract (genType const &I, genType const &N, typename genType::value_type const &eta)
    template<typename valType >
    detail::tvec3< valType > cross (detail::tvec3< valType > const &x, detail::tvec3< valType > const &y)
     
    template<typename genType >
    genType::value_type distance (genType const &p0, genType const &p1)
     
    template<typename genType >
    genType::value_type dot (genType const &x, genType const &y)
     
    template<typename genType >
    genType faceforward (genType const &N, genType const &I, genType const &Nref)
     
    template<typename genType >
    genType::value_type length (genType const &x)
     
    template<typename genType >
    genType normalize (genType const &x)
     
    template<typename genType >
    genType reflect (genType const &I, genType const &N)
     
    template<typename genType >
    genType refract (genType const &I, genType const &N, typename genType::value_type const &eta)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-03 / 2011-06-14
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +

    GLM Core

    +
    Date
    2008-08-03 / 2011-06-14
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.5 Geometric Functions

    Definition in file func_geometric.hpp.

    -
    - - + + - diff --git a/doc/api/a00028_source.html b/doc/api/a00028_source.html index d3e40858..80f5959d 100644 --- a/doc/api/a00028_source.html +++ b/doc/api/a00028_source.html @@ -2,42 +2,31 @@ - + func_geometric.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,106 +35,108 @@
  • File List
  • + +
    func_geometric.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 #ifndef glm_core_func_geometric
    -00037 #define glm_core_func_geometric GLM_VERSION
    -00038 
    -00039 namespace glm
    -00040 {
    -00043 
    -00050         template <typename genType> 
    -00051         typename genType::value_type length(
    -00052                 genType const & x); 
    -00053 
    -00060         template <typename genType> 
    -00061         typename genType::value_type distance(
    -00062                 genType const & p0, 
    -00063                 genType const & p1);
    -00064 
    -00071     template <typename genType> 
    -00072         typename genType::value_type dot(
    -00073                 genType const & x, 
    -00074                 genType const & y);
    -00075 
    -00082     template <typename valType> 
    -00083         detail::tvec3<valType> cross(
    -00084                 detail::tvec3<valType> const & x, 
    -00085                 detail::tvec3<valType> const & y);
    -00086 
    -00091         template <typename genType> 
    -00092         genType normalize(
    -00093                 genType const & x);
    -00094 
    -00101     template <typename genType> 
    -00102         genType faceforward(
    -00103                 genType const & N, 
    -00104                 genType const & I, 
    -00105                 genType const & Nref);
    -00106   
    -00114     template <typename genType> 
    -00115         genType reflect(
    -00116                 genType const & I, 
    -00117                 genType const & N);
    -00118   
    -00127     template <typename genType> 
    -00128         genType refract(
    -00129                 genType const & I, 
    -00130                 genType const & N, 
    -00131                 typename genType::value_type const & eta);
    -00132 
    -00134 }//namespace glm
    -00135 
    -00136 #include "func_geometric.inl"
    -00137 
    -00138 #endif//glm_core_func_geometric
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 #ifndef glm_core_func_geometric
    +
    37 #define glm_core_func_geometric GLM_VERSION
    +
    38 
    +
    39 namespace glm
    +
    40 {
    +
    43 
    +
    50  template <typename genType>
    +
    51  typename genType::value_type length(
    +
    52  genType const & x);
    +
    53 
    +
    60  template <typename genType>
    +
    61  typename genType::value_type distance(
    +
    62  genType const & p0,
    +
    63  genType const & p1);
    +
    64 
    +
    71  template <typename genType>
    +
    72  typename genType::value_type dot(
    +
    73  genType const & x,
    +
    74  genType const & y);
    +
    75 
    +
    82  template <typename valType>
    +
    83  detail::tvec3<valType> cross(
    +
    84  detail::tvec3<valType> const & x,
    +
    85  detail::tvec3<valType> const & y);
    +
    86 
    +
    91  template <typename genType>
    +
    92  genType normalize(
    +
    93  genType const & x);
    +
    94 
    +
    101  template <typename genType>
    +
    102  genType faceforward(
    +
    103  genType const & N,
    +
    104  genType const & I,
    +
    105  genType const & Nref);
    +
    106 
    +
    114  template <typename genType>
    +
    115  genType reflect(
    +
    116  genType const & I,
    +
    117  genType const & N);
    +
    118 
    +
    127  template <typename genType>
    +
    128  genType refract(
    +
    129  genType const & I,
    +
    130  genType const & N,
    +
    131  typename genType::value_type const & eta);
    +
    132 
    +
    134 }//namespace glm
    +
    135 
    +
    136 #include "func_geometric.inl"
    +
    137 
    +
    138 #endif//glm_core_func_geometric
    +
    + - diff --git a/doc/api/a00029.html b/doc/api/a00029.html index 2caa64cc..144a45f4 100644 --- a/doc/api/a00029.html +++ b/doc/api/a00029.html @@ -2,42 +2,31 @@ - + func_integer.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,59 +35,71 @@
  • File List
  • + +
    func_integer.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type bitCount (genIUType< T > const &Value)
    template<typename genIUType >
    genIUType bitfieldExtract (genIUType const &Value, int const &Offset, int const &Bits)
    template<typename genIUType >
    genIUType bitfieldInsert (genIUType const &Base, genIUType const &Insert, int const &Offset, int const &Bits)
    template<typename genIUType >
    genIUType bitfieldReverse (genIUType const &value)
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type findLSB (genIUType< T > const &Value)
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type findMSB (genIUType< T > const &Value)
    template<typename genIType >
    void imulExtended (genIType const &x, genIType const &y, genIType &msb, genIType &lsb)
    template<typename genUType >
    genUType uaddCarry (genUType const &x, genUType const &y, genUType &carry)
    template<typename genUType >
    void umulExtended (genUType const &x, genUType const &y, genUType &msb, genUType &lsb)
    template<typename genUType >
    genUType usubBorrow (genUType const &x, genUType const &y, genUType &borrow)
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type bitCount (genIUType< T > const &Value)
     
    template<typename genIUType >
    genIUType bitfieldExtract (genIUType const &Value, int const &Offset, int const &Bits)
     
    template<typename genIUType >
    genIUType bitfieldInsert (genIUType const &Base, genIUType const &Insert, int const &Offset, int const &Bits)
     
    template<typename genIUType >
    genIUType bitfieldReverse (genIUType const &Value)
     
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type findLSB (genIUType< T > const &Value)
     
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type findMSB (genIUType< T > const &Value)
     
    template<typename genIType >
    void imulExtended (genIType const &x, genIType const &y, genIType &msb, genIType &lsb)
     
    template<typename genUType >
    genUType uaddCarry (genUType const &x, genUType const &y, genUType &carry)
     
    template<typename genUType >
    void umulExtended (genUType const &x, genUType const &y, genUType &msb, genUType &lsb)
     
    template<typename genUType >
    genUType usubBorrow (genUType const &x, genUType const &y, genUType &borrow)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2010-03-17 / 2011-06-18
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.8 Integer Functions
    +

    GLM Core

    +
    Date
    2010-03-17 / 2011-06-18
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.8 Integer Functions

    Definition in file func_integer.hpp.

    -
    - - + + - diff --git a/doc/api/a00029_source.html b/doc/api/a00029_source.html index 651d2757..e41b4770 100644 --- a/doc/api/a00029_source.html +++ b/doc/api/a00029_source.html @@ -2,42 +2,31 @@ - + func_integer.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,120 +35,122 @@
  • File List
  • + +
    func_integer.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef glm_core_func_integer
    -00039 #define glm_core_func_integer GLM_VERSION
    -00040 
    -00041 namespace glm
    -00042 {
    -00045 
    -00054         template <typename genUType>
    -00055         genUType uaddCarry(
    -00056                 genUType const & x, 
    -00057                 genUType const & y, 
    -00058                 genUType & carry);
    -00059 
    -00068         template <typename genUType>
    -00069         genUType usubBorrow(
    -00070                 genUType const & x, 
    -00071                 genUType const & y, 
    -00072                 genUType & borrow);
    -00073                 
    -00082         template <typename genUType>
    -00083         void umulExtended(
    -00084                 genUType const & x, 
    -00085                 genUType const & y, 
    -00086                 genUType & msb, 
    -00087                 genUType & lsb);
    -00088                 
    -00097         template <typename genIType>
    -00098         void imulExtended(
    -00099                 genIType const & x, 
    -00100                 genIType const & y, 
    -00101                 genIType & msb, 
    -00102                 genIType & lsb);
    -00103 
    -00119         template <typename genIUType>
    -00120         genIUType bitfieldExtract(
    -00121                 genIUType const & Value, 
    -00122                 int const & Offset, 
    -00123                 int const & Bits);
    -00124 
    -00139         template <typename genIUType>
    -00140         genIUType bitfieldInsert(
    -00141                 genIUType const & Base, 
    -00142                 genIUType const & Insert, 
    -00143                 int const & Offset, 
    -00144                 int const & Bits);
    -00145 
    -00154         template <typename genIUType>
    -00155         genIUType bitfieldReverse(genIUType const & value);
    -00156                 
    -00165         template <typename T, template <typename> class genIUType>
    -00166         typename genIUType<T>::signed_type bitCount(genIUType<T> const & Value);
    -00167 
    -00178         template <typename T, template <typename> class genIUType>
    -00179         typename genIUType<T>::signed_type findLSB(genIUType<T> const & Value);
    -00180 
    -00192         template <typename T, template <typename> class genIUType>
    -00193         typename genIUType<T>::signed_type findMSB(genIUType<T> const & Value);
    -00194 
    -00196 }//namespace glm
    -00197 
    -00198 #include "func_integer.inl"
    -00199 
    -00200 #endif//glm_core_func_integer
    -00201 
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef glm_core_func_integer
    +
    39 #define glm_core_func_integer GLM_VERSION
    +
    40 
    +
    41 namespace glm
    +
    42 {
    +
    45 
    +
    54  template <typename genUType>
    +
    55  genUType uaddCarry(
    +
    56  genUType const & x,
    +
    57  genUType const & y,
    +
    58  genUType & carry);
    +
    59 
    +
    68  template <typename genUType>
    +
    69  genUType usubBorrow(
    +
    70  genUType const & x,
    +
    71  genUType const & y,
    +
    72  genUType & borrow);
    +
    73 
    +
    82  template <typename genUType>
    +
    83  void umulExtended(
    +
    84  genUType const & x,
    +
    85  genUType const & y,
    +
    86  genUType & msb,
    +
    87  genUType & lsb);
    +
    88 
    +
    97  template <typename genIType>
    +
    98  void imulExtended(
    +
    99  genIType const & x,
    +
    100  genIType const & y,
    +
    101  genIType & msb,
    +
    102  genIType & lsb);
    +
    103 
    +
    119  template <typename genIUType>
    +
    120  genIUType bitfieldExtract(
    +
    121  genIUType const & Value,
    +
    122  int const & Offset,
    +
    123  int const & Bits);
    +
    124 
    +
    139  template <typename genIUType>
    +
    140  genIUType bitfieldInsert(
    +
    141  genIUType const & Base,
    +
    142  genIUType const & Insert,
    +
    143  int const & Offset,
    +
    144  int const & Bits);
    +
    145 
    +
    154  template <typename genIUType>
    +
    155  genIUType bitfieldReverse(genIUType const & Value);
    +
    156 
    +
    165  template <typename T, template <typename> class genIUType>
    +
    166  typename genIUType<T>::signed_type bitCount(genIUType<T> const & Value);
    +
    167 
    +
    178  template <typename T, template <typename> class genIUType>
    +
    179  typename genIUType<T>::signed_type findLSB(genIUType<T> const & Value);
    +
    180 
    +
    192  template <typename T, template <typename> class genIUType>
    +
    193  typename genIUType<T>::signed_type findMSB(genIUType<T> const & Value);
    +
    194 
    +
    196 }//namespace glm
    +
    197 
    +
    198 #include "func_integer.inl"
    +
    199 
    +
    200 #endif//glm_core_func_integer
    +
    201 
    +
    + - diff --git a/doc/api/a00030.html b/doc/api/a00030.html index 772584db..f0826159 100644 --- a/doc/api/a00030.html +++ b/doc/api/a00030.html @@ -2,42 +2,31 @@ - + func_matrix.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,60 +35,71 @@
  • File List
  • + +
    func_matrix.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tmat2x2< valType >
    -::value_type 
    determinant (detail::tmat2x2< valType > const &m)
    template<typename valType >
    detail::tmat3x3< valType >
    -::value_type 
    determinant (detail::tmat3x3< valType > const &m)
    template<typename valType >
    detail::tmat4x4< valType >
    -::value_type 
    determinant (detail::tmat4x4< valType > const &m)
    template<typename valType >
    detail::tmat2x2< valType > inverse (detail::tmat2x2< valType > const &m)
    template<typename valType >
    detail::tmat3x3< valType > inverse (detail::tmat3x3< valType > const &m)
    template<typename valType >
    detail::tmat4x4< valType > inverse (detail::tmat4x4< valType > const &m)
    template<typename matType >
    matType matrixCompMult (matType const &x, matType const &y)
    template<typename vecType , typename matType >
    matType outerProduct (vecType const &c, vecType const &r)
    template<typename matType >
    matType::transpose_type transpose (matType const &x)
    template<typename valType >
    detail::tmat2x2< valType >
    +::value_type 
    determinant (detail::tmat2x2< valType > const &m)
     
    template<typename valType >
    detail::tmat3x3< valType >
    +::value_type 
    determinant (detail::tmat3x3< valType > const &m)
     
    template<typename valType >
    detail::tmat4x4< valType >
    +::value_type 
    determinant (detail::tmat4x4< valType > const &m)
     
    template<typename valType >
    detail::tmat2x2< valType > inverse (detail::tmat2x2< valType > const &m)
     
    template<typename valType >
    detail::tmat3x3< valType > inverse (detail::tmat3x3< valType > const &m)
     
    template<typename valType >
    detail::tmat4x4< valType > inverse (detail::tmat4x4< valType > const &m)
     
    template<typename matType >
    matType matrixCompMult (matType const &x, matType const &y)
     
    template<typename vecType , typename matType >
    matType outerProduct (vecType const &c, vecType const &r)
     
    template<typename matType >
    matType::transpose_type transpose (matType const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-03 / 2011-06-15
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.6 Matrix Functions
    +

    GLM Core

    +
    Date
    2008-08-03 / 2011-06-15
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.6 Matrix Functions

    Definition in file func_matrix.hpp.

    -
    - - + + - diff --git a/doc/api/a00030_source.html b/doc/api/a00030_source.html index fdaa588b..7b41c570 100644 --- a/doc/api/a00030_source.html +++ b/doc/api/a00030_source.html @@ -2,42 +2,31 @@ - + func_matrix.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,108 +35,110 @@
  • File List
  • + +
    func_matrix.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 #ifndef GLM_CORE_func_matrix
    -00041 #define GLM_CORE_func_matrix GLM_VERSION
    -00042 
    -00043 namespace glm
    -00044 {
    -00047 
    -00055         template <typename matType> 
    -00056         matType matrixCompMult(
    -00057                 matType const & x, 
    -00058                 matType const & y);
    -00059 
    -00070     template <typename vecType, typename matType> 
    -00071         matType outerProduct(
    -00072                 vecType const & c, 
    -00073                 vecType const & r);
    -00074 
    -00081     template <typename matType> 
    -00082         typename matType::transpose_type transpose(
    -00083                 matType const & x);
    -00084         
    -00091         template <typename valType> 
    -00092         typename detail::tmat2x2<valType>::value_type determinant(
    -00093                 detail::tmat2x2<valType> const & m);
    -00094 
    -00101         template <typename valType> 
    -00102         typename detail::tmat3x3<valType>::value_type determinant(
    -00103                 detail::tmat3x3<valType> const & m);
    -00104 
    -00111     template <typename valType> 
    -00112         typename detail::tmat4x4<valType>::value_type determinant(
    -00113                 detail::tmat4x4<valType> const & m);
    -00114 
    -00121         template <typename valType> 
    -00122         detail::tmat2x2<valType> inverse(
    -00123                 detail::tmat2x2<valType> const & m);
    -00124 
    -00131         template <typename valType> 
    -00132         detail::tmat3x3<valType> inverse(
    -00133                 detail::tmat3x3<valType> const & m);
    -00134 
    -00141         template <typename valType> 
    -00142         detail::tmat4x4<valType> inverse(
    -00143                 detail::tmat4x4<valType> const & m);
    -00144 
    -00146 }//namespace glm
    -00147 
    -00148 #include "func_matrix.inl"
    -00149 
    -00150 #endif//GLM_CORE_func_matrix
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 #ifndef GLM_CORE_func_matrix
    +
    41 #define GLM_CORE_func_matrix GLM_VERSION
    +
    42 
    +
    43 namespace glm
    +
    44 {
    +
    47 
    +
    55  template <typename matType>
    +
    56  matType matrixCompMult(
    +
    57  matType const & x,
    +
    58  matType const & y);
    +
    59 
    +
    70  template <typename vecType, typename matType>
    +
    71  matType outerProduct(
    +
    72  vecType const & c,
    +
    73  vecType const & r);
    +
    74 
    +
    81  template <typename matType>
    +
    82  typename matType::transpose_type transpose(
    +
    83  matType const & x);
    +
    84 
    +
    91  template <typename valType>
    +
    92  typename detail::tmat2x2<valType>::value_type determinant(
    +
    93  detail::tmat2x2<valType> const & m);
    +
    94 
    +
    101  template <typename valType>
    +
    102  typename detail::tmat3x3<valType>::value_type determinant(
    +
    103  detail::tmat3x3<valType> const & m);
    +
    104 
    +
    111  template <typename valType>
    +
    112  typename detail::tmat4x4<valType>::value_type determinant(
    +
    113  detail::tmat4x4<valType> const & m);
    +
    114 
    +
    121  template <typename valType>
    +
    122  detail::tmat2x2<valType> inverse(
    +
    123  detail::tmat2x2<valType> const & m);
    +
    124 
    +
    131  template <typename valType>
    +
    132  detail::tmat3x3<valType> inverse(
    +
    133  detail::tmat3x3<valType> const & m);
    +
    134 
    +
    141  template <typename valType>
    +
    142  detail::tmat4x4<valType> inverse(
    +
    143  detail::tmat4x4<valType> const & m);
    +
    144 
    +
    146 }//namespace glm
    +
    147 
    +
    148 #include "func_matrix.inl"
    +
    149 
    +
    150 #endif//GLM_CORE_func_matrix
    +
    + - diff --git a/doc/api/a00031.html b/doc/api/a00031.html index b743aa4a..dc542eed 100644 --- a/doc/api/a00031.html +++ b/doc/api/a00031.html @@ -2,42 +2,31 @@ - + func_noise.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,50 +35,56 @@
  • File List
  • + +
    func_noise.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType::value_type noise1 (genType const &x)
    template<typename genType >
    detail::tvec2< typename
    -genType::value_type > 
    noise2 (genType const &x)
    template<typename genType >
    detail::tvec3< typename
    -genType::value_type > 
    noise3 (genType const &x)
    template<typename genType >
    detail::tvec4< typename
    -genType::value_type > 
    noise4 (genType const &x)
    template<typename genType >
    genType::value_type noise1 (genType const &x)
     
    template<typename genType >
    detail::tvec2< typename
    +genType::value_type > 
    noise2 (genType const &x)
     
    template<typename genType >
    detail::tvec3< typename
    +genType::value_type > 
    noise3 (genType const &x)
     
    template<typename genType >
    detail::tvec4< typename
    +genType::value_type > 
    noise4 (genType const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-01 / 2011-06-18
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.13 Noise Functions
    +

    GLM Core

    +
    Date
    2008-08-01 / 2011-06-18
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.13 Noise Functions

    Definition in file func_noise.hpp.

    -
    - - + + - diff --git a/doc/api/a00031_source.html b/doc/api/a00031_source.html index 4e5ac590..fccdbfa8 100644 --- a/doc/api/a00031_source.html +++ b/doc/api/a00031_source.html @@ -2,42 +2,31 @@ - + func_noise.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,80 +35,82 @@
  • File List
  • + +
    func_noise.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef glm_core_func_noise
    -00039 #define glm_core_func_noise GLM_VERSION
    -00040 
    -00041 namespace glm
    -00042 {
    -00045 
    -00052         template <typename genType>
    -00053         typename genType::value_type noise1(genType const & x);
    -00054 
    -00061         template <typename genType>
    -00062         detail::tvec2<typename genType::value_type> noise2(genType const & x);
    -00063 
    -00070         template <typename genType>
    -00071         detail::tvec3<typename genType::value_type> noise3(genType const & x);
    -00072 
    -00079         template <typename genType>
    -00080         detail::tvec4<typename genType::value_type> noise4(genType const & x);
    -00081 
    -00083 }//namespace glm
    -00084 
    -00085 #include "func_noise.inl"
    -00086 
    -00087 #endif//glm_core_func_noise
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef glm_core_func_noise
    +
    39 #define glm_core_func_noise GLM_VERSION
    +
    40 
    +
    41 namespace glm
    +
    42 {
    +
    45 
    +
    52  template <typename genType>
    +
    53  typename genType::value_type noise1(genType const & x);
    +
    54 
    +
    61  template <typename genType>
    +
    62  detail::tvec2<typename genType::value_type> noise2(genType const & x);
    +
    63 
    +
    70  template <typename genType>
    +
    71  detail::tvec3<typename genType::value_type> noise3(genType const & x);
    +
    72 
    +
    79  template <typename genType>
    +
    80  detail::tvec4<typename genType::value_type> noise4(genType const & x);
    +
    81 
    +
    83 }//namespace glm
    +
    84 
    +
    85 #include "func_noise.inl"
    +
    86 
    +
    87 #endif//glm_core_func_noise
    +
    + - diff --git a/doc/api/a00032.html b/doc/api/a00032.html index 50305fd0..4b3e963c 100644 --- a/doc/api/a00032.html +++ b/doc/api/a00032.html @@ -2,42 +2,31 @@ - + func_packing.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,51 +35,65 @@
  • File List
  • + +
    func_packing.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    double packDouble2x32 (detail::tvec2< detail::uint32 > const &v)
    uint packHalf2x16 (vec2 const &v)
    detail::uint32 packSnorm2x16 (detail::tvec2< detail::float32 > const &v)
    detail::uint32 packSnorm4x8 (detail::tvec4< detail::float32 > const &v)
    detail::uint32 packUnorm2x16 (detail::tvec2< detail::float32 > const &v)
    detail::uint32 packUnorm4x8 (detail::tvec4< detail::float32 > const &v)
    detail::tvec2< detail::uint32 > unpackDouble2x32 (double const &v)
    vec2 unpackHalf2x16 (uint const &v)
    detail::tvec2< detail::float32 > unpackSnorm2x16 (detail::uint32 const &p)
    detail::tvec4< detail::float32 > unpackSnorm4x8 (detail::uint32 const &p)
    detail::tvec2< detail::float32 > unpackUnorm2x16 (detail::uint32 const &p)
    detail::tvec4< detail::float32 > unpackUnorm4x8 (detail::uint32 const &p)
    double packDouble2x32 (detail::tvec2< detail::uint32 > const &v)
     
    uint packHalf2x16 (vec2 const &v)
     
    detail::uint32 packSnorm2x16 (detail::tvec2< detail::float32 > const &v)
     
    detail::uint32 packSnorm4x8 (detail::tvec4< detail::float32 > const &v)
     
    detail::uint32 packUnorm2x16 (detail::tvec2< detail::float32 > const &v)
     
    detail::uint32 packUnorm4x8 (detail::tvec4< detail::float32 > const &v)
     
    detail::tvec2< detail::uint32 > unpackDouble2x32 (double const &v)
     
    vec2 unpackHalf2x16 (uint const &v)
     
    detail::tvec2< detail::float32 > unpackSnorm2x16 (detail::uint32 const &p)
     
    detail::tvec4< detail::float32 > unpackSnorm4x8 (detail::uint32 const &p)
     
    detail::tvec2< detail::float32 > unpackUnorm2x16 (detail::uint32 const &p)
     
    detail::tvec4< detail::float32 > unpackUnorm4x8 (detail::uint32 const &p)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2010-03-17 / 2011-06-15
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +

    GLM Core

    +
    Date
    2010-03-17 / 2011-06-15
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions

    Definition in file func_packing.hpp.

    -
    - - + + - diff --git a/doc/api/a00032_source.html b/doc/api/a00032_source.html index 055f52f8..6d46cac4 100644 --- a/doc/api/a00032_source.html +++ b/doc/api/a00032_source.html @@ -2,42 +2,31 @@ - + func_packing.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,92 +35,93 @@
  • File List
  • + +
    func_packing.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 #ifndef GLM_CORE_func_packing
    -00037 #define GLM_CORE_func_packing GLM_VERSION
    -00038 
    -00039 namespace glm
    -00040 {       
    -00043 
    -00055         detail::uint32 packUnorm2x16(detail::tvec2<detail::float32> const & v);
    -00056 
    -00068         detail::uint32 packSnorm2x16(detail::tvec2<detail::float32> const & v);
    -00069         
    -00081         detail::uint32 packUnorm4x8(detail::tvec4<detail::float32> const & v);
    -00082         
    -00094         detail::uint32 packSnorm4x8(detail::tvec4<detail::float32> const & v);
    -00095 
    -00107         detail::tvec2<detail::float32> unpackUnorm2x16(detail::uint32 const & p);
    -00108 
    -00120         detail::tvec2<detail::float32> unpackSnorm2x16(detail::uint32 const & p);
    -00121         
    -00133     detail::tvec4<detail::float32> unpackUnorm4x8(detail::uint32 const & p);
    -00134         
    -00146         detail::tvec4<detail::float32> unpackSnorm4x8(detail::uint32 const & p);
    -00147 
    -00156         double packDouble2x32(detail::tvec2<detail::uint32> const & v);
    -00157         
    -00165         detail::tvec2<detail::uint32> unpackDouble2x32(double const & v);
    -00166 
    -00167         
    -00176         uint packHalf2x16(vec2 const & v);
    -00177         
    -00186         vec2 unpackHalf2x16(uint const & v);
    -00187         
    -00189 }//namespace glm
    -00190 
    -00191 #include "func_packing.inl"
    -00192 
    -00193 #endif//GLM_CORE_func_packing
    -00194 
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 #ifndef GLM_CORE_func_packing
    +
    37 #define GLM_CORE_func_packing GLM_VERSION
    +
    38 
    +
    39 namespace glm
    +
    40 {
    +
    43 
    +
    55  detail::uint32 packUnorm2x16(detail::tvec2<detail::float32> const & v);
    +
    56 
    +
    68  detail::uint32 packSnorm2x16(detail::tvec2<detail::float32> const & v);
    +
    69 
    +
    81  detail::uint32 packUnorm4x8(detail::tvec4<detail::float32> const & v);
    +
    82 
    +
    94  detail::uint32 packSnorm4x8(detail::tvec4<detail::float32> const & v);
    +
    95 
    +
    107  detail::tvec2<detail::float32> unpackUnorm2x16(detail::uint32 const & p);
    +
    108 
    +
    120  detail::tvec2<detail::float32> unpackSnorm2x16(detail::uint32 const & p);
    +
    121 
    +
    133  detail::tvec4<detail::float32> unpackUnorm4x8(detail::uint32 const & p);
    +
    134 
    +
    146  detail::tvec4<detail::float32> unpackSnorm4x8(detail::uint32 const & p);
    +
    147 
    +
    156  double packDouble2x32(detail::tvec2<detail::uint32> const & v);
    +
    157 
    +
    165  detail::tvec2<detail::uint32> unpackDouble2x32(double const & v);
    +
    166 
    +
    175  uint packHalf2x16(vec2 const & v);
    +
    176 
    +
    185  vec2 unpackHalf2x16(uint const & v);
    +
    186 
    +
    188 }//namespace glm
    +
    189 
    +
    190 #include "func_packing.inl"
    +
    191 
    +
    192 #endif//GLM_CORE_func_packing
    +
    193 
    +
    + - diff --git a/doc/api/a00033.html b/doc/api/a00033.html index 17810bab..2be56dd4 100644 --- a/doc/api/a00033.html +++ b/doc/api/a00033.html @@ -2,42 +2,31 @@ - + func_trigonometric.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,69 +35,86 @@
  • File List
  • + +
    func_trigonometric.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType acos (genType const &x)
    template<typename genType >
    genType acosh (genType const &x)
    template<typename genType >
    genType asin (genType const &x)
    template<typename genType >
    genType asinh (genType const &x)
    template<typename genType >
    genType atan (genType const &y, genType const &x)
    template<typename genType >
    genType atan (genType const &y_over_x)
    template<typename genType >
    genType atanh (genType const &x)
    template<typename genType >
    genType cos (genType const &angle)
    template<typename genType >
    genType cosh (genType const &angle)
    template<typename genType >
    genType degrees (genType const &radians)
    template<typename genType >
    genType radians (genType const &degrees)
    template<typename genType >
    genType sin (genType const &angle)
    template<typename genType >
    genType sinh (genType const &angle)
    template<typename genType >
    genType tan (genType const &angle)
    template<typename genType >
    genType tanh (genType const &angle)
    template<typename genType >
    genType acos (genType const &x)
     
    template<typename genType >
    genType acosh (genType const &x)
     
    template<typename genType >
    genType asin (genType const &x)
     
    template<typename genType >
    genType asinh (genType const &x)
     
    template<typename genType >
    genType atan (genType const &y, genType const &x)
     
    template<typename genType >
    genType atan (genType const &y_over_x)
     
    template<typename genType >
    genType atanh (genType const &x)
     
    template<typename genType >
    genType cos (genType const &angle)
     
    template<typename genType >
    genType cosh (genType const &angle)
     
    template<typename genType >
    genType degrees (genType const &radians)
     
    template<typename genType >
    genType radians (genType const &degrees)
     
    template<typename genType >
    genType sin (genType const &angle)
     
    template<typename genType >
    genType sinh (genType const &angle)
     
    template<typename genType >
    genType tan (genType const &angle)
     
    template<typename genType >
    genType tanh (genType const &angle)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-01 / 2011-06-15
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    GLM Core

    +
    Date
    2008-08-01 / 2011-06-15
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions

    Definition in file func_trigonometric.hpp.

    -
    - - + + - diff --git a/doc/api/a00033_source.html b/doc/api/a00033_source.html index f54e8390..4b0be50a 100644 --- a/doc/api/a00033_source.html +++ b/doc/api/a00033_source.html @@ -2,42 +2,31 @@ - + func_trigonometric.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,117 +35,119 @@
  • File List
  • + +
    func_trigonometric.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 #ifndef GLM_CORE_func_trigonometric
    -00041 #define GLM_CORE_func_trigonometric GLM_VERSION
    -00042 
    -00043 namespace glm
    -00044 {
    -00047 
    -00054         template <typename genType> 
    -00055         genType radians(genType const & degrees);
    -00056 
    -00063         template <typename genType> 
    -00064         genType degrees(genType const & radians);
    -00065 
    -00073         template <typename genType> 
    -00074         genType sin(genType const & angle);
    -00075 
    -00083         template <typename genType> 
    -00084         genType cos(genType const & angle);
    -00085 
    -00092         template <typename genType> 
    -00093         genType tan(genType const & angle); 
    -00094 
    -00103         template <typename genType> 
    -00104         genType asin(genType const & x);
    -00105 
    -00114         template <typename genType> 
    -00115         genType acos(genType const & x);
    -00116 
    -00127         template <typename genType> 
    -00128         genType atan(genType const & y, genType const & x);
    -00129 
    -00137         template <typename genType> 
    -00138         genType atan(genType const & y_over_x);
    -00139 
    -00146         template <typename genType> 
    -00147         genType sinh(genType const & angle);
    -00148 
    -00155         template <typename genType> 
    -00156         genType cosh(genType const & angle);
    -00157 
    -00164         template <typename genType> 
    -00165         genType tanh(genType const & angle);
    -00166 
    -00173         template <typename genType> 
    -00174         genType asinh(genType const & x);
    -00175         
    -00183         template <typename genType> 
    -00184         genType acosh(genType const & x);
    -00185 
    -00193         template <typename genType> 
    -00194         genType atanh(genType const & x);
    -00195 
    -00197 }//namespace glm
    -00198 
    -00199 #include "func_trigonometric.inl"
    -00200 
    -00201 #endif//GLM_CORE_func_trigonometric
    -00202 
    -00203 
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 #ifndef GLM_CORE_func_trigonometric
    +
    41 #define GLM_CORE_func_trigonometric GLM_VERSION
    +
    42 
    +
    43 namespace glm
    +
    44 {
    +
    47 
    +
    54  template <typename genType>
    +
    55  genType radians(genType const & degrees);
    +
    56 
    +
    63  template <typename genType>
    +
    64  genType degrees(genType const & radians);
    +
    65 
    +
    73  template <typename genType>
    +
    74  genType sin(genType const & angle);
    +
    75 
    +
    83  template <typename genType>
    +
    84  genType cos(genType const & angle);
    +
    85 
    +
    92  template <typename genType>
    +
    93  genType tan(genType const & angle);
    +
    94 
    +
    103  template <typename genType>
    +
    104  genType asin(genType const & x);
    +
    105 
    +
    114  template <typename genType>
    +
    115  genType acos(genType const & x);
    +
    116 
    +
    127  template <typename genType>
    +
    128  genType atan(genType const & y, genType const & x);
    +
    129 
    +
    137  template <typename genType>
    +
    138  genType atan(genType const & y_over_x);
    +
    139 
    +
    146  template <typename genType>
    +
    147  genType sinh(genType const & angle);
    +
    148 
    +
    155  template <typename genType>
    +
    156  genType cosh(genType const & angle);
    +
    157 
    +
    164  template <typename genType>
    +
    165  genType tanh(genType const & angle);
    +
    166 
    +
    173  template <typename genType>
    +
    174  genType asinh(genType const & x);
    +
    175 
    +
    183  template <typename genType>
    +
    184  genType acosh(genType const & x);
    +
    185 
    +
    193  template <typename genType>
    +
    194  genType atanh(genType const & x);
    +
    195 
    +
    197 }//namespace glm
    +
    198 
    +
    199 #include "func_trigonometric.inl"
    +
    200 
    +
    201 #endif//GLM_CORE_func_trigonometric
    +
    202 
    +
    203 
    +
    + - diff --git a/doc/api/a00034.html b/doc/api/a00034.html index b5feca30..598f21d6 100644 --- a/doc/api/a00034.html +++ b/doc/api/a00034.html @@ -2,42 +2,31 @@ - + func_vector_relational.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,57 +35,68 @@
  • File List
  • + +
    func_vector_relational.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<template< typename > class vecType>
    bool all (vecType< bool > const &v)
    template<template< typename > class vecType>
    bool any (vecType< bool > const &v)
    template<typename vecType >
    vecType::bool_type equal (vecType const &x, vecType const &y)
    template<typename vecType >
    vecType::bool_type greaterThan (vecType const &x, vecType const &y)
    template<typename vecType >
    vecType::bool_type greaterThanEqual (vecType const &x, vecType const &y)
    template<typename vecType >
    vecType::bool_type lessThan (vecType const &x, vecType const &y)
    template<typename vecType >
    vecType::bool_type lessThanEqual (vecType const &x, vecType const &y)
    template<template< typename > class vecType>
    vecType< bool > not_ (vecType< bool > const &v)
    template<typename vecType >
    vecType::bool_type notEqual (vecType const &x, vecType const &y)
    template<template< typename > class vecType>
    bool all (vecType< bool > const &v)
     
    template<template< typename > class vecType>
    bool any (vecType< bool > const &v)
     
    template<typename vecType >
    vecType::bool_type equal (vecType const &x, vecType const &y)
     
    template<typename vecType >
    vecType::bool_type greaterThan (vecType const &x, vecType const &y)
     
    template<typename vecType >
    vecType::bool_type greaterThanEqual (vecType const &x, vecType const &y)
     
    template<typename vecType >
    vecType::bool_type lessThan (vecType const &x, vecType const &y)
     
    template<typename vecType >
    vecType::bool_type lessThanEqual (vecType const &x, vecType const &y)
     
    template<template< typename > class vecType>
    vecType< bool > not_ (vecType< bool > const &v)
     
    template<typename vecType >
    vecType::bool_type notEqual (vecType const &x, vecType const &y)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-03 / 2011-06-15
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +

    GLM Core

    +
    Date
    2008-08-03 / 2011-06-15
    +
    Author
    Christophe Riccio
    +
    See Also
    GLSL 4.20.8 specification, section 8.7 Vector Relational Functions

    Definition in file func_vector_relational.hpp.

    -
    - - + + - diff --git a/doc/api/a00034_source.html b/doc/api/a00034_source.html index 9d3fec32..b36323c8 100644 --- a/doc/api/a00034_source.html +++ b/doc/api/a00034_source.html @@ -2,42 +2,31 @@ - + func_vector_relational.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,100 +35,102 @@
  • File List
  • + +
    func_vector_relational.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 #ifndef GLM_CORE_func_vector_relational
    -00042 #define GLM_CORE_func_vector_relational GLM_VERSION
    -00043 
    -00044 #include "_detail.hpp"
    -00045 
    -00046 namespace glm
    -00047 {
    -00050 
    -00057     template <typename vecType> 
    -00058         typename vecType::bool_type lessThan(vecType const & x, vecType const & y);
    -00059 
    -00066         template <typename vecType> 
    -00067         typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y);
    -00068 
    -00075         template <typename vecType> 
    -00076         typename vecType::bool_type greaterThan(vecType const & x, vecType const & y);
    -00077 
    -00084         template <typename vecType> 
    -00085         typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y);
    -00086 
    -00093         template <typename vecType> 
    -00094         typename vecType::bool_type equal(vecType const & x, vecType const & y);
    -00095 
    -00102         template <typename vecType> 
    -00103         typename vecType::bool_type notEqual(vecType const & x, vecType const & y);
    -00104 
    -00111         template <template <typename> class vecType> 
    -00112         bool any(vecType<bool> const & v);
    -00113 
    -00120         template <template <typename> class vecType> 
    -00121         bool all(vecType<bool> const & v);
    -00122 
    -00130         template <template <typename> class vecType> 
    -00131         vecType<bool> not_(vecType<bool> const & v);
    -00132 
    -00134 }//namespace glm
    -00135 
    -00136 #include "func_vector_relational.inl"
    -00137 
    -00138 #endif//GLM_CORE_func_vector_relational
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 #ifndef GLM_CORE_func_vector_relational
    +
    42 #define GLM_CORE_func_vector_relational GLM_VERSION
    +
    43 
    +
    44 #include "_detail.hpp"
    +
    45 
    +
    46 namespace glm
    +
    47 {
    +
    50 
    +
    57  template <typename vecType>
    +
    58  typename vecType::bool_type lessThan(vecType const & x, vecType const & y);
    +
    59 
    +
    66  template <typename vecType>
    +
    67  typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y);
    +
    68 
    +
    75  template <typename vecType>
    +
    76  typename vecType::bool_type greaterThan(vecType const & x, vecType const & y);
    +
    77 
    +
    84  template <typename vecType>
    +
    85  typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y);
    +
    86 
    +
    93  template <typename vecType>
    +
    94  typename vecType::bool_type equal(vecType const & x, vecType const & y);
    +
    95 
    +
    102  template <typename vecType>
    +
    103  typename vecType::bool_type notEqual(vecType const & x, vecType const & y);
    +
    104 
    +
    111  template <template <typename> class vecType>
    +
    112  bool any(vecType<bool> const & v);
    +
    113 
    +
    120  template <template <typename> class vecType>
    +
    121  bool all(vecType<bool> const & v);
    +
    122 
    +
    130  template <template <typename> class vecType>
    +
    131  vecType<bool> not_(vecType<bool> const & v);
    +
    132 
    +
    134 }//namespace glm
    +
    135 
    +
    136 #include "func_vector_relational.inl"
    +
    137 
    +
    138 #endif//GLM_CORE_func_vector_relational
    +
    + - diff --git a/doc/api/a00035.html b/doc/api/a00035.html index 4f57c07a..59b622ce 100644 --- a/doc/api/a00035.html +++ b/doc/api/a00035.html @@ -2,42 +2,31 @@ - + glm.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,38 +35,40 @@
  • File List
  • + +
    glm.hpp File Reference
    -
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -
    Date:
    2009-05-01 / 2011-05-16
    -
    Author:
    Christophe Riccio
    -

    GLM Core (Dependence)

    +
    Date
    2009-05-01 / 2011-05-16
    +
    Author
    Christophe Riccio
    +

    GLM Core (Dependence)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2005-01-14 / 2011-10-24
    -
    Author:
    Christophe Riccio
    +

    GLM Core

    +
    Date
    2005-01-14 / 2011-10-24
    +
    Author
    Christophe Riccio

    Definition in file glm.hpp.

    -
    - - + + - diff --git a/doc/api/a00035_source.html b/doc/api/a00035_source.html index bedb4bfe..1ed62f4c 100644 --- a/doc/api/a00035_source.html +++ b/doc/api/a00035_source.html @@ -2,42 +2,31 @@ - + glm.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,147 +35,150 @@
  • File List
  • + +
    glm.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 
    -00042 
    -00043 
    -00044 
    -00045 
    -00046 
    -00047 
    -00048 
    -00049 
    -00050 
    -00051 
    -00052 
    -00053 
    -00054 
    -00055 
    -00056 
    -00057 
    -00058 
    -00059 
    -00060 
    -00061 
    -00062 
    -00063 
    -00064 
    -00065 
    -00066 
    -00067 
    -00068 
    -00069 
    -00070 
    -00071 
    -00072 
    -00073 
    -00074 
    -00075 
    -00076 
    -00077 
    -00078 #include "core/_fixes.hpp"
    -00079 
    -00080 #ifndef glm_glm
    -00081 #define glm_glm
    -00082 
    -00083 #include <cmath>
    -00084 #include <climits>
    -00085 #include <cfloat>
    -00086 #include <limits>
    -00087 #include <cstdio>
    -00088 //#include <type_traits>
    -00089 #include "core/setup.hpp"
    -00090 
    -00091 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED))
    -00092 #       define GLM_MESSAGE_CORE_INCLUDED_DISPLAYED
    -00093 #       pragma message("GLM: Core library included")
    -00094 #endif//GLM_MESSAGE
    -00095 
    -00096 #include "./core/_detail.hpp"
    -00097 #include "./core/type.hpp"
    -00098 
    -00099 #include "./core/func_trigonometric.hpp"
    -00100 #include "./core/func_exponential.hpp"
    -00101 #include "./core/func_common.hpp"
    -00102 #include "./core/func_packing.hpp"
    -00103 #include "./core/func_geometric.hpp"
    -00104 #include "./core/func_matrix.hpp"
    -00105 #include "./core/func_vector_relational.hpp"
    -00106 #include "./core/func_integer.hpp"
    -00107 #include "./core/func_noise.hpp"
    -00108 #include "./core/_swizzle.hpp"
    -00109 
    -00111 // check type sizes
    -00112 #ifndef GLM_STATIC_ASSERT_NULL
    -00113         GLM_STATIC_ASSERT(sizeof(glm::detail::int8) == 1, "int8 size isn't 1 byte on this platform");
    -00114         GLM_STATIC_ASSERT(sizeof(glm::detail::int16) == 2, "int16 size isn't 2 bytes on this platform");
    -00115         GLM_STATIC_ASSERT(sizeof(glm::detail::int32) == 4, "int32 size isn't 4 bytes on this platform");
    -00116         GLM_STATIC_ASSERT(sizeof(glm::detail::int64) == 8, "int64 size isn't 8 bytes on this platform");
    -00117 
    -00118         GLM_STATIC_ASSERT(sizeof(glm::detail::uint8) == 1, "uint8 size isn't 1 byte on this platform");
    -00119         GLM_STATIC_ASSERT(sizeof(glm::detail::uint16) == 2, "uint16 size isn't 2 bytes on this platform");
    -00120         GLM_STATIC_ASSERT(sizeof(glm::detail::uint32) == 4, "uint32 size isn't 4 bytes on this platform");
    -00121         GLM_STATIC_ASSERT(sizeof(glm::detail::uint64) == 8, "uint64 size isn't 8 bytes on this platform");
    -00122 
    -00123         GLM_STATIC_ASSERT(sizeof(glm::detail::float16) == 2, "float16 size isn't 2 bytes on this platform");
    -00124         GLM_STATIC_ASSERT(sizeof(glm::detail::float32) == 4, "float32 size isn't 4 bytes on this platform");
    -00125         GLM_STATIC_ASSERT(sizeof(glm::detail::float64) == 8, "float64 size isn't 8 bytes on this platform");
    -00126 #endif//GLM_STATIC_ASSERT_NULL
    -00127 
    -00128 #endif//glm_glm
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 
    +
    42 
    +
    43 
    +
    44 
    +
    45 
    +
    46 
    +
    47 
    +
    48 
    +
    49 
    +
    50 
    +
    51 
    +
    52 
    +
    53 
    +
    54 
    +
    55 
    +
    56 
    +
    57 
    +
    58 
    +
    59 
    +
    60 
    +
    61 
    +
    62 
    +
    63 
    +
    64 
    +
    65 
    +
    66 
    +
    67 
    +
    68 
    +
    69 
    +
    70 
    +
    71 
    +
    72 
    +
    73 
    +
    74 
    +
    75 
    +
    76 
    +
    77 
    +
    78 #include "core/_fixes.hpp"
    +
    79 
    +
    80 #ifndef glm_glm
    +
    81 #define glm_glm
    +
    82 
    +
    83 #include <cmath>
    +
    84 #include <climits>
    +
    85 #include <cfloat>
    +
    86 #include <limits>
    +
    87 #include <cstdio>
    +
    88 //#include <type_traits>
    +
    89 #include "core/setup.hpp"
    +
    90 
    +
    91 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED))
    +
    92 # define GLM_MESSAGE_CORE_INCLUDED_DISPLAYED
    +
    93 # pragma message("GLM: Core library included")
    +
    94 #endif//GLM_MESSAGE
    +
    95 
    +
    96 #include "./core/_detail.hpp"
    +
    97 #include "./core/_vectorize.hpp"
    +
    98 #include "./core/type.hpp"
    +
    99 
    + + +
    102 #include "./core/func_common.hpp"
    +
    103 #include "./core/func_packing.hpp"
    +
    104 #include "./core/func_geometric.hpp"
    +
    105 #include "./core/func_matrix.hpp"
    + +
    107 #include "./core/func_integer.hpp"
    +
    108 #include "./core/func_noise.hpp"
    +
    109 #include "./core/_swizzle.hpp"
    +
    110 
    +
    112 // check type sizes
    +
    113 #ifndef GLM_STATIC_ASSERT_NULL
    +
    114  GLM_STATIC_ASSERT(sizeof(glm::detail::int8) == 1, "int8 size isn't 1 byte on this platform");
    +
    115  GLM_STATIC_ASSERT(sizeof(glm::detail::int16) == 2, "int16 size isn't 2 bytes on this platform");
    +
    116  GLM_STATIC_ASSERT(sizeof(glm::detail::int32) == 4, "int32 size isn't 4 bytes on this platform");
    +
    117  GLM_STATIC_ASSERT(sizeof(glm::detail::int64) == 8, "int64 size isn't 8 bytes on this platform");
    +
    118 
    +
    119  GLM_STATIC_ASSERT(sizeof(glm::detail::uint8) == 1, "uint8 size isn't 1 byte on this platform");
    +
    120  GLM_STATIC_ASSERT(sizeof(glm::detail::uint16) == 2, "uint16 size isn't 2 bytes on this platform");
    +
    121  GLM_STATIC_ASSERT(sizeof(glm::detail::uint32) == 4, "uint32 size isn't 4 bytes on this platform");
    +
    122  GLM_STATIC_ASSERT(sizeof(glm::detail::uint64) == 8, "uint64 size isn't 8 bytes on this platform");
    +
    123 
    +
    124  GLM_STATIC_ASSERT(sizeof(glm::detail::float16) == 2, "float16 size isn't 2 bytes on this platform");
    +
    125  GLM_STATIC_ASSERT(sizeof(glm::detail::float32) == 4, "float32 size isn't 4 bytes on this platform");
    +
    126  GLM_STATIC_ASSERT(sizeof(glm::detail::float64) == 8, "float64 size isn't 8 bytes on this platform");
    +
    127 #endif//GLM_STATIC_ASSERT_NULL
    +
    128 
    +
    129 #endif//glm_glm
    +
    + - diff --git a/doc/api/a00036.html b/doc/api/a00036.html index b46edda4..e5183185 100644 --- a/doc/api/a00036.html +++ b/doc/api/a00036.html @@ -2,42 +2,31 @@ - + gradient_paint.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,49 @@
  • File List
  • + +
    gradient_paint.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + +

    +

    Functions

    template<typename valType >
    valType linearGradient (detail::tvec2< valType > const &Point0, detail::tvec2< valType > const &Point1, detail::tvec2< valType > const &Position)
    template<typename valType >
    valType radialGradient (detail::tvec2< valType > const &Center, valType const &Radius, detail::tvec2< valType > const &Focal, detail::tvec2< valType > const &Position)
    template<typename valType >
    valType linearGradient (detail::tvec2< valType > const &Point0, detail::tvec2< valType > const &Point1, detail::tvec2< valType > const &Position)
     
    template<typename valType >
    valType radialGradient (detail::tvec2< valType > const &Center, valType const &Radius, detail::tvec2< valType > const &Focal, detail::tvec2< valType > const &Position)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_gradient_paint: Procedural gradient color

    -
    Date:
    2009-03-06 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_gradient_paint

    +
    Date
    2009-03-06 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_optimum_pow: Optimum pow (dependence)
    +GLM_GTX_optimum_pow (dependence)

    Definition in file gradient_paint.hpp.

    -
    - - + + - diff --git a/doc/api/a00036_source.html b/doc/api/a00036_source.html index e1950b70..58669c82 100644 --- a/doc/api/a00036_source.html +++ b/doc/api/a00036_source.html @@ -2,42 +2,31 @@ - + gradient_paint.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,89 +35,91 @@
  • File List
  • + +
    gradient_paint.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_gradient_paint
    -00039 #define GLM_GTX_gradient_paint GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 #include "../gtx/optimum_pow.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_gradient_paint extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056         template <typename valType>
    -00057         valType radialGradient(
    -00058                 detail::tvec2<valType> const & Center,
    -00059                 valType const & Radius,
    -00060                 detail::tvec2<valType> const & Focal,
    -00061                 detail::tvec2<valType> const & Position);
    -00062 
    -00065         template <typename valType>
    -00066         valType linearGradient(
    -00067                 detail::tvec2<valType> const & Point0,
    -00068                 detail::tvec2<valType> const & Point1,
    -00069                 detail::tvec2<valType> const & Position);
    -00070 
    -00072 }// namespace glm
    -00073 
    -00074 #include "gradient_paint.inl"
    -00075 
    -00076 #endif//GLM_GTX_gradient_paint
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_gradient_paint
    +
    39 #define GLM_GTX_gradient_paint GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtx/optimum_pow.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_gradient_paint extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename valType>
    +
    57  valType radialGradient(
    +
    58  detail::tvec2<valType> const & Center,
    +
    59  valType const & Radius,
    +
    60  detail::tvec2<valType> const & Focal,
    +
    61  detail::tvec2<valType> const & Position);
    +
    62 
    +
    65  template <typename valType>
    +
    66  valType linearGradient(
    +
    67  detail::tvec2<valType> const & Point0,
    +
    68  detail::tvec2<valType> const & Point1,
    +
    69  detail::tvec2<valType> const & Position);
    +
    70 
    +
    72 }// namespace glm
    +
    73 
    +
    74 #include "gradient_paint.inl"
    +
    75 
    +
    76 #endif//GLM_GTX_gradient_paint
    +
    + - diff --git a/doc/api/a00037.html b/doc/api/a00037.html index 681b54e7..f90e6499 100644 --- a/doc/api/a00037.html +++ b/doc/api/a00037.html @@ -2,42 +2,31 @@ - + half_float.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,70 +35,100 @@
  • File List
  • + +
    +Typedefs | +Functions
    half_float.hpp File Reference
    - +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Typedefs

    typedef detail::half half
    typedef detail::tmat2x2
    -< detail::half > 
    hmat2
    typedef detail::tmat2x2
    -< detail::half > 
    hmat2x2
    typedef detail::tmat2x3
    -< detail::half > 
    hmat2x3
    typedef detail::tmat2x4
    -< detail::half > 
    hmat2x4
    typedef detail::tmat3x3
    -< detail::half > 
    hmat3
    typedef detail::tmat3x2
    -< detail::half > 
    hmat3x2
    typedef detail::tmat3x3
    -< detail::half > 
    hmat3x3
    typedef detail::tmat3x4
    -< detail::half > 
    hmat3x4
    typedef detail::tmat4x4
    -< detail::half > 
    hmat4
    typedef detail::tmat4x2
    -< detail::half > 
    hmat4x2
    typedef detail::tmat4x3
    -< detail::half > 
    hmat4x3
    typedef detail::tmat4x4
    -< detail::half > 
    hmat4x4
    typedef detail::tvec2
    -< detail::half > 
    hvec2
    typedef detail::tvec3
    -< detail::half > 
    hvec3
    typedef detail::tvec4
    -< detail::half > 
    hvec4
    typedef detail::half half
     
    typedef detail::tmat2x2
    +< detail::half > 
    hmat2
     
    typedef detail::tmat2x2
    +< detail::half > 
    hmat2x2
     
    typedef detail::tmat2x3
    +< detail::half > 
    hmat2x3
     
    typedef detail::tmat2x4
    +< detail::half > 
    hmat2x4
     
    typedef detail::tmat3x3
    +< detail::half > 
    hmat3
     
    typedef detail::tmat3x2
    +< detail::half > 
    hmat3x2
     
    typedef detail::tmat3x3
    +< detail::half > 
    hmat3x3
     
    typedef detail::tmat3x4
    +< detail::half > 
    hmat3x4
     
    typedef detail::tmat4x4
    +< detail::half > 
    hmat4
     
    typedef detail::tmat4x2
    +< detail::half > 
    hmat4x2
     
    typedef detail::tmat4x3
    +< detail::half > 
    hmat4x3
     
    typedef detail::tmat4x4
    +< detail::half > 
    hmat4x4
     
    typedef detail::tvec2
    +< detail::half > 
    hvec2
     
    typedef detail::tvec3
    +< detail::half > 
    hvec3
     
    typedef detail::tvec4
    +< detail::half > 
    hvec4
     
    + + + + + + + + +

    +Functions

    half abs (half const &x)
     
    hvec2 abs (hvec2 const &x)
     
    hvec3 abs (hvec3 const &x)
     
    hvec4 abs (hvec4 const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_half_float: Half-precision floating-point based types and functions

    -
    Date:
    2009-04-29 / 2011-06-05
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_half_float

    +
    Date
    2009-04-29 / 2012-11-06
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file half_float.hpp.

    -
    - - + + - diff --git a/doc/api/a00037_source.html b/doc/api/a00037_source.html index ebaee240..d001631d 100644 --- a/doc/api/a00037_source.html +++ b/doc/api/a00037_source.html @@ -2,42 +2,31 @@ - + half_float.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,362 +35,372 @@
  • File List
  • + +
    half_float.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 #ifndef GLM_GTC_half_float
    -00038 #define GLM_GTC_half_float GLM_VERSION
    -00039 
    -00040 // Dependency:
    -00041 #include "../glm.hpp"
    -00042 
    -00043 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00044 #       pragma message("GLM: GLM_GTC_half_float extension included")
    -00045 #endif
    -00046 
    -00047 namespace glm{
    -00048 namespace detail
    -00049 {
    -00050 #if(!GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE())
    -00051         template <>
    -00052         struct tvec2<half>
    -00053         {
    -00054                 enum ctor{null};
    -00055                 typedef half value_type;
    -00056                 typedef std::size_t size_type;
    -00057 
    -00058         GLM_FUNC_DECL size_type length() const;
    -00059                 static GLM_FUNC_DECL size_type value_size();
    -00060 
    -00061                 typedef tvec2<half> type;
    -00062                 typedef tvec2<bool> bool_type;
    -00063 
    -00065                 // Data
    -00066 
    -00067                 half x, y;
    -00068 
    -00070                 // Accesses
    -00071 
    -00072                 half & operator[](size_type i);
    -00073                 half const & operator[](size_type i) const;
    -00074 
    -00076                 // Implicit basic constructors
    -00077 
    -00078                 tvec2();
    -00079                 tvec2(tvec2<half> const & v);
    -00080 
    -00082                 // Explicit basic constructors
    -00083 
    -00084                 explicit tvec2(ctor);
    -00085                 explicit tvec2(
    -00086                         half const & s);
    -00087                 explicit tvec2(
    -00088                         half const & s1, 
    -00089                         half const & s2);
    -00090 
    -00092                 // Swizzle constructors
    -00093 
    -00094                 tvec2(tref2<half> const & r);
    -00095 
    -00097                 // Convertion scalar constructors
    -00098 
    -00100                 template <typename U> 
    -00101                 explicit tvec2(U const & x);
    -00103                 template <typename U, typename V> 
    -00104                 explicit tvec2(U const & x, V const & y);                       
    -00105 
    -00107                 // Convertion vector constructors
    -00108 
    -00110                 template <typename U> 
    -00111                 explicit tvec2(tvec2<U> const & v);
    -00113                 template <typename U> 
    -00114                 explicit tvec2(tvec3<U> const & v);
    -00116                 template <typename U> 
    -00117                 explicit tvec2(tvec4<U> const & v);
    -00118 
    -00120                 // Unary arithmetic operators
    -00121 
    -00122                 tvec2<half>& operator= (tvec2<half> const & v);
    -00123 
    -00124                 tvec2<half>& operator+=(half const & s);
    -00125                 tvec2<half>& operator+=(tvec2<half> const & v);
    -00126                 tvec2<half>& operator-=(half const & s);
    -00127                 tvec2<half>& operator-=(tvec2<half> const & v);
    -00128                 tvec2<half>& operator*=(half const & s);
    -00129                 tvec2<half>& operator*=(tvec2<half> const & v);
    -00130                 tvec2<half>& operator/=(half const & s);
    -00131                 tvec2<half>& operator/=(tvec2<half> const & v);
    -00132                 tvec2<half>& operator++();
    -00133                 tvec2<half>& operator--();
    -00134 
    -00136                 // Swizzle operators
    -00137 
    -00138                 half swizzle(comp X) const;
    -00139                 tvec2<half> swizzle(comp X, comp Y) const;
    -00140                 tvec3<half> swizzle(comp X, comp Y, comp Z) const;
    -00141                 tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
    -00142                 tref2<half> swizzle(comp X, comp Y);
    -00143         };
    -00144 
    -00145         template <>
    -00146         struct tvec3<half>
    -00147         {
    -00148                 enum ctor{null};
    -00149                 typedef half value_type;
    -00150                 typedef std::size_t size_type;
    -00151         GLM_FUNC_DECL size_type length() const;
    -00152                 static GLM_FUNC_DECL size_type value_size();
    -00153 
    -00154                 typedef tvec3<half> type;
    -00155                 typedef tvec3<bool> bool_type;
    -00156 
    -00158                 // Data
    -00159 
    -00160                 half x, y, z;
    -00161 
    -00163                 // Accesses
    -00164 
    -00165                 half & operator[](size_type i);
    -00166                 half const & operator[](size_type i) const;
    -00167 
    -00169                 // Implicit basic constructors
    -00170 
    -00171                 tvec3();
    -00172                 tvec3(tvec3<half> const & v);
    -00173 
    -00175                 // Explicit basic constructors
    -00176 
    -00177                 explicit tvec3(ctor);
    -00178                 explicit tvec3(
    -00179                         half const & s);
    -00180                 explicit tvec3(
    -00181                         half const & s1, 
    -00182                         half const & s2, 
    -00183                         half const & s3);
    -00184 
    -00186                 // Swizzle constructors
    -00187 
    -00188                 tvec3(tref3<half> const & r);
    -00189 
    -00191                 // Convertion scalar constructors
    -00192 
    -00194                 template <typename U> 
    -00195                 explicit tvec3(U const & x);
    -00197                 template <typename U, typename V, typename W> 
    -00198                 explicit tvec3(U const & x, V const & y, W const & z);                  
    -00199 
    -00201                 // Convertion vector constructors
    -00202 
    -00204                 template <typename A, typename B> 
    -00205                 explicit tvec3(tvec2<A> const & v, B const & s);
    -00207                 template <typename A, typename B> 
    -00208                 explicit tvec3(A const & s, tvec2<B> const & v);
    -00210                 template <typename U> 
    -00211                 explicit tvec3(tvec3<U> const & v);
    -00213                 template <typename U> 
    -00214                 explicit tvec3(tvec4<U> const & v);
    -00215 
    -00217                 // Unary arithmetic operators
    -00218 
    -00219                 tvec3<half>& operator= (tvec3<half> const & v);
    -00220 
    -00221                 tvec3<half>& operator+=(half const & s);
    -00222                 tvec3<half>& operator+=(tvec3<half> const & v);
    -00223                 tvec3<half>& operator-=(half const & s);
    -00224                 tvec3<half>& operator-=(tvec3<half> const & v);
    -00225                 tvec3<half>& operator*=(half const & s);
    -00226                 tvec3<half>& operator*=(tvec3<half> const & v);
    -00227                 tvec3<half>& operator/=(half const & s);
    -00228                 tvec3<half>& operator/=(tvec3<half> const & v);
    -00229                 tvec3<half>& operator++();
    -00230                 tvec3<half>& operator--();
    -00231 
    -00233                 // Swizzle operators
    -00234 
    -00235                 half swizzle(comp X) const;
    -00236                 tvec2<half> swizzle(comp X, comp Y) const;
    -00237                 tvec3<half> swizzle(comp X, comp Y, comp Z) const;
    -00238                 tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
    -00239                 tref3<half> swizzle(comp X, comp Y, comp Z);
    -00240         };
    -00241 
    -00242         template <>
    -00243         struct tvec4<half>
    -00244         {
    -00245                 enum ctor{null};
    -00246                 typedef half value_type;
    -00247                 typedef std::size_t size_type;
    -00248         GLM_FUNC_DECL size_type length() const;
    -00249                 static GLM_FUNC_DECL size_type value_size();
    -00250 
    -00251                 typedef tvec4<half> type;
    -00252                 typedef tvec4<bool> bool_type;
    -00253 
    -00255                 // Data
    -00256 
    -00257                 half x, y, z, w;
    -00258 
    -00260                 // Accesses
    -00261 
    -00262                 half & operator[](size_type i);
    -00263                 half const & operator[](size_type i) const;
    -00264 
    -00266                 // Implicit basic constructors
    -00267 
    -00268                 tvec4();
    -00269                 tvec4(tvec4<half> const & v);
    -00270 
    -00272                 // Explicit basic constructors
    -00273 
    -00274                 explicit tvec4(ctor);
    -00275                 explicit tvec4(
    -00276                         half const & s);
    -00277                 explicit tvec4(
    -00278                         half const & s0, 
    -00279                         half const & s1, 
    -00280                         half const & s2, 
    -00281                         half const & s3);
    -00282 
    -00284                 // Swizzle constructors
    -00285 
    -00286                 tvec4(tref4<half> const & r);
    -00287 
    -00289                 // Convertion scalar constructors
    -00290 
    -00292                 template <typename U> 
    -00293                 explicit tvec4(U const & x);
    -00295                 template <typename A, typename B, typename C, typename D> 
    -00296                 explicit tvec4(A const & x, B const & y, C const & z, D const & w);                     
    -00297 
    -00299                 // Convertion vector constructors
    -00300 
    -00302                 template <typename A, typename B, typename C> 
    -00303                 explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
    -00305                 template <typename A, typename B, typename C> 
    -00306                 explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
    -00308                 template <typename A, typename B, typename C> 
    -00309                 explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
    -00311                 template <typename A, typename B> 
    -00312                 explicit tvec4(tvec3<A> const & v, B const & s);
    -00314                 template <typename A, typename B> 
    -00315                 explicit tvec4(A const & s, tvec3<B> const & v);
    -00317                 template <typename A, typename B> 
    -00318                 explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
    -00320                 template <typename U> 
    -00321                 explicit tvec4(tvec4<U> const & v);
    -00322 
    -00324                 // Unary arithmetic operators
    -00325 
    -00326                 tvec4<half>& operator= (tvec4<half> const & v);
    -00327 
    -00328                 tvec4<half>& operator+=(half const & s);
    -00329                 tvec4<half>& operator+=(tvec4<half> const & v);
    -00330                 tvec4<half>& operator-=(half const & s);
    -00331                 tvec4<half>& operator-=(tvec4<half> const & v);
    -00332                 tvec4<half>& operator*=(half const & s);
    -00333                 tvec4<half>& operator*=(tvec4<half> const & v);
    -00334                 tvec4<half>& operator/=(half const & s);
    -00335                 tvec4<half>& operator/=(tvec4<half> const & v);
    -00336                 tvec4<half>& operator++();
    -00337                 tvec4<half>& operator--();
    -00338 
    -00340                 // Swizzle operators
    -00341 
    -00342                 half swizzle(comp X) const;
    -00343                 tvec2<half> swizzle(comp X, comp Y) const;
    -00344                 tvec3<half> swizzle(comp X, comp Y, comp Z) const;
    -00345                 tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
    -00346                 tref4<half> swizzle(comp X, comp Y, comp Z, comp W);
    -00347         };
    -00348 #endif//(!GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE())
    -00349 }
    -00350 //namespace detail
    -00351 
    -00354 
    -00357         typedef detail::half                                    half;
    -00358 
    -00361         typedef detail::tvec2<detail::half>     hvec2;
    -00362 
    -00365         typedef detail::tvec3<detail::half>     hvec3;
    -00366 
    -00369         typedef detail::tvec4<detail::half>     hvec4;
    -00370 
    -00373         typedef detail::tmat2x2<detail::half>   hmat2;
    -00374     
    -00377         typedef detail::tmat3x3<detail::half>   hmat3;
    -00378 
    -00381         typedef detail::tmat4x4<detail::half>   hmat4;
    -00382 
    -00385         typedef detail::tmat2x2<detail::half>   hmat2x2;
    -00386     
    -00389         typedef detail::tmat2x3<detail::half>   hmat2x3;
    -00390     
    -00393         typedef detail::tmat2x4<detail::half>   hmat2x4;
    -00394 
    -00397         typedef detail::tmat3x2<detail::half>   hmat3x2;
    -00398     
    -00401         typedef detail::tmat3x3<detail::half>   hmat3x3;
    -00402     
    -00405         typedef detail::tmat3x4<detail::half>   hmat3x4;
    -00406 
    -00409         typedef detail::tmat4x2<detail::half>   hmat4x2;    
    -00410 
    -00413         typedef detail::tmat4x3<detail::half>   hmat4x3;
    -00414     
    -00417         typedef detail::tmat4x4<detail::half>   hmat4x4;
    -00418     
    -00420 }// namespace glm
    -00421 
    -00422 #include "half_float.inl"
    -00423 
    -00424 #endif//GLM_GTC_half_float
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 #ifndef GLM_GTC_half_float
    +
    38 #define GLM_GTC_half_float GLM_VERSION
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    44 # pragma message("GLM: GLM_GTC_half_float extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm{
    +
    48 namespace detail
    +
    49 {
    +
    50 #if(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    +
    51  template <>
    +
    52  struct tvec2<half>
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef half value_type;
    +
    56  typedef std::size_t size_type;
    +
    57 
    +
    58  GLM_FUNC_DECL size_type length() const;
    +
    59  static GLM_FUNC_DECL size_type value_size();
    +
    60 
    +
    61  typedef tvec2<half> type;
    +
    62  typedef tvec2<bool> bool_type;
    +
    63 
    +
    65  // Data
    +
    66 
    +
    67  half x, y;
    +
    68 
    +
    70  // Accesses
    +
    71 
    +
    72  half & operator[](size_type i);
    +
    73  half const & operator[](size_type i) const;
    +
    74 
    +
    76  // Implicit basic constructors
    +
    77 
    +
    78  tvec2();
    +
    79  tvec2(tvec2<half> const & v);
    +
    80 
    +
    82  // Explicit basic constructors
    +
    83 
    +
    84  explicit tvec2(ctor);
    +
    85  explicit tvec2(
    +
    86  half const & s);
    +
    87  explicit tvec2(
    +
    88  half const & s1,
    +
    89  half const & s2);
    +
    90 
    +
    92  // Swizzle constructors
    +
    93 
    +
    94  tvec2(tref2<half> const & r);
    +
    95 
    +
    97  // Convertion scalar constructors
    +
    98 
    +
    100  template <typename U>
    +
    101  explicit tvec2(U const & x);
    +
    103  template <typename U, typename V>
    +
    104  explicit tvec2(U const & x, V const & y);
    +
    105 
    +
    107  // Convertion vector constructors
    +
    108 
    +
    110  template <typename U>
    +
    111  explicit tvec2(tvec2<U> const & v);
    +
    113  template <typename U>
    +
    114  explicit tvec2(tvec3<U> const & v);
    +
    116  template <typename U>
    +
    117  explicit tvec2(tvec4<U> const & v);
    +
    118 
    +
    120  // Unary arithmetic operators
    +
    121 
    +
    122  tvec2<half>& operator= (tvec2<half> const & v);
    +
    123 
    +
    124  tvec2<half>& operator+=(half const & s);
    +
    125  tvec2<half>& operator+=(tvec2<half> const & v);
    +
    126  tvec2<half>& operator-=(half const & s);
    +
    127  tvec2<half>& operator-=(tvec2<half> const & v);
    +
    128  tvec2<half>& operator*=(half const & s);
    +
    129  tvec2<half>& operator*=(tvec2<half> const & v);
    +
    130  tvec2<half>& operator/=(half const & s);
    +
    131  tvec2<half>& operator/=(tvec2<half> const & v);
    +
    132  tvec2<half>& operator++();
    +
    133  tvec2<half>& operator--();
    +
    134 
    +
    136  // Swizzle operators
    +
    137 
    +
    138  half swizzle(comp X) const;
    +
    139  tvec2<half> swizzle(comp X, comp Y) const;
    +
    140  tvec3<half> swizzle(comp X, comp Y, comp Z) const;
    +
    141  tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
    +
    142  tref2<half> swizzle(comp X, comp Y);
    +
    143  };
    +
    144 
    +
    145  template <>
    +
    146  struct tvec3<half>
    +
    147  {
    +
    148  enum ctor{null};
    +
    149  typedef half value_type;
    +
    150  typedef std::size_t size_type;
    +
    151  GLM_FUNC_DECL size_type length() const;
    +
    152  static GLM_FUNC_DECL size_type value_size();
    +
    153 
    +
    154  typedef tvec3<half> type;
    +
    155  typedef tvec3<bool> bool_type;
    +
    156 
    +
    158  // Data
    +
    159 
    +
    160  half x, y, z;
    +
    161 
    +
    163  // Accesses
    +
    164 
    +
    165  half & operator[](size_type i);
    +
    166  half const & operator[](size_type i) const;
    +
    167 
    +
    169  // Implicit basic constructors
    +
    170 
    +
    171  tvec3();
    +
    172  tvec3(tvec3<half> const & v);
    +
    173 
    +
    175  // Explicit basic constructors
    +
    176 
    +
    177  explicit tvec3(ctor);
    +
    178  explicit tvec3(
    +
    179  half const & s);
    +
    180  explicit tvec3(
    +
    181  half const & s1,
    +
    182  half const & s2,
    +
    183  half const & s3);
    +
    184 
    +
    186  // Swizzle constructors
    +
    187 
    +
    188  tvec3(tref3<half> const & r);
    +
    189 
    +
    191  // Convertion scalar constructors
    +
    192 
    +
    194  template <typename U>
    +
    195  explicit tvec3(U const & x);
    +
    197  template <typename U, typename V, typename W>
    +
    198  explicit tvec3(U const & x, V const & y, W const & z);
    +
    199 
    +
    201  // Convertion vector constructors
    +
    202 
    +
    204  template <typename A, typename B>
    +
    205  explicit tvec3(tvec2<A> const & v, B const & s);
    +
    207  template <typename A, typename B>
    +
    208  explicit tvec3(A const & s, tvec2<B> const & v);
    +
    210  template <typename U>
    +
    211  explicit tvec3(tvec3<U> const & v);
    +
    213  template <typename U>
    +
    214  explicit tvec3(tvec4<U> const & v);
    +
    215 
    +
    217  // Unary arithmetic operators
    +
    218 
    +
    219  tvec3<half>& operator= (tvec3<half> const & v);
    +
    220 
    +
    221  tvec3<half>& operator+=(half const & s);
    +
    222  tvec3<half>& operator+=(tvec3<half> const & v);
    +
    223  tvec3<half>& operator-=(half const & s);
    +
    224  tvec3<half>& operator-=(tvec3<half> const & v);
    +
    225  tvec3<half>& operator*=(half const & s);
    +
    226  tvec3<half>& operator*=(tvec3<half> const & v);
    +
    227  tvec3<half>& operator/=(half const & s);
    +
    228  tvec3<half>& operator/=(tvec3<half> const & v);
    +
    229  tvec3<half>& operator++();
    +
    230  tvec3<half>& operator--();
    +
    231 
    +
    233  // Swizzle operators
    +
    234 
    +
    235  half swizzle(comp X) const;
    +
    236  tvec2<half> swizzle(comp X, comp Y) const;
    +
    237  tvec3<half> swizzle(comp X, comp Y, comp Z) const;
    +
    238  tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
    +
    239  tref3<half> swizzle(comp X, comp Y, comp Z);
    +
    240  };
    +
    241 
    +
    242  template <>
    +
    243  struct tvec4<half>
    +
    244  {
    +
    245  enum ctor{null};
    +
    246  typedef half value_type;
    +
    247  typedef std::size_t size_type;
    +
    248  GLM_FUNC_DECL size_type length() const;
    +
    249  static GLM_FUNC_DECL size_type value_size();
    +
    250 
    +
    251  typedef tvec4<half> type;
    +
    252  typedef tvec4<bool> bool_type;
    +
    253 
    +
    255  // Data
    +
    256 
    +
    257  half x, y, z, w;
    +
    258 
    +
    260  // Accesses
    +
    261 
    +
    262  half & operator[](size_type i);
    +
    263  half const & operator[](size_type i) const;
    +
    264 
    +
    266  // Implicit basic constructors
    +
    267 
    +
    268  tvec4();
    +
    269  tvec4(tvec4<half> const & v);
    +
    270 
    +
    272  // Explicit basic constructors
    +
    273 
    +
    274  explicit tvec4(ctor);
    +
    275  explicit tvec4(
    +
    276  half const & s);
    +
    277  explicit tvec4(
    +
    278  half const & s0,
    +
    279  half const & s1,
    +
    280  half const & s2,
    +
    281  half const & s3);
    +
    282 
    +
    284  // Swizzle constructors
    +
    285 
    +
    286  tvec4(tref4<half> const & r);
    +
    287 
    +
    289  // Convertion scalar constructors
    +
    290 
    +
    292  template <typename U>
    +
    293  explicit tvec4(U const & x);
    +
    295  template <typename A, typename B, typename C, typename D>
    +
    296  explicit tvec4(A const & x, B const & y, C const & z, D const & w);
    +
    297 
    +
    299  // Convertion vector constructors
    +
    300 
    +
    302  template <typename A, typename B, typename C>
    +
    303  explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
    +
    305  template <typename A, typename B, typename C>
    +
    306  explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
    +
    308  template <typename A, typename B, typename C>
    +
    309  explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
    +
    311  template <typename A, typename B>
    +
    312  explicit tvec4(tvec3<A> const & v, B const & s);
    +
    314  template <typename A, typename B>
    +
    315  explicit tvec4(A const & s, tvec3<B> const & v);
    +
    317  template <typename A, typename B>
    +
    318  explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
    +
    320  template <typename U>
    +
    321  explicit tvec4(tvec4<U> const & v);
    +
    322 
    +
    324  // Unary arithmetic operators
    +
    325 
    +
    326  tvec4<half>& operator= (tvec4<half> const & v);
    +
    327 
    +
    328  tvec4<half>& operator+=(half const & s);
    +
    329  tvec4<half>& operator+=(tvec4<half> const & v);
    +
    330  tvec4<half>& operator-=(half const & s);
    +
    331  tvec4<half>& operator-=(tvec4<half> const & v);
    +
    332  tvec4<half>& operator*=(half const & s);
    +
    333  tvec4<half>& operator*=(tvec4<half> const & v);
    +
    334  tvec4<half>& operator/=(half const & s);
    +
    335  tvec4<half>& operator/=(tvec4<half> const & v);
    +
    336  tvec4<half>& operator++();
    +
    337  tvec4<half>& operator--();
    +
    338 
    +
    340  // Swizzle operators
    +
    341 
    +
    342  half swizzle(comp X) const;
    +
    343  tvec2<half> swizzle(comp X, comp Y) const;
    +
    344  tvec3<half> swizzle(comp X, comp Y, comp Z) const;
    +
    345  tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
    +
    346  tref4<half> swizzle(comp X, comp Y, comp Z, comp W);
    +
    347  };
    +
    348 #endif//(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    +
    349 }
    +
    350 //namespace detail
    +
    351 
    +
    354 
    + +
    358 
    +
    361  typedef detail::tvec2<detail::half> hvec2;
    +
    362 
    +
    365  typedef detail::tvec3<detail::half> hvec3;
    +
    366 
    +
    369  typedef detail::tvec4<detail::half> hvec4;
    +
    370 
    +
    373  typedef detail::tmat2x2<detail::half> hmat2;
    +
    374 
    +
    377  typedef detail::tmat3x3<detail::half> hmat3;
    +
    378 
    +
    381  typedef detail::tmat4x4<detail::half> hmat4;
    +
    382 
    +
    385  typedef detail::tmat2x2<detail::half> hmat2x2;
    +
    386 
    +
    389  typedef detail::tmat2x3<detail::half> hmat2x3;
    +
    390 
    +
    393  typedef detail::tmat2x4<detail::half> hmat2x4;
    +
    394 
    +
    397  typedef detail::tmat3x2<detail::half> hmat3x2;
    +
    398 
    +
    401  typedef detail::tmat3x3<detail::half> hmat3x3;
    +
    402 
    +
    405  typedef detail::tmat3x4<detail::half> hmat3x4;
    +
    406 
    +
    409  typedef detail::tmat4x2<detail::half> hmat4x2;
    +
    410 
    +
    413  typedef detail::tmat4x3<detail::half> hmat4x3;
    +
    414 
    +
    417  typedef detail::tmat4x4<detail::half> hmat4x4;
    +
    418 
    +
    421  half abs(half const & x);
    +
    422 
    +
    425  hvec2 abs(hvec2 const & x);
    +
    426 
    +
    429  hvec3 abs(hvec3 const & x);
    +
    430 
    +
    433  hvec4 abs(hvec4 const & x);
    +
    434 
    +
    436 }// namespace glm
    +
    437 
    +
    438 #include "half_float.inl"
    +
    439 
    +
    440 #endif//GLM_GTC_half_float
    +
    + - diff --git a/doc/api/a00038.html b/doc/api/a00038.html index 48b582c2..c0e41ae4 100644 --- a/doc/api/a00038.html +++ b/doc/api/a00038.html @@ -2,42 +2,31 @@ - + handed_coordinate_space.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,43 +35,47 @@
  • File List
  • + +
    handed_coordinate_space.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + +

    +

    Functions

    template<typename T >
    bool leftHanded (detail::tvec3< T > const &tangent, detail::tvec3< T > const &binormal, detail::tvec3< T > const &normal)
    template<typename T >
    bool rightHanded (detail::tvec3< T > const &tangent, detail::tvec3< T > const &binormal, detail::tvec3< T > const &normal)
    template<typename T >
    bool leftHanded (detail::tvec3< T > const &tangent, detail::tvec3< T > const &binormal, detail::tvec3< T > const &normal)
     
    template<typename T >
    bool rightHanded (detail::tvec3< T > const &tangent, detail::tvec3< T > const &binormal, detail::tvec3< T > const &normal)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_handed_coordinate_space: Space Handedness

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_handed_coordinate_space

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file handed_coordinate_space.hpp.

    -
    - - + + - diff --git a/doc/api/a00038_source.html b/doc/api/a00038_source.html index 1a48a465..e723b729 100644 --- a/doc/api/a00038_source.html +++ b/doc/api/a00038_source.html @@ -2,42 +2,31 @@ - + handed_coordinate_space.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,87 +35,89 @@
  • File List
  • + +
    handed_coordinate_space.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_handed_coordinate_space
    -00039 #define GLM_GTX_handed_coordinate_space GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename T> 
    -00056         bool rightHanded(
    -00057                 detail::tvec3<T> const & tangent, 
    -00058                 detail::tvec3<T> const & binormal, 
    -00059                 detail::tvec3<T> const & normal);
    -00060 
    -00063         template <typename T> 
    -00064         bool leftHanded(
    -00065                 detail::tvec3<T> const & tangent, 
    -00066                 detail::tvec3<T> const & binormal, 
    -00067                 detail::tvec3<T> const & normal);
    -00068 
    -00070 }// namespace glm
    -00071 
    -00072 #include "handed_coordinate_space.inl"
    -00073 
    -00074 #endif//GLM_GTX_handed_coordinate_space
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_handed_coordinate_space
    +
    39 #define GLM_GTX_handed_coordinate_space GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T>
    +
    56  bool rightHanded(
    +
    57  detail::tvec3<T> const & tangent,
    +
    58  detail::tvec3<T> const & binormal,
    +
    59  detail::tvec3<T> const & normal);
    +
    60 
    +
    63  template <typename T>
    +
    64  bool leftHanded(
    +
    65  detail::tvec3<T> const & tangent,
    +
    66  detail::tvec3<T> const & binormal,
    +
    67  detail::tvec3<T> const & normal);
    +
    68 
    +
    70 }// namespace glm
    +
    71 
    +
    72 #include "handed_coordinate_space.inl"
    +
    73 
    +
    74 #endif//GLM_GTX_handed_coordinate_space
    +
    + - diff --git a/doc/api/a00039.html b/doc/api/a00039.html index 35dee466..7a82c764 100644 --- a/doc/api/a00039.html +++ b/doc/api/a00039.html @@ -2,42 +2,31 @@ - + hint.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    hint.hpp File Reference
    -
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-14 / 2011-06-15
    -
    Author:
    Christophe Riccio
    +

    GLM Core

    +
    Date
    2008-08-14 / 2011-06-15
    +
    Author
    Christophe Riccio

    Definition in file hint.hpp.

    -
    - - + + - diff --git a/doc/api/a00039_source.html b/doc/api/a00039_source.html index 6440bcb9..48731927 100644 --- a/doc/api/a00039_source.html +++ b/doc/api/a00039_source.html @@ -2,42 +2,31 @@ - + hint.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,60 +35,62 @@
  • File List
  • + +
    hint.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type
    -00030 #define glm_core_type
    -00031 
    -00032 namespace glm
    -00033 {
    -00034         // Use dont_care, nicest and fastest to optimize implementations.
    -00035         class dont_care {};
    -00036         class nicest {};
    -00037         class fastest {};
    -00038 }//namespace glm
    -00039 
    -00040 #endif//glm_core_type
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type
    +
    30 #define glm_core_type
    +
    31 
    +
    32 namespace glm
    +
    33 {
    +
    34  // Use dont_care, nicest and fastest to optimize implementations.
    +
    35  class dont_care {};
    +
    36  class nicest {};
    +
    37  class fastest {};
    +
    38 }//namespace glm
    +
    39 
    +
    40 #endif//glm_core_type
    +
    + - diff --git a/doc/api/a00040.html b/doc/api/a00040.html index ac65714f..e69343bb 100644 --- a/doc/api/a00040.html +++ b/doc/api/a00040.html @@ -2,42 +2,31 @@ - + inertia.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,57 +35,67 @@
  • File List
  • + +
    inertia.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat3x3< T > ballInertia3 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat4x4< T > ballInertia4 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat3x3< T > boxInertia3 (T const &Mass, detail::tvec3< T > const &Scale)
    template<typename T >
    detail::tmat4x4< T > boxInertia4 (T const &Mass, detail::tvec3< T > const &Scale)
    template<typename T >
    detail::tmat3x3< T > diskInertia3 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat4x4< T > diskInertia4 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat3x3< T > sphereInertia3 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat4x4< T > sphereInertia4 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat3x3< T > ballInertia3 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat4x4< T > ballInertia4 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat3x3< T > boxInertia3 (T const &Mass, detail::tvec3< T > const &Scale)
     
    template<typename T >
    detail::tmat4x4< T > boxInertia4 (T const &Mass, detail::tvec3< T > const &Scale)
     
    template<typename T >
    detail::tmat3x3< T > diskInertia3 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat4x4< T > diskInertia4 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat3x3< T > sphereInertia3 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat4x4< T > sphereInertia4 (T const &Mass, T const &Radius)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_inertia: Intertial matrix

    -
    Date:
    2006-04-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_inertia

    +
    Date
    2006-04-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    +GLM_GTX_extented_min_max (dependence)

    Definition in file inertia.hpp.

    -
    - - + + - diff --git a/doc/api/a00040_source.html b/doc/api/a00040_source.html index 6308f68a..ef2d23bc 100644 --- a/doc/api/a00040_source.html +++ b/doc/api/a00040_source.html @@ -2,42 +2,31 @@ - + inertia.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,116 +35,118 @@
  • File List
  • + +
    inertia.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_inertia
    -00040 #define GLM_GTX_inertia GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_inertia extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056         template <typename T> 
    -00057         detail::tmat3x3<T> boxInertia3(
    -00058                 T const & Mass, 
    -00059                 detail::tvec3<T> const & Scale);
    -00060                 
    -00063         template <typename T> 
    -00064         detail::tmat4x4<T> boxInertia4(
    -00065                 T const & Mass, 
    -00066                 detail::tvec3<T> const & Scale);
    -00067                 
    -00070         template <typename T> 
    -00071         detail::tmat3x3<T> diskInertia3(
    -00072                 T const & Mass, 
    -00073                 T const & Radius);
    -00074 
    -00077         template <typename T> 
    -00078         detail::tmat4x4<T> diskInertia4(
    -00079                 T const & Mass, 
    -00080                 T const & Radius);
    -00081 
    -00084         template <typename T> 
    -00085         detail::tmat3x3<T> ballInertia3(
    -00086                 T const & Mass, 
    -00087                 T const & Radius);
    -00088                 
    -00091         template <typename T> 
    -00092         detail::tmat4x4<T> ballInertia4(
    -00093                 T const & Mass, 
    -00094                 T const & Radius);
    -00095 
    -00098         template <typename T> 
    -00099         detail::tmat3x3<T> sphereInertia3(
    -00100                 T const & Mass, 
    -00101                 T const & Radius);
    -00102 
    -00105         template <typename T> 
    -00106         detail::tmat4x4<T> sphereInertia4(
    -00107                 T const & Mass, 
    -00108                 T const & Radius);
    -00109 
    -00111 }// namespace glm
    -00112 
    -00113 #include "inertia.inl"
    -00114 
    -00115 #endif//GLM_GTX_inertia
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_inertia
    +
    40 #define GLM_GTX_inertia GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_inertia extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename T>
    +
    57  detail::tmat3x3<T> boxInertia3(
    +
    58  T const & Mass,
    +
    59  detail::tvec3<T> const & Scale);
    +
    60 
    +
    63  template <typename T>
    +
    64  detail::tmat4x4<T> boxInertia4(
    +
    65  T const & Mass,
    +
    66  detail::tvec3<T> const & Scale);
    +
    67 
    +
    70  template <typename T>
    +
    71  detail::tmat3x3<T> diskInertia3(
    +
    72  T const & Mass,
    +
    73  T const & Radius);
    +
    74 
    +
    77  template <typename T>
    +
    78  detail::tmat4x4<T> diskInertia4(
    +
    79  T const & Mass,
    +
    80  T const & Radius);
    +
    81 
    +
    84  template <typename T>
    +
    85  detail::tmat3x3<T> ballInertia3(
    +
    86  T const & Mass,
    +
    87  T const & Radius);
    +
    88 
    +
    91  template <typename T>
    +
    92  detail::tmat4x4<T> ballInertia4(
    +
    93  T const & Mass,
    +
    94  T const & Radius);
    +
    95 
    +
    98  template <typename T>
    +
    99  detail::tmat3x3<T> sphereInertia3(
    +
    100  T const & Mass,
    +
    101  T const & Radius);
    +
    102 
    +
    105  template <typename T>
    +
    106  detail::tmat4x4<T> sphereInertia4(
    +
    107  T const & Mass,
    +
    108  T const & Radius);
    +
    109 
    +
    111 }// namespace glm
    +
    112 
    +
    113 #include "inertia.inl"
    +
    114 
    +
    115 #endif//GLM_GTX_inertia
    +
    + - diff --git a/doc/api/a00041.html b/doc/api/a00041.html index daf3176a..97f466bd 100644 --- a/doc/api/a00041.html +++ b/doc/api/a00041.html @@ -2,42 +2,31 @@ - + int_10_10_10_2.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,42 +35,45 @@
  • File List
  • + +
    int_10_10_10_2.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - + +

    +

    Functions

    dword uint10_10_10_2_cast (glm::vec4 const &v)
    dword uint10_10_10_2_cast (glm::vec4 const &v)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_int_10_10_10_2: Packed integer

    -
    Date:
    2010-07-07 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_int_10_10_10_2

    +
    Date
    2010-07-07 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_raw_data: Raw data (dependence)
    +GLM_GTX_raw_data (dependence)

    Definition in file int_10_10_10_2.hpp.

    -
    - - + + - diff --git a/doc/api/a00041_source.html b/doc/api/a00041_source.html index 930fe15a..8f4df23a 100644 --- a/doc/api/a00041_source.html +++ b/doc/api/a00041_source.html @@ -2,42 +2,31 @@ - + int_10_10_10_2.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,79 +35,81 @@
  • File List
  • + +
    int_10_10_10_2.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_int_10_10_10_2
    -00040 #define GLM_GTX_int_10_10_10_2 GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/raw_data.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_int_10_10_10_2 extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         dword uint10_10_10_2_cast(glm::vec4 const & v);
    -00058 
    -00060 }//namespace glm
    -00061 
    -00062 #include "int_10_10_10_2.inl"
    -00063 
    -00064 #endif//GLM_GTX_int_10_10_10_2
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_int_10_10_10_2
    +
    40 #define GLM_GTX_int_10_10_10_2 GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/raw_data.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_int_10_10_10_2 extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    + +
    58 
    +
    60 }//namespace glm
    +
    61 
    +
    62 #include "int_10_10_10_2.inl"
    +
    63 
    +
    64 #endif//GLM_GTX_int_10_10_10_2
    +
    + - diff --git a/doc/api/a00042.html b/doc/api/a00042.html index f0f43f9f..5bb15c89 100644 --- a/doc/api/a00042.html +++ b/doc/api/a00042.html @@ -2,42 +2,31 @@ - + integer.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,55 +35,69 @@
  • File List
  • + +
    integer.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - + +

    +

    Typedefs

    typedef signed int sint

    +

    typedef signed int sint
     
    + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    genType factorial (genType const &x)
    unsigned int floor_log2 (unsigned int x)
    template<typename genIUType >
    genIUType log2 (genIUType const &x)
    int mod (int x, int y)
    uint mod (uint x, uint y)
    uint nlz (uint x)
    int pow (int x, int y)
    uint pow (uint x, uint y)
    int sqrt (int x)
    uint sqrt (uint x)
    template<typename genType >
    genType factorial (genType const &x)
     
    unsigned int floor_log2 (unsigned int x)
     
    template<typename genIUType >
    genIUType log2 (genIUType const &x)
     
    int mod (int x, int y)
     
    uint mod (uint x, uint y)
     
    uint nlz (uint x)
     
    int pow (int x, int y)
     
    uint pow (uint x, uint y)
     
    int sqrt (int x)
     
    uint sqrt (uint x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_integer: Extended integer functions

    -
    Date:
    2005-12-24 / 2011-10-13
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_integer

    +
    Date
    2005-12-24 / 2011-10-13
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file integer.hpp.

    -
    - - + + - diff --git a/doc/api/a00042_source.html b/doc/api/a00042_source.html index b47f5dba..48d7fa01 100644 --- a/doc/api/a00042_source.html +++ b/doc/api/a00042_source.html @@ -2,42 +2,31 @@ - + integer.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,99 +35,101 @@
  • File List
  • + +
    integer.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_integer
    -00039 #define GLM_GTX_integer GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_integer extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         int pow(int x, int y);
    -00056 
    -00059         int sqrt(int x);
    -00060 
    -00063         template <typename genIUType>
    -00064         genIUType log2(genIUType const & x);
    -00065 
    -00068         unsigned int floor_log2(unsigned int x);
    -00069 
    -00072         int mod(int x, int y);
    -00073 
    -00076         template <typename genType> 
    -00077         genType factorial(genType const & x);
    -00078 
    -00081         typedef signed int                                      sint;
    -00082 
    -00085         uint pow(uint x, uint y);
    -00086 
    -00089         uint sqrt(uint x);
    -00090 
    -00093         uint mod(uint x, uint y);
    -00094 
    -00097         uint nlz(uint x);
    -00098 
    -00100 }//namespace glm
    -00101 
    -00102 #include "integer.inl"
    -00103 
    -00104 #endif//GLM_GTX_integer
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_integer
    +
    39 #define GLM_GTX_integer GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_integer extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  int pow(int x, int y);
    +
    56 
    +
    59  int sqrt(int x);
    +
    60 
    +
    63  template <typename genIUType>
    +
    64  genIUType log2(genIUType const & x);
    +
    65 
    +
    68  unsigned int floor_log2(unsigned int x);
    +
    69 
    +
    72  int mod(int x, int y);
    +
    73 
    +
    76  template <typename genType>
    +
    77  genType factorial(genType const & x);
    +
    78 
    +
    81  typedef signed int sint;
    +
    82 
    +
    85  uint pow(uint x, uint y);
    +
    86 
    +
    89  uint sqrt(uint x);
    +
    90 
    +
    93  uint mod(uint x, uint y);
    +
    94 
    +
    97  uint nlz(uint x);
    +
    98 
    +
    100 }//namespace glm
    +
    101 
    +
    102 #include "integer.inl"
    +
    103 
    +
    104 #endif//GLM_GTX_integer
    +
    + - diff --git a/doc/api/a00043.html b/doc/api/a00043.html index e3054aa8..67e6b5c0 100644 --- a/doc/api/a00043.html +++ b/doc/api/a00043.html @@ -2,42 +2,31 @@ - + intersect.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,49 +35,58 @@
  • File List
  • + +
    intersect.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    bool intersectLineSphere (genType const &point0, genType const &point1, genType const &center, typename genType::value_type radius, genType &position, genType &normal)
    template<typename genType >
    bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
    template<typename genType >
    bool intersectRaySphere (genType const &orig, genType const &dir, genType const &center, typename genType::value_type radius, genType &position, genType &normal)
    template<typename genType >
    bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
    template<typename genType >
    bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
     
    template<typename genType >
    bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadiusSquered, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
     
    template<typename genType >
    bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_intersect: Intersection tests

    -
    Date:
    2007-04-03 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_intersect

    +
    Date
    2007-04-03 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_closest_point: Find closest point (dependence)
    +GLM_GTX_closest_point (dependence)

    Definition in file intersect.hpp.

    -
    - - + + - diff --git a/doc/api/a00043_source.html b/doc/api/a00043_source.html index 323f76e2..1708d74a 100644 --- a/doc/api/a00043_source.html +++ b/doc/api/a00043_source.html @@ -2,42 +2,31 @@ - + intersect.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,101 +35,110 @@
  • File List
  • + +
    intersect.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_intersect
    -00040 #define GLM_GTX_intersect GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/closest_point.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_closest_point extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename genType>
    -00058         bool intersectRayTriangle(
    -00059                 genType const & orig, genType const & dir,
    -00060                 genType const & vert0, genType const & vert1, genType const & vert2,
    -00061                 genType & baryPosition);
    -00062 
    -00065         template <typename genType>
    -00066         bool intersectLineTriangle(
    -00067                 genType const & orig, genType const & dir,
    -00068                 genType const & vert0, genType const & vert1, genType const & vert2,
    -00069                 genType & position);
    -00070 
    -00073         template <typename genType>
    -00074         bool intersectRaySphere(
    -00075                 genType const & orig, genType const & dir,
    -00076                 genType const & center, typename genType::value_type radius,
    -00077                 genType & position, genType & normal);
    -00078 
    -00081         template <typename genType>
    -00082         bool intersectLineSphere(
    -00083                 genType const & point0, genType const & point1,
    -00084                 genType const & center, typename genType::value_type radius,
    -00085                 genType & position, genType & normal);
    -00086 
    -00088 }//namespace glm
    -00089 
    -00090 #include "intersect.inl"
    -00091 
    -00092 #endif//GLM_GTX_intersect
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_intersect
    +
    40 #define GLM_GTX_intersect GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/closest_point.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_closest_point extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename genType>
    + +
    59  genType const & orig, genType const & dir,
    +
    60  genType const & vert0, genType const & vert1, genType const & vert2,
    +
    61  genType & baryPosition);
    +
    62 
    +
    65  template <typename genType>
    + +
    67  genType const & orig, genType const & dir,
    +
    68  genType const & vert0, genType const & vert1, genType const & vert2,
    +
    69  genType & position);
    +
    70 
    +
    74  template <typename genType>
    +
    75  bool intersectRaySphere(
    +
    76  genType const & rayStarting, genType const & rayNormalizedDirection,
    +
    77  genType const & sphereCenter, const typename genType::value_type sphereRadiusSquered,
    +
    78  typename genType::value_type & intersectionDistance);
    +
    79 
    +
    82  template <typename genType>
    +
    83  bool intersectRaySphere(
    +
    84  genType const & rayStarting, genType const & rayNormalizedDirection,
    +
    85  genType const & sphereCenter, const typename genType::value_type sphereRadius,
    +
    86  genType & intersectionPosition, genType & intersectionNormal);
    +
    87 
    +
    90  template <typename genType>
    + +
    92  genType const & point0, genType const & point1,
    +
    93  genType const & sphereCenter, typename genType::value_type sphereRadius,
    +
    94  genType & intersectionPosition1, genType & intersectionNormal1,
    +
    95  genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());
    +
    96 
    +
    98 }//namespace glm
    +
    99 
    +
    100 #include "intersect.inl"
    +
    101 
    +
    102 #endif//GLM_GTX_intersect
    +
    + - diff --git a/doc/api/a00044.html b/doc/api/a00044.html index 807eba5d..1c739ce3 100644 --- a/doc/api/a00044.html +++ b/doc/api/a00044.html @@ -2,42 +2,31 @@ - + intrinsic_common.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,38 +35,40 @@
  • File List
  • + +
    intrinsic_common.hpp File Reference
    -
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2009-05-11 / 2011-06-15
    -
    Author:
    Christophe Riccio
    +

    GLM Core

    +
    Date
    2009-05-11 / 2011-06-15
    +
    Author
    Christophe Riccio

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2009-06-05 / 2011-06-15
    -
    Author:
    Christophe Riccio
    +

    GLM Core

    +
    Date
    2009-06-05 / 2011-06-15
    +
    Author
    Christophe Riccio

    Definition in file intrinsic_common.hpp.

    -
    - - + + - diff --git a/doc/api/a00044_source.html b/doc/api/a00044_source.html index 8fb64b50..0a89bc7b 100644 --- a/doc/api/a00044_source.html +++ b/doc/api/a00044_source.html @@ -2,42 +2,31 @@ - + intrinsic_common.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,109 +35,111 @@
  • File List
  • + +
    intrinsic_common.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_detail_intrinsic_common
    -00030 #define glm_detail_intrinsic_common
    -00031 
    -00032 #include "setup.hpp"
    -00033 
    -00034 #if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
    -00035 #       error "SSE2 instructions not supported or enabled"
    -00036 #else
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041         __m128 sse_abs_ps(__m128 x);
    -00042 
    -00043         __m128 sse_sgn_ps(__m128 x);
    -00044 
    -00045         //floor
    -00046         __m128 sse_flr_ps(__m128 v);
    -00047 
    -00048         //trunc
    -00049         __m128 sse_trc_ps(__m128 v);
    -00050 
    -00051         //round
    -00052         __m128 sse_nd_ps(__m128 v);
    -00053 
    -00054         //roundEven
    -00055         __m128 sse_rde_ps(__m128 v);
    -00056 
    -00057         __m128 sse_rnd_ps(__m128 x);
    -00058 
    -00059         __m128 sse_ceil_ps(__m128 v);
    -00060 
    -00061         __m128 sse_frc_ps(__m128 x);
    -00062 
    -00063         __m128 sse_mod_ps(__m128 x, __m128 y);
    -00064 
    -00065         __m128 sse_modf_ps(__m128 x, __m128i & i);
    -00066 
    -00067         //GLM_FUNC_QUALIFIER __m128 sse_min_ps(__m128 x, __m128 y)
    -00068 
    -00069         //GLM_FUNC_QUALIFIER __m128 sse_max_ps(__m128 x, __m128 y)
    -00070 
    -00071         __m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal);
    -00072 
    -00073         __m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a);
    -00074 
    -00075         __m128 sse_stp_ps(__m128 edge, __m128 x);
    -00076 
    -00077         __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x);
    -00078 
    -00079         __m128 sse_nan_ps(__m128 x);
    -00080 
    -00081         __m128 sse_inf_ps(__m128 x);
    -00082 
    -00083 }//namespace detail
    -00084 }//namespace glm
    -00085 
    -00086 #include "intrinsic_common.inl"
    -00087 
    -00088 #endif//GLM_ARCH
    -00089 #endif//glm_detail_intrinsic_common
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_detail_intrinsic_common
    +
    30 #define glm_detail_intrinsic_common
    +
    31 
    +
    32 #include "setup.hpp"
    +
    33 
    +
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    35 # error "SSE2 instructions not supported or enabled"
    +
    36 #else
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41  __m128 sse_abs_ps(__m128 x);
    +
    42 
    +
    43  __m128 sse_sgn_ps(__m128 x);
    +
    44 
    +
    45  //floor
    +
    46  __m128 sse_flr_ps(__m128 v);
    +
    47 
    +
    48  //trunc
    +
    49  __m128 sse_trc_ps(__m128 v);
    +
    50 
    +
    51  //round
    +
    52  __m128 sse_nd_ps(__m128 v);
    +
    53 
    +
    54  //roundEven
    +
    55  __m128 sse_rde_ps(__m128 v);
    +
    56 
    +
    57  __m128 sse_rnd_ps(__m128 x);
    +
    58 
    +
    59  __m128 sse_ceil_ps(__m128 v);
    +
    60 
    +
    61  __m128 sse_frc_ps(__m128 x);
    +
    62 
    +
    63  __m128 sse_mod_ps(__m128 x, __m128 y);
    +
    64 
    +
    65  __m128 sse_modf_ps(__m128 x, __m128i & i);
    +
    66 
    +
    67  //GLM_FUNC_QUALIFIER __m128 sse_min_ps(__m128 x, __m128 y)
    +
    68 
    +
    69  //GLM_FUNC_QUALIFIER __m128 sse_max_ps(__m128 x, __m128 y)
    +
    70 
    +
    71  __m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal);
    +
    72 
    +
    73  __m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a);
    +
    74 
    +
    75  __m128 sse_stp_ps(__m128 edge, __m128 x);
    +
    76 
    +
    77  __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x);
    +
    78 
    +
    79  __m128 sse_nan_ps(__m128 x);
    +
    80 
    +
    81  __m128 sse_inf_ps(__m128 x);
    +
    82 
    +
    83 }//namespace detail
    +
    84 }//namespace glm
    +
    85 
    +
    86 #include "intrinsic_common.inl"
    +
    87 
    +
    88 #endif//GLM_ARCH
    +
    89 #endif//glm_detail_intrinsic_common
    +
    + - diff --git a/doc/api/a00045.html b/doc/api/a00045.html index 1aeaefc5..8611bb05 100644 --- a/doc/api/a00045.html +++ b/doc/api/a00045.html @@ -2,42 +2,31 @@ - + intrinsic_exponential.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    intrinsic_exponential.hpp File Reference
    -
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2009-05-11 / 2011-06-15
    -
    Author:
    Christophe Riccio
    +

    GLM Core

    +
    Date
    2009-05-11 / 2011-06-15
    +
    Author
    Christophe Riccio

    Definition in file intrinsic_exponential.hpp.

    -
    - - + + - diff --git a/doc/api/a00045_source.html b/doc/api/a00045_source.html index 636e6763..f64b9d10 100644 --- a/doc/api/a00045_source.html +++ b/doc/api/a00045_source.html @@ -2,42 +2,31 @@ - + intrinsic_exponential.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,99 +35,101 @@
  • File List
  • + +
    intrinsic_exponential.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_detail_intrinsic_exponential
    -00030 #define glm_detail_intrinsic_exponential
    -00031 
    -00032 #include "setup.hpp"
    -00033 
    -00034 #if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
    -00035 #       error "SSE2 instructions not supported or enabled"
    -00036 #else
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041 /*
    -00042 GLM_FUNC_QUALIFIER __m128 sse_rsqrt_nr_ss(__m128 const x)
    -00043 {
    -00044         __m128 recip = _mm_rsqrt_ss( x );  // "estimate" opcode
    -00045         const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
    -00046         const static __m128 half = { 0.5,0.5,0.5,0.5 };
    -00047         __m128 halfrecip = _mm_mul_ss( half, recip );
    -00048         __m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
    -00049         return _mm_mul_ss( halfrecip, threeminus_xrr );
    -00050 }
    -00051  
    -00052 GLM_FUNC_QUALIFIER __m128 sse_normalize_fast_ps(  float * RESTRICT vOut, float * RESTRICT vIn )
    -00053 {
    -00054         __m128 x = _mm_load_ss(&vIn[0]);
    -00055         __m128 y = _mm_load_ss(&vIn[1]);
    -00056         __m128 z = _mm_load_ss(&vIn[2]);
    -00057  
    -00058         const __m128 l =  // compute x*x + y*y + z*z
    -00059                 _mm_add_ss(
    -00060                  _mm_add_ss( _mm_mul_ss(x,x),
    -00061                              _mm_mul_ss(y,y)
    -00062                             ),
    -00063                  _mm_mul_ss( z, z )
    -00064                 );
    -00065  
    -00066  
    -00067         const __m128 rsqt = _mm_rsqrt_nr_ss( l );
    -00068         _mm_store_ss( &vOut[0] , _mm_mul_ss( rsqt, x ) );
    -00069         _mm_store_ss( &vOut[1] , _mm_mul_ss( rsqt, y ) );
    -00070         _mm_store_ss( &vOut[2] , _mm_mul_ss( rsqt, z ) );
    -00071  
    -00072         return _mm_mul_ss( l , rsqt );
    -00073 }
    -00074 */
    -00075 }//namespace detail
    -00076 }//namespace glm
    -00077 
    -00078 #endif//GLM_ARCH
    -00079 #endif//glm_detail_intrinsic_exponential
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_detail_intrinsic_exponential
    +
    30 #define glm_detail_intrinsic_exponential
    +
    31 
    +
    32 #include "setup.hpp"
    +
    33 
    +
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    35 # error "SSE2 instructions not supported or enabled"
    +
    36 #else
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41 /*
    +
    42 GLM_FUNC_QUALIFIER __m128 sse_rsqrt_nr_ss(__m128 const x)
    +
    43 {
    +
    44  __m128 recip = _mm_rsqrt_ss( x ); // "estimate" opcode
    +
    45  const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
    +
    46  const static __m128 half = { 0.5,0.5,0.5,0.5 };
    +
    47  __m128 halfrecip = _mm_mul_ss( half, recip );
    +
    48  __m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
    +
    49  return _mm_mul_ss( halfrecip, threeminus_xrr );
    +
    50 }
    +
    51 
    +
    52 GLM_FUNC_QUALIFIER __m128 sse_normalize_fast_ps( float * RESTRICT vOut, float * RESTRICT vIn )
    +
    53 {
    +
    54  __m128 x = _mm_load_ss(&vIn[0]);
    +
    55  __m128 y = _mm_load_ss(&vIn[1]);
    +
    56  __m128 z = _mm_load_ss(&vIn[2]);
    +
    57 
    +
    58  const __m128 l = // compute x*x + y*y + z*z
    +
    59  _mm_add_ss(
    +
    60  _mm_add_ss( _mm_mul_ss(x,x),
    +
    61  _mm_mul_ss(y,y)
    +
    62  ),
    +
    63  _mm_mul_ss( z, z )
    +
    64  );
    +
    65 
    +
    66 
    +
    67  const __m128 rsqt = _mm_rsqrt_nr_ss( l );
    +
    68  _mm_store_ss( &vOut[0] , _mm_mul_ss( rsqt, x ) );
    +
    69  _mm_store_ss( &vOut[1] , _mm_mul_ss( rsqt, y ) );
    +
    70  _mm_store_ss( &vOut[2] , _mm_mul_ss( rsqt, z ) );
    +
    71 
    +
    72  return _mm_mul_ss( l , rsqt );
    +
    73 }
    +
    74 */
    +
    75 }//namespace detail
    +
    76 }//namespace glm
    +
    77 
    +
    78 #endif//GLM_ARCH
    +
    79 #endif//glm_detail_intrinsic_exponential
    +
    + - diff --git a/doc/api/a00046.html b/doc/api/a00046.html index 8d59ba4b..e7627bd3 100644 --- a/doc/api/a00046.html +++ b/doc/api/a00046.html @@ -2,42 +2,31 @@ - + intrinsic_geometric.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    intrinsic_geometric.hpp File Reference
    -
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2009-05-08 / 2011-06-15
    -
    Author:
    Christophe Riccio
    +

    GLM Core

    +
    Date
    2009-05-08 / 2011-06-15
    +
    Author
    Christophe Riccio

    Definition in file intrinsic_geometric.hpp.

    -
    - - + + - diff --git a/doc/api/a00046_source.html b/doc/api/a00046_source.html index 7c338374..756abb4e 100644 --- a/doc/api/a00046_source.html +++ b/doc/api/a00046_source.html @@ -2,42 +2,31 @@ - + intrinsic_geometric.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,96 +35,98 @@
  • File List
  • + +
    intrinsic_geometric.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_intrinsic_geometric
    -00030 #define glm_core_intrinsic_geometric
    -00031 
    -00032 #include "setup.hpp"
    -00033 
    -00034 #if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
    -00035 #       error "SSE2 instructions not supported or enabled"
    -00036 #else
    -00037 
    -00038 #include "intrinsic_common.hpp"
    -00039 
    -00040 namespace glm{
    -00041 namespace detail
    -00042 {
    -00043         //length
    -00044         __m128 sse_len_ps(__m128 x);
    -00045 
    -00046         //distance
    -00047         __m128 sse_dst_ps(__m128 p0, __m128 p1);
    -00048 
    -00049         //dot
    -00050         __m128 sse_dot_ps(__m128 v1, __m128 v2);
    -00051 
    -00052         // SSE1
    -00053         __m128 sse_dot_ss(__m128 v1, __m128 v2);
    -00054 
    -00055         //cross
    -00056         __m128 sse_xpd_ps(__m128 v1, __m128 v2);
    -00057 
    -00058         //normalize
    -00059         __m128 sse_nrm_ps(__m128 v);
    -00060 
    -00061         //faceforward
    -00062         __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref);
    -00063 
    -00064         //reflect
    -00065         __m128 sse_rfe_ps(__m128 I, __m128 N);
    -00066 
    -00067         //refract
    -00068         __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta);
    -00069 
    -00070 }//namespace detail
    -00071 }//namespace glm
    -00072 
    -00073 #include "intrinsic_geometric.inl"
    -00074 
    -00075 #endif//GLM_ARCH
    -00076 #endif//glm_core_intrinsic_geometric
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_intrinsic_geometric
    +
    30 #define glm_core_intrinsic_geometric
    +
    31 
    +
    32 #include "setup.hpp"
    +
    33 
    +
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    35 # error "SSE2 instructions not supported or enabled"
    +
    36 #else
    +
    37 
    +
    38 #include "intrinsic_common.hpp"
    +
    39 
    +
    40 namespace glm{
    +
    41 namespace detail
    +
    42 {
    +
    43  //length
    +
    44  __m128 sse_len_ps(__m128 x);
    +
    45 
    +
    46  //distance
    +
    47  __m128 sse_dst_ps(__m128 p0, __m128 p1);
    +
    48 
    +
    49  //dot
    +
    50  __m128 sse_dot_ps(__m128 v1, __m128 v2);
    +
    51 
    +
    52  // SSE1
    +
    53  __m128 sse_dot_ss(__m128 v1, __m128 v2);
    +
    54 
    +
    55  //cross
    +
    56  __m128 sse_xpd_ps(__m128 v1, __m128 v2);
    +
    57 
    +
    58  //normalize
    +
    59  __m128 sse_nrm_ps(__m128 v);
    +
    60 
    +
    61  //faceforward
    +
    62  __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref);
    +
    63 
    +
    64  //reflect
    +
    65  __m128 sse_rfe_ps(__m128 I, __m128 N);
    +
    66 
    +
    67  //refract
    +
    68  __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta);
    +
    69 
    +
    70 }//namespace detail
    +
    71 }//namespace glm
    +
    72 
    +
    73 #include "intrinsic_geometric.inl"
    +
    74 
    +
    75 #endif//GLM_ARCH
    +
    76 #endif//glm_core_intrinsic_geometric
    +
    + - diff --git a/doc/api/a00047_source.html b/doc/api/a00047_source.html index 3f6193ea..b4864345 100644 --- a/doc/api/a00047_source.html +++ b/doc/api/a00047_source.html @@ -2,42 +2,31 @@ - + intrinsic_matrix.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,89 +35,91 @@
  • File List
  • + +
    intrinsic_matrix.hpp
    -
    +
    -
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_detail_intrinsic_matrix
    -00030 #define glm_detail_intrinsic_matrix
    -00031 
    -00032 #include "setup.hpp"
    -00033 
    -00034 #if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
    -00035 #       error "SSE2 instructions not supported or enabled"
    -00036 #else
    -00037 
    -00038 #include "intrinsic_geometric.hpp"
    -00039 
    -00040 namespace glm{
    -00041 namespace detail
    -00042 {
    -00043         void sse_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
    -00044 
    -00045         void sse_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
    -00046 
    -00047         __m128 sse_mul_ps(__m128 m[4], __m128 v);
    -00048 
    -00049         __m128 sse_mul_ps(__m128 v, __m128 m[4]);
    -00050 
    -00051         void sse_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4]);
    -00052 
    -00053         void sse_transpose_ps(__m128 const in[4], __m128 out[4]);
    -00054 
    -00055         void sse_inverse_ps(__m128 const in[4], __m128 out[4]);
    -00056 
    -00057         void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]);
    -00058 
    -00059         __m128 sse_det_ps(__m128 const m[4]);
    -00060 
    -00061         __m128 sse_slow_det_ps(__m128 const m[4]);
    -00062 
    -00063 }//namespace detail
    -00064 }//namespace glm
    -00065 
    -00066 #include "intrinsic_matrix.inl"
    -00067 
    -00068 #endif//GLM_ARCH
    -00069 #endif//glm_detail_intrinsic_matrix
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_detail_intrinsic_matrix
    +
    30 #define glm_detail_intrinsic_matrix
    +
    31 
    +
    32 #include "setup.hpp"
    +
    33 
    +
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    35 # error "SSE2 instructions not supported or enabled"
    +
    36 #else
    +
    37 
    +
    38 #include "intrinsic_geometric.hpp"
    +
    39 
    +
    40 namespace glm{
    +
    41 namespace detail
    +
    42 {
    +
    43  void sse_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
    +
    44 
    +
    45  void sse_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
    +
    46 
    +
    47  __m128 sse_mul_ps(__m128 m[4], __m128 v);
    +
    48 
    +
    49  __m128 sse_mul_ps(__m128 v, __m128 m[4]);
    +
    50 
    +
    51  void sse_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4]);
    +
    52 
    +
    53  void sse_transpose_ps(__m128 const in[4], __m128 out[4]);
    +
    54 
    +
    55  void sse_inverse_ps(__m128 const in[4], __m128 out[4]);
    +
    56 
    +
    57  void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]);
    +
    58 
    +
    59  __m128 sse_det_ps(__m128 const m[4]);
    +
    60 
    +
    61  __m128 sse_slow_det_ps(__m128 const m[4]);
    +
    62 
    +
    63 }//namespace detail
    +
    64 }//namespace glm
    +
    65 
    +
    66 #include "intrinsic_matrix.inl"
    +
    67 
    +
    68 #endif//GLM_ARCH
    +
    69 #endif//glm_detail_intrinsic_matrix
    +
    + - diff --git a/doc/api/a00048.html b/doc/api/a00048.html index 7fd110e6..2724f819 100644 --- a/doc/api/a00048.html +++ b/doc/api/a00048.html @@ -2,42 +2,31 @@ - + intrinsic_trigonometric.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    intrinsic_trigonometric.hpp File Reference
    -
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2009-06-09 / 2011-06-15
    -
    Author:
    Christophe Riccio
    +

    GLM Core

    +
    Date
    2009-06-09 / 2011-06-15
    +
    Author
    Christophe Riccio

    Definition in file intrinsic_trigonometric.hpp.

    -
    - - + + - diff --git a/doc/api/a00048_source.html b/doc/api/a00048_source.html index b412565e..058f18ec 100644 --- a/doc/api/a00048_source.html +++ b/doc/api/a00048_source.html @@ -2,42 +2,31 @@ - + intrinsic_trigonometric.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,68 +35,70 @@
  • File List
  • + +
    intrinsic_trigonometric.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_detail_intrinsic_trigonometric
    -00030 #define glm_detail_intrinsic_trigonometric
    -00031 
    -00032 #include "setup.hpp"
    -00033 
    -00034 #if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
    -00035 #       error "SSE2 instructions not supported or enabled"
    -00036 #else
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041 
    -00042 }//namespace detail
    -00043 }//namespace glm
    -00044 
    -00045 #include "intrinsic_trigonometric.inl"
    -00046 
    -00047 #endif//GLM_ARCH
    -00048 #endif//glm_detail_intrinsic_trigonometric
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_detail_intrinsic_trigonometric
    +
    30 #define glm_detail_intrinsic_trigonometric
    +
    31 
    +
    32 #include "setup.hpp"
    +
    33 
    +
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    35 # error "SSE2 instructions not supported or enabled"
    +
    36 #else
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41 
    +
    42 }//namespace detail
    +
    43 }//namespace glm
    +
    44 
    +
    45 #include "intrinsic_trigonometric.inl"
    +
    46 
    +
    47 #endif//GLM_ARCH
    +
    48 #endif//glm_detail_intrinsic_trigonometric
    +
    + - diff --git a/doc/api/a00049.html b/doc/api/a00049.html index de5fdfaf..79d75b9f 100644 --- a/doc/api/a00049.html +++ b/doc/api/a00049.html @@ -2,42 +2,31 @@ - + intrinsic_vector_relational.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    intrinsic_vector_relational.hpp File Reference
    -
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2009-06-09 / 2011-06-15
    -
    Author:
    Christophe Riccio
    +

    GLM Core

    +
    Date
    2009-06-09 / 2011-06-15
    +
    Author
    Christophe Riccio

    Definition in file intrinsic_vector_relational.hpp.

    -
    - - + + - diff --git a/doc/api/a00049_source.html b/doc/api/a00049_source.html index ad7c48fc..6535f7f5 100644 --- a/doc/api/a00049_source.html +++ b/doc/api/a00049_source.html @@ -2,42 +2,31 @@ - + intrinsic_vector_relational.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,68 +35,70 @@
  • File List
  • + +
    intrinsic_vector_relational.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_detail_intrinsic_vector_relational
    -00030 #define glm_detail_intrinsic_vector_relational
    -00031 
    -00032 #include "setup.hpp"
    -00033 
    -00034 #if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
    -00035 #       error "SSE2 instructions not supported or enabled"
    -00036 #else
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041 
    -00042 }//namespace detail
    -00043 }//namespace glm
    -00044 
    -00045 #include "intrinsic_vector_relational.inl"
    -00046 
    -00047 #endif//GLM_ARCH
    -00048 #endif//glm_detail_intrinsic_vector_relational
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_detail_intrinsic_vector_relational
    +
    30 #define glm_detail_intrinsic_vector_relational
    +
    31 
    +
    32 #include "setup.hpp"
    +
    33 
    +
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    35 # error "SSE2 instructions not supported or enabled"
    +
    36 #else
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41 
    +
    42 }//namespace detail
    +
    43 }//namespace glm
    +
    44 
    +
    45 #include "intrinsic_vector_relational.inl"
    +
    46 
    +
    47 #endif//GLM_ARCH
    +
    48 #endif//glm_detail_intrinsic_vector_relational
    +
    + - diff --git a/doc/api/a00050.html b/doc/api/a00050.html index a66c2499..bc4396b7 100644 --- a/doc/api/a00050.html +++ b/doc/api/a00050.html @@ -2,42 +2,31 @@ - + log_base.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,41 +35,44 @@
  • File List
  • + +
    log_base.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - + + +

    +

    Functions

    template<typename genType >
    genType log (genType const &x, genType const &base)
    template<typename genType >
    genType log (genType const &x, genType const &base)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_log_base: Log with base

    -
    Date:
    2008-10-24 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_log_base

    +
    Date
    2008-10-24 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file log_base.hpp.

    -
    - - + + - diff --git a/doc/api/a00050_source.html b/doc/api/a00050_source.html index 7bfc15e6..59cbc457 100644 --- a/doc/api/a00050_source.html +++ b/doc/api/a00050_source.html @@ -2,42 +2,31 @@ - + log_base.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,80 +35,82 @@
  • File List
  • + +
    log_base.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_log_base
    -00039 #define GLM_GTX_log_base GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_log_base extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename genType> 
    -00056         genType log(
    -00057                 genType const & x, 
    -00058                 genType const & base);
    -00059 
    -00061 }//namespace glm
    -00062 
    -00063 #include "log_base.inl"
    -00064 
    -00065 #endif//GLM_GTX_log_base
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_log_base
    +
    39 #define GLM_GTX_log_base GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_log_base extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename genType>
    +
    56  genType log(
    +
    57  genType const & x,
    +
    58  genType const & base);
    +
    59 
    +
    61 }//namespace glm
    +
    62 
    +
    63 #include "log_base.inl"
    +
    64 
    +
    65 #endif//GLM_GTX_log_base
    +
    + - diff --git a/doc/api/a00051_source.html b/doc/api/a00051_source.html index 9655437c..84b129ee 100644 --- a/doc/api/a00051_source.html +++ b/doc/api/a00051_source.html @@ -2,42 +2,31 @@ - + man.doxy Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,1793 +35,1837 @@
  • File List
  • + +
    man.doxy
    -
    +
    -
    00001 # Doxyfile 1.7.6
    -00002 
    -00003 # This file describes the settings to be used by the documentation system
    -00004 # doxygen (www.doxygen.org) for a project
    -00005 #
    -00006 # All text after a hash (#) is considered a comment and will be ignored
    -00007 # The format is:
    -00008 #       TAG = value [value, ...]
    -00009 # For lists items can also be appended using:
    -00010 #       TAG += value [value, ...]
    -00011 # Values that contain spaces should be placed between quotes (" ")
    -00012 
    -00013 #---------------------------------------------------------------------------
    -00014 # Project related configuration options
    -00015 #---------------------------------------------------------------------------
    -00016 
    -00017 # This tag specifies the encoding used for all characters in the config file 
    -00018 # that follow. The default is UTF-8 which is also the encoding used for all 
    -00019 # text before the first occurrence of this tag. Doxygen uses libiconv (or the 
    -00020 # iconv built into libc) for the transcoding. See 
    -00021 # http://www.gnu.org/software/libiconv for the list of possible encodings.
    -00022 
    -00023 DOXYFILE_ENCODING      = UTF-8
    -00024 
    -00025 # The PROJECT_NAME tag is a single word (or sequence of words) that should 
    -00026 # identify the project. Note that if you do not use Doxywizard you need 
    -00027 # to put quotes around the project name if it contains spaces.
    -00028 
    -00029 PROJECT_NAME           = 
    -00030 
    -00031 # The PROJECT_NUMBER tag can be used to enter a project or revision number. 
    -00032 # This could be handy for archiving the generated documentation or 
    -00033 # if some version control system is used.
    -00034 
    -00035 PROJECT_NUMBER         = 0.9.3
    -00036 
    -00037 # Using the PROJECT_BRIEF tag one can provide an optional one line description 
    -00038 # for a project that appears at the top of each page and should give viewer 
    -00039 # a quick idea about the purpose of the project. Keep the description short.
    -00040 
    -00041 PROJECT_BRIEF          = 
    -00042 
    -00043 # With the PROJECT_LOGO tag one can specify an logo or icon that is 
    -00044 # included in the documentation. The maximum height of the logo should not 
    -00045 # exceed 55 pixels and the maximum width should not exceed 200 pixels. 
    -00046 # Doxygen will copy the logo to the output directory.
    -00047 
    -00048 PROJECT_LOGO           = ./image/logo-mini.png
    -00049 
    -00050 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
    -00051 # base path where the generated documentation will be put. 
    -00052 # If a relative path is entered, it will be relative to the location 
    -00053 # where doxygen was started. If left blank the current directory will be used.
    -00054 
    -00055 OUTPUT_DIRECTORY       = .
    -00056 
    -00057 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
    -00058 # 4096 sub-directories (in 2 levels) under the output directory of each output 
    -00059 # format and will distribute the generated files over these directories. 
    -00060 # Enabling this option can be useful when feeding doxygen a huge amount of 
    -00061 # source files, where putting all generated files in the same directory would 
    -00062 # otherwise cause performance problems for the file system.
    -00063 
    -00064 CREATE_SUBDIRS         = NO
    -00065 
    -00066 # The OUTPUT_LANGUAGE tag is used to specify the language in which all 
    -00067 # documentation generated by doxygen is written. Doxygen will use this 
    -00068 # information to generate all constant output in the proper language. 
    -00069 # The default language is English, other supported languages are: 
    -00070 # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
    -00071 # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
    -00072 # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
    -00073 # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
    -00074 # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 
    -00075 # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
    -00076 
    -00077 OUTPUT_LANGUAGE        = English
    -00078 
    -00079 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
    -00080 # include brief member descriptions after the members that are listed in 
    -00081 # the file and class documentation (similar to JavaDoc). 
    -00082 # Set to NO to disable this.
    -00083 
    -00084 BRIEF_MEMBER_DESC      = NO
    -00085 
    -00086 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
    -00087 # the brief description of a member or function before the detailed description. 
    -00088 # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
    -00089 # brief descriptions will be completely suppressed.
    -00090 
    -00091 REPEAT_BRIEF           = YES
    -00092 
    -00093 # This tag implements a quasi-intelligent brief description abbreviator 
    -00094 # that is used to form the text in various listings. Each string 
    -00095 # in this list, if found as the leading text of the brief description, will be 
    -00096 # stripped from the text and the result after processing the whole list, is 
    -00097 # used as the annotated text. Otherwise, the brief description is used as-is. 
    -00098 # If left blank, the following values are used ("$name" is automatically 
    -00099 # replaced with the name of the entity): "The $name class" "The $name widget" 
    -00100 # "The $name file" "is" "provides" "specifies" "contains" 
    -00101 # "represents" "a" "an" "the"
    -00102 
    -00103 ABBREVIATE_BRIEF       = "The $name class       " \
    -00104                          "The $name widget       " \
    -00105                          "The $name file       " \
    -00106                          is \
    -00107                          provides \
    -00108                          specifies \
    -00109                          contains \
    -00110                          represents \
    -00111                          a \
    -00112                          an \
    -00113                          the
    -00114 
    -00115 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
    -00116 # Doxygen will generate a detailed section even if there is only a brief 
    -00117 # description.
    -00118 
    -00119 ALWAYS_DETAILED_SEC    = NO
    -00120 
    -00121 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
    -00122 # inherited members of a class in the documentation of that class as if those 
    -00123 # members were ordinary class members. Constructors, destructors and assignment 
    -00124 # operators of the base classes will not be shown.
    -00125 
    -00126 INLINE_INHERITED_MEMB  = NO
    -00127 
    -00128 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
    -00129 # path before files name in the file list and in the header files. If set 
    -00130 # to NO the shortest path that makes the file name unique will be used.
    -00131 
    -00132 FULL_PATH_NAMES        = NO
    -00133 
    -00134 # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
    -00135 # can be used to strip a user-defined part of the path. Stripping is 
    -00136 # only done if one of the specified strings matches the left-hand part of 
    -00137 # the path. The tag can be used to show relative paths in the file list. 
    -00138 # If left blank the directory from which doxygen is run is used as the 
    -00139 # path to strip.
    -00140 
    -00141 STRIP_FROM_PATH        = "C:/Documents and Settings/Groove/       "
    -00142 
    -00143 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
    -00144 # the path mentioned in the documentation of a class, which tells 
    -00145 # the reader which header file to include in order to use a class. 
    -00146 # If left blank only the name of the header file containing the class 
    -00147 # definition is used. Otherwise one should specify the include paths that 
    -00148 # are normally passed to the compiler using the -I flag.
    -00149 
    -00150 STRIP_FROM_INC_PATH    = 
    -00151 
    -00152 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
    -00153 # (but less readable) file names. This can be useful if your file system 
    -00154 # doesn't support long names like on DOS, Mac, or CD-ROM.
    -00155 
    -00156 SHORT_NAMES            = YES
    -00157 
    -00158 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
    -00159 # will interpret the first line (until the first dot) of a JavaDoc-style 
    -00160 # comment as the brief description. If set to NO, the JavaDoc 
    -00161 # comments will behave just like regular Qt-style comments 
    -00162 # (thus requiring an explicit @brief command for a brief description.)
    -00163 
    -00164 JAVADOC_AUTOBRIEF      = YES
    -00165 
    -00166 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
    -00167 # interpret the first line (until the first dot) of a Qt-style 
    -00168 # comment as the brief description. If set to NO, the comments 
    -00169 # will behave just like regular Qt-style comments (thus requiring 
    -00170 # an explicit \brief command for a brief description.)
    -00171 
    -00172 QT_AUTOBRIEF           = NO
    -00173 
    -00174 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
    -00175 # treat a multi-line C++ special comment block (i.e. a block of //! or /// 
    -00176 # comments) as a brief description. This used to be the default behaviour. 
    -00177 # The new default is to treat a multi-line C++ comment block as a detailed 
    -00178 # description. Set this tag to YES if you prefer the old behaviour instead.
    -00179 
    -00180 MULTILINE_CPP_IS_BRIEF = NO
    -00181 
    -00182 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
    -00183 # member inherits the documentation from any documented member that it 
    -00184 # re-implements.
    -00185 
    -00186 INHERIT_DOCS           = YES
    -00187 
    -00188 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
    -00189 # a new page for each member. If set to NO, the documentation of a member will 
    -00190 # be part of the file/class/namespace that contains it.
    -00191 
    -00192 SEPARATE_MEMBER_PAGES  = NO
    -00193 
    -00194 # The TAB_SIZE tag can be used to set the number of spaces in a tab. 
    -00195 # Doxygen uses this value to replace tabs by spaces in code fragments.
    -00196 
    -00197 TAB_SIZE               = 8
    -00198 
    -00199 # This tag can be used to specify a number of aliases that acts 
    -00200 # as commands in the documentation. An alias has the form "name=value". 
    -00201 # For example adding "sideeffect=\par Side Effects:\n" will allow you to 
    -00202 # put the command \sideeffect (or @sideeffect) in the documentation, which 
    -00203 # will result in a user-defined paragraph with heading "Side Effects:". 
    -00204 # You can put \n's in the value part of an alias to insert newlines.
    -00205 
    -00206 ALIASES                = 
    -00207 
    -00208 # This tag can be used to specify a number of word-keyword mappings (TCL only). 
    -00209 # A mapping has the form "name=value". For example adding 
    -00210 # "class=itcl::class" will allow you to use the command class in the 
    -00211 # itcl::class meaning.
    -00212 
    -00213 TCL_SUBST              = 
    -00214 
    -00215 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
    -00216 # sources only. Doxygen will then generate output that is more tailored for C. 
    -00217 # For instance, some of the names that are used will be different. The list 
    -00218 # of all members will be omitted, etc.
    -00219 
    -00220 OPTIMIZE_OUTPUT_FOR_C  = NO
    -00221 
    -00222 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
    -00223 # sources only. Doxygen will then generate output that is more tailored for 
    -00224 # Java. For instance, namespaces will be presented as packages, qualified 
    -00225 # scopes will look different, etc.
    -00226 
    -00227 OPTIMIZE_OUTPUT_JAVA   = NO
    -00228 
    -00229 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
    -00230 # sources only. Doxygen will then generate output that is more tailored for 
    -00231 # Fortran.
    -00232 
    -00233 OPTIMIZE_FOR_FORTRAN   = NO
    -00234 
    -00235 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
    -00236 # sources. Doxygen will then generate output that is tailored for 
    -00237 # VHDL.
    -00238 
    -00239 OPTIMIZE_OUTPUT_VHDL   = NO
    -00240 
    -00241 # Doxygen selects the parser to use depending on the extension of the files it 
    -00242 # parses. With this tag you can assign which parser to use for a given extension. 
    -00243 # Doxygen has a built-in mapping, but you can override or extend it using this 
    -00244 # tag. The format is ext=language, where ext is a file extension, and language 
    -00245 # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 
    -00246 # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
    -00247 # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 
    -00248 # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 
    -00249 # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
    -00250 
    -00251 EXTENSION_MAPPING      = 
    -00252 
    -00253 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
    -00254 # to include (a tag file for) the STL sources as input, then you should 
    -00255 # set this tag to YES in order to let doxygen match functions declarations and 
    -00256 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
    -00257 # func(std::string) {}). This also makes the inheritance and collaboration 
    -00258 # diagrams that involve STL classes more complete and accurate.
    -00259 
    -00260 BUILTIN_STL_SUPPORT    = NO
    -00261 
    -00262 # If you use Microsoft's C++/CLI language, you should set this option to YES to 
    -00263 # enable parsing support.
    -00264 
    -00265 CPP_CLI_SUPPORT        = NO
    -00266 
    -00267 # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
    -00268 # Doxygen will parse them like normal C++ but will assume all classes use public 
    -00269 # instead of private inheritance when no explicit protection keyword is present.
    -00270 
    -00271 SIP_SUPPORT            = NO
    -00272 
    -00273 # For Microsoft's IDL there are propget and propput attributes to indicate getter 
    -00274 # and setter methods for a property. Setting this option to YES (the default) 
    -00275 # will make doxygen replace the get and set methods by a property in the 
    -00276 # documentation. This will only work if the methods are indeed getting or 
    -00277 # setting a simple type. If this is not the case, or you want to show the 
    -00278 # methods anyway, you should set this option to NO.
    -00279 
    -00280 IDL_PROPERTY_SUPPORT   = YES
    -00281 
    -00282 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
    -00283 # tag is set to YES, then doxygen will reuse the documentation of the first 
    -00284 # member in the group (if any) for the other members of the group. By default 
    -00285 # all members of a group must be documented explicitly.
    -00286 
    -00287 DISTRIBUTE_GROUP_DOC   = NO
    -00288 
    -00289 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
    -00290 # the same type (for instance a group of public functions) to be put as a 
    -00291 # subgroup of that type (e.g. under the Public Functions section). Set it to 
    -00292 # NO to prevent subgrouping. Alternatively, this can be done per class using 
    -00293 # the \nosubgrouping command.
    -00294 
    -00295 SUBGROUPING            = NO
    -00296 
    -00297 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
    -00298 # unions are shown inside the group in which they are included (e.g. using 
    -00299 # @ingroup) instead of on a separate page (for HTML and Man pages) or 
    -00300 # section (for LaTeX and RTF).
    -00301 
    -00302 INLINE_GROUPED_CLASSES = NO
    -00303 
    -00304 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 
    -00305 # unions with only public data fields will be shown inline in the documentation 
    -00306 # of the scope in which they are defined (i.e. file, namespace, or group 
    -00307 # documentation), provided this scope is documented. If set to NO (the default), 
    -00308 # structs, classes, and unions are shown on a separate page (for HTML and Man 
    -00309 # pages) or section (for LaTeX and RTF).
    -00310 
    -00311 INLINE_SIMPLE_STRUCTS  = NO
    -00312 
    -00313 # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
    -00314 # is documented as struct, union, or enum with the name of the typedef. So 
    -00315 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
    -00316 # with name TypeT. When disabled the typedef will appear as a member of a file, 
    -00317 # namespace, or class. And the struct will be named TypeS. This can typically 
    -00318 # be useful for C code in case the coding convention dictates that all compound 
    -00319 # types are typedef'ed and only the typedef is referenced, never the tag name.
    -00320 
    -00321 TYPEDEF_HIDES_STRUCT   = NO
    -00322 
    -00323 # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
    -00324 # determine which symbols to keep in memory and which to flush to disk. 
    -00325 # When the cache is full, less often used symbols will be written to disk. 
    -00326 # For small to medium size projects (<1000 input files) the default value is 
    -00327 # probably good enough. For larger projects a too small cache size can cause 
    -00328 # doxygen to be busy swapping symbols to and from disk most of the time 
    -00329 # causing a significant performance penalty. 
    -00330 # If the system has enough physical memory increasing the cache will improve the 
    -00331 # performance by keeping more symbols in memory. Note that the value works on 
    -00332 # a logarithmic scale so increasing the size by one will roughly double the 
    -00333 # memory usage. The cache size is given by this formula: 
    -00334 # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
    -00335 # corresponding to a cache size of 2^16 = 65536 symbols
    -00336 
    -00337 SYMBOL_CACHE_SIZE      = 0
    -00338 
    -00339 #---------------------------------------------------------------------------
    -00340 # Build related configuration options
    -00341 #---------------------------------------------------------------------------
    -00342 
    -00343 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
    -00344 # documentation are documented, even if no documentation was available. 
    -00345 # Private class members and static file members will be hidden unless 
    -00346 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
    -00347 
    -00348 EXTRACT_ALL            = NO
    -00349 
    -00350 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
    -00351 # will be included in the documentation.
    -00352 
    -00353 EXTRACT_PRIVATE        = NO
    -00354 
    -00355 # If the EXTRACT_STATIC tag is set to YES all static members of a file 
    -00356 # will be included in the documentation.
    -00357 
    -00358 EXTRACT_STATIC         = YES
    -00359 
    -00360 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
    -00361 # defined locally in source files will be included in the documentation. 
    -00362 # If set to NO only classes defined in header files are included.
    -00363 
    -00364 EXTRACT_LOCAL_CLASSES  = NO
    -00365 
    -00366 # This flag is only useful for Objective-C code. When set to YES local 
    -00367 # methods, which are defined in the implementation section but not in 
    -00368 # the interface are included in the documentation. 
    -00369 # If set to NO (the default) only methods in the interface are included.
    -00370 
    -00371 EXTRACT_LOCAL_METHODS  = NO
    -00372 
    -00373 # If this flag is set to YES, the members of anonymous namespaces will be 
    -00374 # extracted and appear in the documentation as a namespace called 
    -00375 # 'anonymous_namespace{file}', where file will be replaced with the base 
    -00376 # name of the file that contains the anonymous namespace. By default 
    -00377 # anonymous namespaces are hidden.
    -00378 
    -00379 EXTRACT_ANON_NSPACES   = NO
    -00380 
    -00381 # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
    -00382 # undocumented members of documented classes, files or namespaces. 
    -00383 # If set to NO (the default) these members will be included in the 
    -00384 # various overviews, but no documentation section is generated. 
    -00385 # This option has no effect if EXTRACT_ALL is enabled.
    -00386 
    -00387 HIDE_UNDOC_MEMBERS     = YES
    -00388 
    -00389 # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
    -00390 # undocumented classes that are normally visible in the class hierarchy. 
    -00391 # If set to NO (the default) these classes will be included in the various 
    -00392 # overviews. This option has no effect if EXTRACT_ALL is enabled.
    -00393 
    -00394 HIDE_UNDOC_CLASSES     = YES
    -00395 
    -00396 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
    -00397 # friend (class|struct|union) declarations. 
    -00398 # If set to NO (the default) these declarations will be included in the 
    -00399 # documentation.
    -00400 
    -00401 HIDE_FRIEND_COMPOUNDS  = YES
    -00402 
    -00403 # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
    -00404 # documentation blocks found inside the body of a function. 
    -00405 # If set to NO (the default) these blocks will be appended to the 
    -00406 # function's detailed documentation block.
    -00407 
    -00408 HIDE_IN_BODY_DOCS      = YES
    -00409 
    -00410 # The INTERNAL_DOCS tag determines if documentation 
    -00411 # that is typed after a \internal command is included. If the tag is set 
    -00412 # to NO (the default) then the documentation will be excluded. 
    -00413 # Set it to YES to include the internal documentation.
    -00414 
    -00415 INTERNAL_DOCS          = NO
    -00416 
    -00417 # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
    -00418 # file names in lower-case letters. If set to YES upper-case letters are also 
    -00419 # allowed. This is useful if you have classes or files whose names only differ 
    -00420 # in case and if your file system supports case sensitive file names. Windows 
    -00421 # and Mac users are advised to set this option to NO.
    -00422 
    -00423 CASE_SENSE_NAMES       = YES
    -00424 
    -00425 # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
    -00426 # will show members with their full class and namespace scopes in the 
    -00427 # documentation. If set to YES the scope will be hidden.
    -00428 
    -00429 HIDE_SCOPE_NAMES       = YES
    -00430 
    -00431 # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
    -00432 # will put a list of the files that are included by a file in the documentation 
    -00433 # of that file.
    -00434 
    -00435 SHOW_INCLUDE_FILES     = NO
    -00436 
    -00437 # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
    -00438 # will list include files with double quotes in the documentation 
    -00439 # rather than with sharp brackets.
    -00440 
    -00441 FORCE_LOCAL_INCLUDES   = NO
    -00442 
    -00443 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
    -00444 # is inserted in the documentation for inline members.
    -00445 
    -00446 INLINE_INFO            = NO
    -00447 
    -00448 # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
    -00449 # will sort the (detailed) documentation of file and class members 
    -00450 # alphabetically by member name. If set to NO the members will appear in 
    -00451 # declaration order.
    -00452 
    -00453 SORT_MEMBER_DOCS       = YES
    -00454 
    -00455 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
    -00456 # brief documentation of file, namespace and class members alphabetically 
    -00457 # by member name. If set to NO (the default) the members will appear in 
    -00458 # declaration order.
    -00459 
    -00460 SORT_BRIEF_DOCS        = YES
    -00461 
    -00462 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
    -00463 # will sort the (brief and detailed) documentation of class members so that 
    -00464 # constructors and destructors are listed first. If set to NO (the default) 
    -00465 # the constructors will appear in the respective orders defined by 
    -00466 # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
    -00467 # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
    -00468 # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
    -00469 
    -00470 SORT_MEMBERS_CTORS_1ST = NO
    -00471 
    -00472 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
    -00473 # hierarchy of group names into alphabetical order. If set to NO (the default) 
    -00474 # the group names will appear in their defined order.
    -00475 
    -00476 SORT_GROUP_NAMES       = NO
    -00477 
    -00478 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
    -00479 # sorted by fully-qualified names, including namespaces. If set to 
    -00480 # NO (the default), the class list will be sorted only by class name, 
    -00481 # not including the namespace part. 
    -00482 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
    -00483 # Note: This option applies only to the class list, not to the 
    -00484 # alphabetical list.
    -00485 
    -00486 SORT_BY_SCOPE_NAME     = YES
    -00487 
    -00488 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
    -00489 # do proper type resolution of all parameters of a function it will reject a 
    -00490 # match between the prototype and the implementation of a member function even 
    -00491 # if there is only one candidate or it is obvious which candidate to choose 
    -00492 # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 
    -00493 # will still accept a match between prototype and implementation in such cases.
    -00494 
    -00495 STRICT_PROTO_MATCHING  = NO
    -00496 
    -00497 # The GENERATE_TODOLIST tag can be used to enable (YES) or 
    -00498 # disable (NO) the todo list. This list is created by putting \todo 
    -00499 # commands in the documentation.
    -00500 
    -00501 GENERATE_TODOLIST      = YES
    -00502 
    -00503 # The GENERATE_TESTLIST tag can be used to enable (YES) or 
    -00504 # disable (NO) the test list. This list is created by putting \test 
    -00505 # commands in the documentation.
    -00506 
    -00507 GENERATE_TESTLIST      = YES
    -00508 
    -00509 # The GENERATE_BUGLIST tag can be used to enable (YES) or 
    -00510 # disable (NO) the bug list. This list is created by putting \bug 
    -00511 # commands in the documentation.
    -00512 
    -00513 GENERATE_BUGLIST       = YES
    -00514 
    -00515 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
    -00516 # disable (NO) the deprecated list. This list is created by putting 
    -00517 # \deprecated commands in the documentation.
    -00518 
    -00519 GENERATE_DEPRECATEDLIST= YES
    -00520 
    -00521 # The ENABLED_SECTIONS tag can be used to enable conditional 
    -00522 # documentation sections, marked by \if sectionname ... \endif.
    -00523 
    -00524 ENABLED_SECTIONS       = 
    -00525 
    -00526 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
    -00527 # the initial value of a variable or macro consists of for it to appear in 
    -00528 # the documentation. If the initializer consists of more lines than specified 
    -00529 # here it will be hidden. Use a value of 0 to hide initializers completely. 
    -00530 # The appearance of the initializer of individual variables and macros in the 
    -00531 # documentation can be controlled using \showinitializer or \hideinitializer 
    -00532 # command in the documentation regardless of this setting.
    -00533 
    -00534 MAX_INITIALIZER_LINES  = 30
    -00535 
    -00536 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
    -00537 # at the bottom of the documentation of classes and structs. If set to YES the 
    -00538 # list will mention the files that were used to generate the documentation.
    -00539 
    -00540 SHOW_USED_FILES        = NO
    -00541 
    -00542 # If the sources in your project are distributed over multiple directories 
    -00543 # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
    -00544 # in the documentation. The default is NO.
    -00545 
    -00546 SHOW_DIRECTORIES       = NO
    -00547 
    -00548 # Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
    -00549 # This will remove the Files entry from the Quick Index and from the 
    -00550 # Folder Tree View (if specified). The default is YES.
    -00551 
    -00552 SHOW_FILES             = YES
    -00553 
    -00554 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
    -00555 # Namespaces page.  This will remove the Namespaces entry from the Quick Index 
    -00556 # and from the Folder Tree View (if specified). The default is YES.
    -00557 
    -00558 SHOW_NAMESPACES        = YES
    -00559 
    -00560 # The FILE_VERSION_FILTER tag can be used to specify a program or script that 
    -00561 # doxygen should invoke to get the current version for each file (typically from 
    -00562 # the version control system). Doxygen will invoke the program by executing (via 
    -00563 # popen()) the command <command> <input-file>, where <command> is the value of 
    -00564 # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
    -00565 # provided by doxygen. Whatever the program writes to standard output 
    -00566 # is used as the file version. See the manual for examples.
    -00567 
    -00568 FILE_VERSION_FILTER    = 
    -00569 
    -00570 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
    -00571 # by doxygen. The layout file controls the global structure of the generated 
    -00572 # output files in an output format independent way. The create the layout file 
    -00573 # that represents doxygen's defaults, run doxygen with the -l option. 
    -00574 # You can optionally specify a file name after the option, if omitted 
    -00575 # DoxygenLayout.xml will be used as the name of the layout file.
    -00576 
    -00577 LAYOUT_FILE            = 
    -00578 
    -00579 # The CITE_BIB_FILES tag can be used to specify one or more bib files 
    -00580 # containing the references data. This must be a list of .bib files. The 
    -00581 # .bib extension is automatically appended if omitted. Using this command 
    -00582 # requires the bibtex tool to be installed. See also 
    -00583 # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style 
    -00584 # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
    -00585 # feature you need bibtex and perl available in the search path.
    -00586 
    -00587 CITE_BIB_FILES         = 
    -00588 
    -00589 #---------------------------------------------------------------------------
    -00590 # configuration options related to warning and progress messages
    -00591 #---------------------------------------------------------------------------
    -00592 
    -00593 # The QUIET tag can be used to turn on/off the messages that are generated 
    -00594 # by doxygen. Possible values are YES and NO. If left blank NO is used.
    -00595 
    -00596 QUIET                  = NO
    -00597 
    -00598 # The WARNINGS tag can be used to turn on/off the warning messages that are 
    -00599 # generated by doxygen. Possible values are YES and NO. If left blank 
    -00600 # NO is used.
    -00601 
    -00602 WARNINGS               = YES
    -00603 
    -00604 # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
    -00605 # for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
    -00606 # automatically be disabled.
    -00607 
    -00608 WARN_IF_UNDOCUMENTED   = YES
    -00609 
    -00610 # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
    -00611 # potential errors in the documentation, such as not documenting some 
    -00612 # parameters in a documented function, or documenting parameters that 
    -00613 # don't exist or using markup commands wrongly.
    -00614 
    -00615 WARN_IF_DOC_ERROR      = YES
    -00616 
    -00617 # The WARN_NO_PARAMDOC option can be enabled to get warnings for 
    -00618 # functions that are documented, but have no documentation for their parameters 
    -00619 # or return value. If set to NO (the default) doxygen will only warn about 
    -00620 # wrong or incomplete parameter documentation, but not about the absence of 
    -00621 # documentation.
    -00622 
    -00623 WARN_NO_PARAMDOC       = NO
    -00624 
    -00625 # The WARN_FORMAT tag determines the format of the warning messages that 
    -00626 # doxygen can produce. The string should contain the $file, $line, and $text 
    -00627 # tags, which will be replaced by the file and line number from which the 
    -00628 # warning originated and the warning text. Optionally the format may contain 
    -00629 # $version, which will be replaced by the version of the file (if it could 
    -00630 # be obtained via FILE_VERSION_FILTER)
    -00631 
    -00632 WARN_FORMAT            = "$file:$line: $text"
    -00633 
    -00634 # The WARN_LOGFILE tag can be used to specify a file to which warning 
    -00635 # and error messages should be written. If left blank the output is written 
    -00636 # to stderr.
    -00637 
    -00638 WARN_LOGFILE           = 
    -00639 
    -00640 #---------------------------------------------------------------------------
    -00641 # configuration options related to the input files
    -00642 #---------------------------------------------------------------------------
    -00643 
    -00644 # The INPUT tag can be used to specify the files and/or directories that contain 
    -00645 # documented source files. You may enter file names like "myfile.cpp" or 
    -00646 # directories like "/usr/src/myproject". Separate the files or directories 
    -00647 # with spaces.
    -00648 
    -00649 INPUT                  = ../glm \
    -00650                          .
    -00651 
    -00652 # This tag can be used to specify the character encoding of the source files 
    -00653 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
    -00654 # also the default input encoding. Doxygen uses libiconv (or the iconv built 
    -00655 # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
    -00656 # the list of possible encodings.
    -00657 
    -00658 INPUT_ENCODING         = UTF-8
    -00659 
    -00660 # If the value of the INPUT tag contains directories, you can use the 
    -00661 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
    -00662 # and *.h) to filter out the source-files in the directories. If left 
    -00663 # blank the following patterns are tested: 
    -00664 # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
    -00665 # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
    -00666 # *.f90 *.f *.for *.vhd *.vhdl
    -00667 
    -00668 FILE_PATTERNS          = *.hpp \
    -00669                          *.doxy
    -00670 
    -00671 # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
    -00672 # should be searched for input files as well. Possible values are YES and NO. 
    -00673 # If left blank NO is used.
    -00674 
    -00675 RECURSIVE              = YES
    -00676 
    -00677 # The EXCLUDE tag can be used to specify files and/or directories that should be 
    -00678 # excluded from the INPUT source files. This way you can easily exclude a 
    -00679 # subdirectory from a directory tree whose root is specified with the INPUT tag. 
    -00680 # Note that relative paths are relative to the directory from which doxygen is 
    -00681 # run.
    -00682 
    -00683 EXCLUDE                = 
    -00684 
    -00685 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 
    -00686 # directories that are symbolic links (a Unix file system feature) are excluded 
    -00687 # from the input.
    -00688 
    -00689 EXCLUDE_SYMLINKS       = NO
    -00690 
    -00691 # If the value of the INPUT tag contains directories, you can use the 
    -00692 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
    -00693 # certain files from those directories. Note that the wildcards are matched 
    -00694 # against the file with absolute path, so to exclude all test directories 
    -00695 # for example use the pattern */test/*
    -00696 
    -00697 EXCLUDE_PATTERNS       = 
    -00698 
    -00699 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
    -00700 # (namespaces, classes, functions, etc.) that should be excluded from the 
    -00701 # output. The symbol name can be a fully qualified name, a word, or if the 
    -00702 # wildcard * is used, a substring. Examples: ANamespace, AClass, 
    -00703 # AClass::ANamespace, ANamespace::*Test
    -00704 
    -00705 EXCLUDE_SYMBOLS        = 
    -00706 
    -00707 # The EXAMPLE_PATH tag can be used to specify one or more files or 
    -00708 # directories that contain example code fragments that are included (see 
    -00709 # the \include command).
    -00710 
    -00711 EXAMPLE_PATH           = 
    -00712 
    -00713 # If the value of the EXAMPLE_PATH tag contains directories, you can use the 
    -00714 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
    -00715 # and *.h) to filter out the source-files in the directories. If left 
    -00716 # blank all files are included.
    -00717 
    -00718 EXAMPLE_PATTERNS       = *
    -00719 
    -00720 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
    -00721 # searched for input files to be used with the \include or \dontinclude 
    -00722 # commands irrespective of the value of the RECURSIVE tag. 
    -00723 # Possible values are YES and NO. If left blank NO is used.
    -00724 
    -00725 EXAMPLE_RECURSIVE      = NO
    -00726 
    -00727 # The IMAGE_PATH tag can be used to specify one or more files or 
    -00728 # directories that contain image that are included in the documentation (see 
    -00729 # the \image command).
    -00730 
    -00731 IMAGE_PATH             = 
    -00732 
    -00733 # The INPUT_FILTER tag can be used to specify a program that doxygen should 
    -00734 # invoke to filter for each input file. Doxygen will invoke the filter program 
    -00735 # by executing (via popen()) the command <filter> <input-file>, where <filter> 
    -00736 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
    -00737 # input file. Doxygen will then use the output that the filter program writes 
    -00738 # to standard output.  If FILTER_PATTERNS is specified, this tag will be 
    -00739 # ignored.
    -00740 
    -00741 INPUT_FILTER           = 
    -00742 
    -00743 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
    -00744 # basis.  Doxygen will compare the file name with each pattern and apply the 
    -00745 # filter if there is a match.  The filters are a list of the form: 
    -00746 # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
    -00747 # info on how filters are used. If FILTER_PATTERNS is empty or if 
    -00748 # non of the patterns match the file name, INPUT_FILTER is applied.
    -00749 
    -00750 FILTER_PATTERNS        = 
    -00751 
    -00752 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
    -00753 # INPUT_FILTER) will be used to filter the input files when producing source 
    -00754 # files to browse (i.e. when SOURCE_BROWSER is set to YES).
    -00755 
    -00756 FILTER_SOURCE_FILES    = NO
    -00757 
    -00758 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
    -00759 # pattern. A pattern will override the setting for FILTER_PATTERN (if any) 
    -00760 # and it is also possible to disable source filtering for a specific pattern 
    -00761 # using *.ext= (so without naming a filter). This option only has effect when 
    -00762 # FILTER_SOURCE_FILES is enabled.
    -00763 
    -00764 FILTER_SOURCE_PATTERNS = 
    -00765 
    -00766 #---------------------------------------------------------------------------
    -00767 # configuration options related to source browsing
    -00768 #---------------------------------------------------------------------------
    -00769 
    -00770 # If the SOURCE_BROWSER tag is set to YES then a list of source files will 
    -00771 # be generated. Documented entities will be cross-referenced with these sources. 
    -00772 # Note: To get rid of all source code in the generated output, make sure also 
    -00773 # VERBATIM_HEADERS is set to NO.
    -00774 
    -00775 SOURCE_BROWSER         = YES
    -00776 
    -00777 # Setting the INLINE_SOURCES tag to YES will include the body 
    -00778 # of functions and classes directly in the documentation.
    -00779 
    -00780 INLINE_SOURCES         = NO
    -00781 
    -00782 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
    -00783 # doxygen to hide any special comment blocks from generated source code 
    -00784 # fragments. Normal C and C++ comments will always remain visible.
    -00785 
    -00786 STRIP_CODE_COMMENTS    = YES
    -00787 
    -00788 # If the REFERENCED_BY_RELATION tag is set to YES 
    -00789 # then for each documented function all documented 
    -00790 # functions referencing it will be listed.
    -00791 
    -00792 REFERENCED_BY_RELATION = YES
    -00793 
    -00794 # If the REFERENCES_RELATION tag is set to YES 
    -00795 # then for each documented function all documented entities 
    -00796 # called/used by that function will be listed.
    -00797 
    -00798 REFERENCES_RELATION    = YES
    -00799 
    -00800 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
    -00801 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
    -00802 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
    -00803 # link to the source code.  Otherwise they will link to the documentation.
    -00804 
    -00805 REFERENCES_LINK_SOURCE = YES
    -00806 
    -00807 # If the USE_HTAGS tag is set to YES then the references to source code 
    -00808 # will point to the HTML generated by the htags(1) tool instead of doxygen 
    -00809 # built-in source browser. The htags tool is part of GNU's global source 
    -00810 # tagging system (see http://www.gnu.org/software/global/global.html). You 
    -00811 # will need version 4.8.6 or higher.
    -00812 
    -00813 USE_HTAGS              = NO
    -00814 
    -00815 # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
    -00816 # will generate a verbatim copy of the header file for each class for 
    -00817 # which an include is specified. Set to NO to disable this.
    -00818 
    -00819 VERBATIM_HEADERS       = YES
    -00820 
    -00821 #---------------------------------------------------------------------------
    -00822 # configuration options related to the alphabetical class index
    -00823 #---------------------------------------------------------------------------
    -00824 
    -00825 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
    -00826 # of all compounds will be generated. Enable this if the project 
    -00827 # contains a lot of classes, structs, unions or interfaces.
    -00828 
    -00829 ALPHABETICAL_INDEX     = NO
    -00830 
    -00831 # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
    -00832 # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
    -00833 # in which this list will be split (can be a number in the range [1..20])
    -00834 
    -00835 COLS_IN_ALPHA_INDEX    = 5
    -00836 
    -00837 # In case all classes in a project start with a common prefix, all 
    -00838 # classes will be put under the same header in the alphabetical index. 
    -00839 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
    -00840 # should be ignored while generating the index headers.
    -00841 
    -00842 IGNORE_PREFIX          = 
    -00843 
    -00844 #---------------------------------------------------------------------------
    -00845 # configuration options related to the HTML output
    -00846 #---------------------------------------------------------------------------
    -00847 
    -00848 # If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
    -00849 # generate HTML output.
    -00850 
    -00851 GENERATE_HTML          = YES
    -00852 
    -00853 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
    -00854 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    -00855 # put in front of it. If left blank `html' will be used as the default path.
    -00856 
    -00857 HTML_OUTPUT            = html
    -00858 
    -00859 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
    -00860 # each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
    -00861 # doxygen will generate files with .html extension.
    -00862 
    -00863 HTML_FILE_EXTENSION    = .html
    -00864 
    -00865 # The HTML_HEADER tag can be used to specify a personal HTML header for 
    -00866 # each generated HTML page. If it is left blank doxygen will generate a 
    -00867 # standard header. Note that when using a custom header you are responsible  
    -00868 # for the proper inclusion of any scripts and style sheets that doxygen 
    -00869 # needs, which is dependent on the configuration options used. 
    -00870 # It is advised to generate a default header using "doxygen -w html 
    -00871 # header.html footer.html stylesheet.css YourConfigFile" and then modify 
    -00872 # that header. Note that the header is subject to change so you typically 
    -00873 # have to redo this when upgrading to a newer version of doxygen or when 
    -00874 # changing the value of configuration settings such as GENERATE_TREEVIEW!
    -00875 
    -00876 HTML_HEADER            = 
    -00877 
    -00878 # The HTML_FOOTER tag can be used to specify a personal HTML footer for 
    -00879 # each generated HTML page. If it is left blank doxygen will generate a 
    -00880 # standard footer.
    -00881 
    -00882 HTML_FOOTER            = 
    -00883 
    -00884 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
    -00885 # style sheet that is used by each HTML page. It can be used to 
    -00886 # fine-tune the look of the HTML output. If the tag is left blank doxygen 
    -00887 # will generate a default style sheet. Note that doxygen will try to copy 
    -00888 # the style sheet file to the HTML output directory, so don't put your own 
    -00889 # style sheet in the HTML output directory as well, or it will be erased!
    -00890 
    -00891 HTML_STYLESHEET        = 
    -00892 
    -00893 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
    -00894 # other source files which should be copied to the HTML output directory. Note 
    -00895 # that these files will be copied to the base HTML output directory. Use the 
    -00896 # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
    -00897 # files. In the HTML_STYLESHEET file, use the file name only. Also note that 
    -00898 # the files will be copied as-is; there are no commands or markers available.
    -00899 
    -00900 HTML_EXTRA_FILES       = 
    -00901 
    -00902 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
    -00903 # Doxygen will adjust the colors in the style sheet and background images 
    -00904 # according to this color. Hue is specified as an angle on a colorwheel, 
    -00905 # see http://en.wikipedia.org/wiki/Hue for more information. 
    -00906 # For instance the value 0 represents red, 60 is yellow, 120 is green, 
    -00907 # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
    -00908 # The allowed range is 0 to 359.
    -00909 
    -00910 HTML_COLORSTYLE_HUE    = 220
    -00911 
    -00912 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
    -00913 # the colors in the HTML output. For a value of 0 the output will use 
    -00914 # grayscales only. A value of 255 will produce the most vivid colors.
    -00915 
    -00916 HTML_COLORSTYLE_SAT    = 100
    -00917 
    -00918 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
    -00919 # the luminance component of the colors in the HTML output. Values below 
    -00920 # 100 gradually make the output lighter, whereas values above 100 make 
    -00921 # the output darker. The value divided by 100 is the actual gamma applied, 
    -00922 # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
    -00923 # and 100 does not change the gamma.
    -00924 
    -00925 HTML_COLORSTYLE_GAMMA  = 80
    -00926 
    -00927 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
    -00928 # page will contain the date and time when the page was generated. Setting 
    -00929 # this to NO can help when comparing the output of multiple runs.
    -00930 
    -00931 HTML_TIMESTAMP         = NO
    -00932 
    -00933 # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
    -00934 # files or namespaces will be aligned in HTML using tables. If set to 
    -00935 # NO a bullet list will be used.
    -00936 
    -00937 HTML_ALIGN_MEMBERS     = YES
    -00938 
    -00939 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
    -00940 # documentation will contain sections that can be hidden and shown after the 
    -00941 # page has loaded. For this to work a browser that supports 
    -00942 # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
    -00943 # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
    -00944 
    -00945 HTML_DYNAMIC_SECTIONS  = NO
    -00946 
    -00947 # If the GENERATE_DOCSET tag is set to YES, additional index files 
    -00948 # will be generated that can be used as input for Apple's Xcode 3 
    -00949 # integrated development environment, introduced with OSX 10.5 (Leopard). 
    -00950 # To create a documentation set, doxygen will generate a Makefile in the 
    -00951 # HTML output directory. Running make will produce the docset in that 
    -00952 # directory and running "make install" will install the docset in 
    -00953 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
    -00954 # it at startup. 
    -00955 # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
    -00956 # for more information.
    -00957 
    -00958 GENERATE_DOCSET        = NO
    -00959 
    -00960 # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
    -00961 # feed. A documentation feed provides an umbrella under which multiple 
    -00962 # documentation sets from a single provider (such as a company or product suite) 
    -00963 # can be grouped.
    -00964 
    -00965 DOCSET_FEEDNAME        = "Doxygen generated docs"
    -00966 
    -00967 # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
    -00968 # should uniquely identify the documentation set bundle. This should be a 
    -00969 # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
    -00970 # will append .docset to the name.
    -00971 
    -00972 DOCSET_BUNDLE_ID       = org.doxygen.Project
    -00973 
    -00974 # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify 
    -00975 # the documentation publisher. This should be a reverse domain-name style 
    -00976 # string, e.g. com.mycompany.MyDocSet.documentation.
    -00977 
    -00978 DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
    -00979 
    -00980 # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
    -00981 
    -00982 DOCSET_PUBLISHER_NAME  = Publisher
    -00983 
    -00984 # If the GENERATE_HTMLHELP tag is set to YES, additional index files 
    -00985 # will be generated that can be used as input for tools like the 
    -00986 # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
    -00987 # of the generated HTML documentation.
    -00988 
    -00989 GENERATE_HTMLHELP      = NO
    -00990 
    -00991 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
    -00992 # be used to specify the file name of the resulting .chm file. You 
    -00993 # can add a path in front of the file if the result should not be 
    -00994 # written to the html output directory.
    -00995 
    -00996 CHM_FILE               = 
    -00997 
    -00998 # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
    -00999 # be used to specify the location (absolute path including file name) of 
    -01000 # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
    -01001 # the HTML help compiler on the generated index.hhp.
    -01002 
    -01003 HHC_LOCATION           = 
    -01004 
    -01005 # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
    -01006 # controls if a separate .chi index file is generated (YES) or that 
    -01007 # it should be included in the master .chm file (NO).
    -01008 
    -01009 GENERATE_CHI           = NO
    -01010 
    -01011 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
    -01012 # is used to encode HtmlHelp index (hhk), content (hhc) and project file 
    -01013 # content.
    -01014 
    -01015 CHM_INDEX_ENCODING     = 
    -01016 
    -01017 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
    -01018 # controls whether a binary table of contents is generated (YES) or a 
    -01019 # normal table of contents (NO) in the .chm file.
    -01020 
    -01021 BINARY_TOC             = NO
    -01022 
    -01023 # The TOC_EXPAND flag can be set to YES to add extra items for group members 
    -01024 # to the contents of the HTML help documentation and to the tree view.
    -01025 
    -01026 TOC_EXPAND             = NO
    -01027 
    -01028 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
    -01029 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
    -01030 # that can be used as input for Qt's qhelpgenerator to generate a 
    -01031 # Qt Compressed Help (.qch) of the generated HTML documentation.
    -01032 
    -01033 GENERATE_QHP           = NO
    -01034 
    -01035 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
    -01036 # be used to specify the file name of the resulting .qch file. 
    -01037 # The path specified is relative to the HTML output folder.
    -01038 
    -01039 QCH_FILE               = 
    -01040 
    -01041 # The QHP_NAMESPACE tag specifies the namespace to use when generating 
    -01042 # Qt Help Project output. For more information please see 
    -01043 # http://doc.trolltech.com/qthelpproject.html#namespace
    -01044 
    -01045 QHP_NAMESPACE          = org.doxygen.Project
    -01046 
    -01047 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
    -01048 # Qt Help Project output. For more information please see 
    -01049 # http://doc.trolltech.com/qthelpproject.html#virtual-folders
    -01050 
    -01051 QHP_VIRTUAL_FOLDER     = doc
    -01052 
    -01053 # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
    -01054 # add. For more information please see 
    -01055 # http://doc.trolltech.com/qthelpproject.html#custom-filters
    -01056 
    -01057 QHP_CUST_FILTER_NAME   = 
    -01058 
    -01059 # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
    -01060 # custom filter to add. For more information please see 
    -01061 # <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 
    -01062 # Qt Help Project / Custom Filters</a>.
    -01063 
    -01064 QHP_CUST_FILTER_ATTRS  = 
    -01065 
    -01066 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
    -01067 # project's 
    -01068 # filter section matches. 
    -01069 # <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 
    -01070 # Qt Help Project / Filter Attributes</a>.
    -01071 
    -01072 QHP_SECT_FILTER_ATTRS  = 
    -01073 
    -01074 # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
    -01075 # be used to specify the location of Qt's qhelpgenerator. 
    -01076 # If non-empty doxygen will try to run qhelpgenerator on the generated 
    -01077 # .qhp file.
    -01078 
    -01079 QHG_LOCATION           = 
    -01080 
    -01081 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
    -01082 # will be generated, which together with the HTML files, form an Eclipse help 
    -01083 # plugin. To install this plugin and make it available under the help contents 
    -01084 # menu in Eclipse, the contents of the directory containing the HTML and XML 
    -01085 # files needs to be copied into the plugins directory of eclipse. The name of 
    -01086 # the directory within the plugins directory should be the same as 
    -01087 # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
    -01088 # the help appears.
    -01089 
    -01090 GENERATE_ECLIPSEHELP   = NO
    -01091 
    -01092 # A unique identifier for the eclipse help plugin. When installing the plugin 
    -01093 # the directory name containing the HTML and XML files should also have 
    -01094 # this name.
    -01095 
    -01096 ECLIPSE_DOC_ID         = org.doxygen.Project
    -01097 
    -01098 # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) 
    -01099 # at top of each HTML page. The value NO (the default) enables the index and 
    -01100 # the value YES disables it. Since the tabs have the same information as the 
    -01101 # navigation tree you can set this option to NO if you already set 
    -01102 # GENERATE_TREEVIEW to YES.
    -01103 
    -01104 DISABLE_INDEX          = NO
    -01105 
    -01106 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
    -01107 # structure should be generated to display hierarchical information. 
    -01108 # If the tag value is set to YES, a side panel will be generated 
    -01109 # containing a tree-like index structure (just like the one that 
    -01110 # is generated for HTML Help). For this to work a browser that supports 
    -01111 # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
    -01112 # Windows users are probably better off using the HTML help feature. 
    -01113 # Since the tree basically has the same information as the tab index you 
    -01114 # could consider to set DISABLE_INDEX to NO when enabling this option.
    -01115 
    -01116 GENERATE_TREEVIEW      = NO
    -01117 
    -01118 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
    -01119 # (range [0,1..20]) that doxygen will group on one line in the generated HTML 
    -01120 # documentation. Note that a value of 0 will completely suppress the enum 
    -01121 # values from appearing in the overview section.
    -01122 
    -01123 ENUM_VALUES_PER_LINE   = 4
    -01124 
    -01125 # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
    -01126 # and Class Hierarchy pages using a tree view instead of an ordered list.
    -01127 
    -01128 USE_INLINE_TREES       = NO
    -01129 
    -01130 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
    -01131 # used to set the initial width (in pixels) of the frame in which the tree 
    -01132 # is shown.
    -01133 
    -01134 TREEVIEW_WIDTH         = 250
    -01135 
    -01136 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
    -01137 # links to external symbols imported via tag files in a separate window.
    -01138 
    -01139 EXT_LINKS_IN_WINDOW    = NO
    -01140 
    -01141 # Use this tag to change the font size of Latex formulas included 
    -01142 # as images in the HTML documentation. The default is 10. Note that 
    -01143 # when you change the font size after a successful doxygen run you need 
    -01144 # to manually remove any form_*.png images from the HTML output directory 
    -01145 # to force them to be regenerated.
    -01146 
    -01147 FORMULA_FONTSIZE       = 10
    -01148 
    -01149 # Use the FORMULA_TRANPARENT tag to determine whether or not the images 
    -01150 # generated for formulas are transparent PNGs. Transparent PNGs are 
    -01151 # not supported properly for IE 6.0, but are supported on all modern browsers. 
    -01152 # Note that when changing this option you need to delete any form_*.png files 
    -01153 # in the HTML output before the changes have effect.
    -01154 
    -01155 FORMULA_TRANSPARENT    = YES
    -01156 
    -01157 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
    -01158 # (see http://www.mathjax.org) which uses client side Javascript for the 
    -01159 # rendering instead of using prerendered bitmaps. Use this if you do not 
    -01160 # have LaTeX installed or if you want to formulas look prettier in the HTML 
    -01161 # output. When enabled you also need to install MathJax separately and 
    -01162 # configure the path to it using the MATHJAX_RELPATH option.
    -01163 
    -01164 USE_MATHJAX            = NO
    -01165 
    -01166 # When MathJax is enabled you need to specify the location relative to the 
    -01167 # HTML output directory using the MATHJAX_RELPATH option. The destination 
    -01168 # directory should contain the MathJax.js script. For instance, if the mathjax 
    -01169 # directory is located at the same level as the HTML output directory, then 
    -01170 # MATHJAX_RELPATH should be ../mathjax. The default value points to the 
    -01171 # mathjax.org site, so you can quickly see the result without installing 
    -01172 # MathJax, but it is strongly recommended to install a local copy of MathJax 
    -01173 # before deployment.
    -01174 
    -01175 MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
    -01176 
    -01177 # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension 
    -01178 # names that should be enabled during MathJax rendering.
    -01179 
    -01180 MATHJAX_EXTENSIONS     = 
    -01181 
    -01182 # When the SEARCHENGINE tag is enabled doxygen will generate a search box 
    -01183 # for the HTML output. The underlying search engine uses javascript 
    -01184 # and DHTML and should work on any modern browser. Note that when using 
    -01185 # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
    -01186 # (GENERATE_DOCSET) there is already a search function so this one should 
    -01187 # typically be disabled. For large projects the javascript based search engine 
    -01188 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
    -01189 
    -01190 SEARCHENGINE           = NO
    -01191 
    -01192 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
    -01193 # implemented using a PHP enabled web server instead of at the web client 
    -01194 # using Javascript. Doxygen will generate the search PHP script and index 
    -01195 # file to put on the web server. The advantage of the server 
    -01196 # based approach is that it scales better to large projects and allows 
    -01197 # full text search. The disadvantages are that it is more difficult to setup 
    -01198 # and does not have live searching capabilities.
    -01199 
    -01200 SERVER_BASED_SEARCH    = NO
    -01201 
    -01202 #---------------------------------------------------------------------------
    -01203 # configuration options related to the LaTeX output
    -01204 #---------------------------------------------------------------------------
    -01205 
    -01206 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
    -01207 # generate Latex output.
    -01208 
    -01209 GENERATE_LATEX         = NO
    -01210 
    -01211 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
    -01212 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    -01213 # put in front of it. If left blank `latex' will be used as the default path.
    -01214 
    -01215 LATEX_OUTPUT           = latex
    -01216 
    -01217 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
    -01218 # invoked. If left blank `latex' will be used as the default command name. 
    -01219 # Note that when enabling USE_PDFLATEX this option is only used for 
    -01220 # generating bitmaps for formulas in the HTML output, but not in the 
    -01221 # Makefile that is written to the output directory.
    -01222 
    -01223 LATEX_CMD_NAME         = latex
    -01224 
    -01225 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
    -01226 # generate index for LaTeX. If left blank `makeindex' will be used as the 
    -01227 # default command name.
    -01228 
    -01229 MAKEINDEX_CMD_NAME     = makeindex
    -01230 
    -01231 # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
    -01232 # LaTeX documents. This may be useful for small projects and may help to 
    -01233 # save some trees in general.
    -01234 
    -01235 COMPACT_LATEX          = NO
    -01236 
    -01237 # The PAPER_TYPE tag can be used to set the paper type that is used 
    -01238 # by the printer. Possible values are: a4, letter, legal and 
    -01239 # executive. If left blank a4wide will be used.
    -01240 
    -01241 PAPER_TYPE             = a4wide
    -01242 
    -01243 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
    -01244 # packages that should be included in the LaTeX output.
    -01245 
    -01246 EXTRA_PACKAGES         = 
    -01247 
    -01248 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
    -01249 # the generated latex document. The header should contain everything until 
    -01250 # the first chapter. If it is left blank doxygen will generate a 
    -01251 # standard header. Notice: only use this tag if you know what you are doing!
    -01252 
    -01253 LATEX_HEADER           = 
    -01254 
    -01255 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 
    -01256 # the generated latex document. The footer should contain everything after 
    -01257 # the last chapter. If it is left blank doxygen will generate a 
    -01258 # standard footer. Notice: only use this tag if you know what you are doing!
    -01259 
    -01260 LATEX_FOOTER           = 
    -01261 
    -01262 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
    -01263 # is prepared for conversion to pdf (using ps2pdf). The pdf file will 
    -01264 # contain links (just like the HTML output) instead of page references 
    -01265 # This makes the output suitable for online browsing using a pdf viewer.
    -01266 
    -01267 PDF_HYPERLINKS         = NO
    -01268 
    -01269 # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
    -01270 # plain latex in the generated Makefile. Set this option to YES to get a 
    -01271 # higher quality PDF documentation.
    -01272 
    -01273 USE_PDFLATEX           = YES
    -01274 
    -01275 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
    -01276 # command to the generated LaTeX files. This will instruct LaTeX to keep 
    -01277 # running if errors occur, instead of asking the user for help. 
    -01278 # This option is also used when generating formulas in HTML.
    -01279 
    -01280 LATEX_BATCHMODE        = NO
    -01281 
    -01282 # If LATEX_HIDE_INDICES is set to YES then doxygen will not 
    -01283 # include the index chapters (such as File Index, Compound Index, etc.) 
    -01284 # in the output.
    -01285 
    -01286 LATEX_HIDE_INDICES     = NO
    -01287 
    -01288 # If LATEX_SOURCE_CODE is set to YES then doxygen will include 
    -01289 # source code with syntax highlighting in the LaTeX output. 
    -01290 # Note that which sources are shown also depends on other settings 
    -01291 # such as SOURCE_BROWSER.
    -01292 
    -01293 LATEX_SOURCE_CODE      = NO
    -01294 
    -01295 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
    -01296 # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See 
    -01297 # http://en.wikipedia.org/wiki/BibTeX for more info.
    -01298 
    -01299 LATEX_BIB_STYLE        = plain
    -01300 
    -01301 #---------------------------------------------------------------------------
    -01302 # configuration options related to the RTF output
    -01303 #---------------------------------------------------------------------------
    -01304 
    -01305 # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
    -01306 # The RTF output is optimized for Word 97 and may not look very pretty with 
    -01307 # other RTF readers or editors.
    -01308 
    -01309 GENERATE_RTF           = NO
    -01310 
    -01311 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
    -01312 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    -01313 # put in front of it. If left blank `rtf' will be used as the default path.
    -01314 
    -01315 RTF_OUTPUT             = glm.rtf
    -01316 
    -01317 # If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
    -01318 # RTF documents. This may be useful for small projects and may help to 
    -01319 # save some trees in general.
    -01320 
    -01321 COMPACT_RTF            = NO
    -01322 
    -01323 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
    -01324 # will contain hyperlink fields. The RTF file will 
    -01325 # contain links (just like the HTML output) instead of page references. 
    -01326 # This makes the output suitable for online browsing using WORD or other 
    -01327 # programs which support those fields. 
    -01328 # Note: wordpad (write) and others do not support links.
    -01329 
    -01330 RTF_HYPERLINKS         = YES
    -01331 
    -01332 # Load style sheet definitions from file. Syntax is similar to doxygen's 
    -01333 # config file, i.e. a series of assignments. You only have to provide 
    -01334 # replacements, missing definitions are set to their default value.
    -01335 
    -01336 RTF_STYLESHEET_FILE    = 
    -01337 
    -01338 # Set optional variables used in the generation of an rtf document. 
    -01339 # Syntax is similar to doxygen's config file.
    -01340 
    -01341 RTF_EXTENSIONS_FILE    = 
    -01342 
    -01343 #---------------------------------------------------------------------------
    -01344 # configuration options related to the man page output
    -01345 #---------------------------------------------------------------------------
    -01346 
    -01347 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
    -01348 # generate man pages
    -01349 
    -01350 GENERATE_MAN           = NO
    -01351 
    -01352 # The MAN_OUTPUT tag is used to specify where the man pages will be put. 
    -01353 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    -01354 # put in front of it. If left blank `man' will be used as the default path.
    -01355 
    -01356 MAN_OUTPUT             = man
    -01357 
    -01358 # The MAN_EXTENSION tag determines the extension that is added to 
    -01359 # the generated man pages (default is the subroutine's section .3)
    -01360 
    -01361 MAN_EXTENSION          = .3
    -01362 
    -01363 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
    -01364 # then it will generate one additional man file for each entity 
    -01365 # documented in the real man page(s). These additional files 
    -01366 # only source the real man page, but without them the man command 
    -01367 # would be unable to find the correct page. The default is NO.
    -01368 
    -01369 MAN_LINKS              = NO
    -01370 
    -01371 #---------------------------------------------------------------------------
    -01372 # configuration options related to the XML output
    -01373 #---------------------------------------------------------------------------
    -01374 
    -01375 # If the GENERATE_XML tag is set to YES Doxygen will 
    -01376 # generate an XML file that captures the structure of 
    -01377 # the code including all documentation.
    -01378 
    -01379 GENERATE_XML           = NO
    -01380 
    -01381 # The XML_OUTPUT tag is used to specify where the XML pages will be put. 
    -01382 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    -01383 # put in front of it. If left blank `xml' will be used as the default path.
    -01384 
    -01385 XML_OUTPUT             = xml
    -01386 
    -01387 # The XML_SCHEMA tag can be used to specify an XML schema, 
    -01388 # which can be used by a validating XML parser to check the 
    -01389 # syntax of the XML files.
    -01390 
    -01391 XML_SCHEMA             = 
    -01392 
    -01393 # The XML_DTD tag can be used to specify an XML DTD, 
    -01394 # which can be used by a validating XML parser to check the 
    -01395 # syntax of the XML files.
    -01396 
    -01397 XML_DTD                = 
    -01398 
    -01399 # If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
    -01400 # dump the program listings (including syntax highlighting 
    -01401 # and cross-referencing information) to the XML output. Note that 
    -01402 # enabling this will significantly increase the size of the XML output.
    -01403 
    -01404 XML_PROGRAMLISTING     = YES
    -01405 
    -01406 #---------------------------------------------------------------------------
    -01407 # configuration options for the AutoGen Definitions output
    -01408 #---------------------------------------------------------------------------
    -01409 
    -01410 # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
    -01411 # generate an AutoGen Definitions (see autogen.sf.net) file 
    -01412 # that captures the structure of the code including all 
    -01413 # documentation. Note that this feature is still experimental 
    -01414 # and incomplete at the moment.
    -01415 
    -01416 GENERATE_AUTOGEN_DEF   = NO
    -01417 
    -01418 #---------------------------------------------------------------------------
    -01419 # configuration options related to the Perl module output
    -01420 #---------------------------------------------------------------------------
    -01421 
    -01422 # If the GENERATE_PERLMOD tag is set to YES Doxygen will 
    -01423 # generate a Perl module file that captures the structure of 
    -01424 # the code including all documentation. Note that this 
    -01425 # feature is still experimental and incomplete at the 
    -01426 # moment.
    -01427 
    -01428 GENERATE_PERLMOD       = NO
    -01429 
    -01430 # If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
    -01431 # the necessary Makefile rules, Perl scripts and LaTeX code to be able 
    -01432 # to generate PDF and DVI output from the Perl module output.
    -01433 
    -01434 PERLMOD_LATEX          = NO
    -01435 
    -01436 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
    -01437 # nicely formatted so it can be parsed by a human reader.  This is useful 
    -01438 # if you want to understand what is going on.  On the other hand, if this 
    -01439 # tag is set to NO the size of the Perl module output will be much smaller 
    -01440 # and Perl will parse it just the same.
    -01441 
    -01442 PERLMOD_PRETTY         = YES
    -01443 
    -01444 # The names of the make variables in the generated doxyrules.make file 
    -01445 # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
    -01446 # This is useful so different doxyrules.make files included by the same 
    -01447 # Makefile don't overwrite each other's variables.
    -01448 
    -01449 PERLMOD_MAKEVAR_PREFIX = 
    -01450 
    -01451 #---------------------------------------------------------------------------
    -01452 # Configuration options related to the preprocessor
    -01453 #---------------------------------------------------------------------------
    -01454 
    -01455 # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
    -01456 # evaluate all C-preprocessor directives found in the sources and include 
    -01457 # files.
    -01458 
    -01459 ENABLE_PREPROCESSING   = YES
    -01460 
    -01461 # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
    -01462 # names in the source code. If set to NO (the default) only conditional 
    -01463 # compilation will be performed. Macro expansion can be done in a controlled 
    -01464 # way by setting EXPAND_ONLY_PREDEF to YES.
    -01465 
    -01466 MACRO_EXPANSION        = NO
    -01467 
    -01468 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
    -01469 # then the macro expansion is limited to the macros specified with the 
    -01470 # PREDEFINED and EXPAND_AS_DEFINED tags.
    -01471 
    -01472 EXPAND_ONLY_PREDEF     = NO
    -01473 
    -01474 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
    -01475 # pointed to by INCLUDE_PATH will be searched when a #include is found.
    -01476 
    -01477 SEARCH_INCLUDES        = YES
    -01478 
    -01479 # The INCLUDE_PATH tag can be used to specify one or more directories that 
    -01480 # contain include files that are not input files but should be processed by 
    -01481 # the preprocessor.
    -01482 
    -01483 INCLUDE_PATH           = 
    -01484 
    -01485 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
    -01486 # patterns (like *.h and *.hpp) to filter out the header-files in the 
    -01487 # directories. If left blank, the patterns specified with FILE_PATTERNS will 
    -01488 # be used.
    -01489 
    -01490 INCLUDE_FILE_PATTERNS  = 
    -01491 
    -01492 # The PREDEFINED tag can be used to specify one or more macro names that 
    -01493 # are defined before the preprocessor is started (similar to the -D option of 
    -01494 # gcc). The argument of the tag is a list of macros of the form: name 
    -01495 # or name=definition (no spaces). If the definition and the = are 
    -01496 # omitted =1 is assumed. To prevent a macro definition from being 
    -01497 # undefined via #undef or recursively expanded use the := operator 
    -01498 # instead of the = operator.
    -01499 
    -01500 PREDEFINED             = 
    -01501 
    -01502 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
    -01503 # this tag can be used to specify a list of macro names that should be expanded. 
    -01504 # The macro definition that is found in the sources will be used. 
    -01505 # Use the PREDEFINED tag if you want to use a different macro definition that 
    -01506 # overrules the definition found in the source code.
    -01507 
    -01508 EXPAND_AS_DEFINED      = 
    -01509 
    -01510 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
    -01511 # doxygen's preprocessor will remove all references to function-like macros 
    -01512 # that are alone on a line, have an all uppercase name, and do not end with a 
    -01513 # semicolon, because these will confuse the parser if not removed.
    -01514 
    -01515 SKIP_FUNCTION_MACROS   = YES
    -01516 
    -01517 #---------------------------------------------------------------------------
    -01518 # Configuration::additions related to external references
    -01519 #---------------------------------------------------------------------------
    -01520 
    -01521 # The TAGFILES option can be used to specify one or more tagfiles. 
    -01522 # Optionally an initial location of the external documentation 
    -01523 # can be added for each tagfile. The format of a tag file without 
    -01524 # this location is as follows: 
    -01525 #   TAGFILES = file1 file2 ... 
    -01526 # Adding location for the tag files is done as follows: 
    -01527 #   TAGFILES = file1=loc1 "file2 = loc2" ... 
    -01528 # where "loc1" and "loc2" can be relative or absolute paths or 
    -01529 # URLs. If a location is present for each tag, the installdox tool 
    -01530 # does not have to be run to correct the links. 
    -01531 # Note that each tag file must have a unique name 
    -01532 # (where the name does NOT include the path) 
    -01533 # If a tag file is not located in the directory in which doxygen 
    -01534 # is run, you must also specify the path to the tagfile here.
    -01535 
    -01536 TAGFILES               = 
    -01537 
    -01538 # When a file name is specified after GENERATE_TAGFILE, doxygen will create 
    -01539 # a tag file that is based on the input files it reads.
    -01540 
    -01541 GENERATE_TAGFILE       = 
    -01542 
    -01543 # If the ALLEXTERNALS tag is set to YES all external classes will be listed 
    -01544 # in the class index. If set to NO only the inherited external classes 
    -01545 # will be listed.
    -01546 
    -01547 ALLEXTERNALS           = NO
    -01548 
    -01549 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
    -01550 # in the modules index. If set to NO, only the current project's groups will 
    -01551 # be listed.
    -01552 
    -01553 EXTERNAL_GROUPS        = YES
    -01554 
    -01555 # The PERL_PATH should be the absolute path and name of the perl script 
    -01556 # interpreter (i.e. the result of `which perl').
    -01557 
    -01558 PERL_PATH              = /usr/bin/perl
    -01559 
    -01560 #---------------------------------------------------------------------------
    -01561 # Configuration options related to the dot tool
    -01562 #---------------------------------------------------------------------------
    -01563 
    -01564 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
    -01565 # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
    -01566 # or super classes. Setting the tag to NO turns the diagrams off. Note that 
    -01567 # this option also works with HAVE_DOT disabled, but it is recommended to 
    -01568 # install and use dot, since it yields more powerful graphs.
    -01569 
    -01570 CLASS_DIAGRAMS         = YES
    -01571 
    -01572 # You can define message sequence charts within doxygen comments using the \msc 
    -01573 # command. Doxygen will then run the mscgen tool (see 
    -01574 # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
    -01575 # documentation. The MSCGEN_PATH tag allows you to specify the directory where 
    -01576 # the mscgen tool resides. If left empty the tool is assumed to be found in the 
    -01577 # default search path.
    -01578 
    -01579 MSCGEN_PATH            = 
    -01580 
    -01581 # If set to YES, the inheritance and collaboration graphs will hide 
    -01582 # inheritance and usage relations if the target is undocumented 
    -01583 # or is not a class.
    -01584 
    -01585 HIDE_UNDOC_RELATIONS   = YES
    -01586 
    -01587 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
    -01588 # available from the path. This tool is part of Graphviz, a graph visualization 
    -01589 # toolkit from AT&T and Lucent Bell Labs. The other options in this section 
    -01590 # have no effect if this option is set to NO (the default)
    -01591 
    -01592 HAVE_DOT               = NO
    -01593 
    -01594 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
    -01595 # allowed to run in parallel. When set to 0 (the default) doxygen will 
    -01596 # base this on the number of processors available in the system. You can set it 
    -01597 # explicitly to a value larger than 0 to get control over the balance 
    -01598 # between CPU load and processing speed.
    -01599 
    -01600 DOT_NUM_THREADS        = 0
    -01601 
    -01602 # By default doxygen will use the Helvetica font for all dot files that 
    -01603 # doxygen generates. When you want a differently looking font you can specify 
    -01604 # the font name using DOT_FONTNAME. You need to make sure dot is able to find 
    -01605 # the font, which can be done by putting it in a standard location or by setting 
    -01606 # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the 
    -01607 # directory containing the font.
    -01608 
    -01609 DOT_FONTNAME           = FreeSans
    -01610 
    -01611 # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
    -01612 # The default size is 10pt.
    -01613 
    -01614 DOT_FONTSIZE           = 10
    -01615 
    -01616 # By default doxygen will tell dot to use the Helvetica font. 
    -01617 # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to 
    -01618 # set the path where dot can find it.
    -01619 
    -01620 DOT_FONTPATH           = 
    -01621 
    -01622 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
    -01623 # will generate a graph for each documented class showing the direct and 
    -01624 # indirect inheritance relations. Setting this tag to YES will force the 
    -01625 # CLASS_DIAGRAMS tag to NO.
    -01626 
    -01627 CLASS_GRAPH            = YES
    -01628 
    -01629 # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
    -01630 # will generate a graph for each documented class showing the direct and 
    -01631 # indirect implementation dependencies (inheritance, containment, and 
    -01632 # class references variables) of the class with other documented classes.
    -01633 
    -01634 COLLABORATION_GRAPH    = YES
    -01635 
    -01636 # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
    -01637 # will generate a graph for groups, showing the direct groups dependencies
    -01638 
    -01639 GROUP_GRAPHS           = YES
    -01640 
    -01641 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
    -01642 # collaboration diagrams in a style similar to the OMG's Unified Modeling 
    -01643 # Language.
    -01644 
    -01645 UML_LOOK               = NO
    -01646 
    -01647 # If set to YES, the inheritance and collaboration graphs will show the 
    -01648 # relations between templates and their instances.
    -01649 
    -01650 TEMPLATE_RELATIONS     = NO
    -01651 
    -01652 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
    -01653 # tags are set to YES then doxygen will generate a graph for each documented 
    -01654 # file showing the direct and indirect include dependencies of the file with 
    -01655 # other documented files.
    -01656 
    -01657 INCLUDE_GRAPH          = YES
    -01658 
    -01659 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
    -01660 # HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
    -01661 # documented header file showing the documented files that directly or 
    -01662 # indirectly include this file.
    -01663 
    -01664 INCLUDED_BY_GRAPH      = YES
    -01665 
    -01666 # If the CALL_GRAPH and HAVE_DOT options are set to YES then 
    -01667 # doxygen will generate a call dependency graph for every global function 
    -01668 # or class method. Note that enabling this option will significantly increase 
    -01669 # the time of a run. So in most cases it will be better to enable call graphs 
    -01670 # for selected functions only using the \callgraph command.
    -01671 
    -01672 CALL_GRAPH             = YES
    -01673 
    -01674 # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
    -01675 # doxygen will generate a caller dependency graph for every global function 
    -01676 # or class method. Note that enabling this option will significantly increase 
    -01677 # the time of a run. So in most cases it will be better to enable caller 
    -01678 # graphs for selected functions only using the \callergraph command.
    -01679 
    -01680 CALLER_GRAPH           = YES
    -01681 
    -01682 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
    -01683 # will generate a graphical hierarchy of all classes instead of a textual one.
    -01684 
    -01685 GRAPHICAL_HIERARCHY    = YES
    -01686 
    -01687 # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
    -01688 # then doxygen will show the dependencies a directory has on other directories 
    -01689 # in a graphical way. The dependency relations are determined by the #include 
    -01690 # relations between the files in the directories.
    -01691 
    -01692 DIRECTORY_GRAPH        = YES
    -01693 
    -01694 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
    -01695 # generated by dot. Possible values are svg, png, jpg, or gif. 
    -01696 # If left blank png will be used. If you choose svg you need to set 
    -01697 # HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
    -01698 # visible in IE 9+ (other browsers do not have this requirement).
    -01699 
    -01700 DOT_IMAGE_FORMAT       = png
    -01701 
    -01702 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
    -01703 # enable generation of interactive SVG images that allow zooming and panning. 
    -01704 # Note that this requires a modern browser other than Internet Explorer. 
    -01705 # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you 
    -01706 # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
    -01707 # visible. Older versions of IE do not have SVG support.
    -01708 
    -01709 INTERACTIVE_SVG        = NO
    -01710 
    -01711 # The tag DOT_PATH can be used to specify the path where the dot tool can be 
    -01712 # found. If left blank, it is assumed the dot tool can be found in the path.
    -01713 
    -01714 DOT_PATH               = 
    -01715 
    -01716 # The DOTFILE_DIRS tag can be used to specify one or more directories that 
    -01717 # contain dot files that are included in the documentation (see the 
    -01718 # \dotfile command).
    -01719 
    -01720 DOTFILE_DIRS           = 
    -01721 
    -01722 # The MSCFILE_DIRS tag can be used to specify one or more directories that 
    -01723 # contain msc files that are included in the documentation (see the 
    -01724 # \mscfile command).
    -01725 
    -01726 MSCFILE_DIRS           = 
    -01727 
    -01728 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
    -01729 # nodes that will be shown in the graph. If the number of nodes in a graph 
    -01730 # becomes larger than this value, doxygen will truncate the graph, which is 
    -01731 # visualized by representing a node as a red box. Note that doxygen if the 
    -01732 # number of direct children of the root node in a graph is already larger than 
    -01733 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
    -01734 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
    -01735 
    -01736 DOT_GRAPH_MAX_NODES    = 50
    -01737 
    -01738 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
    -01739 # graphs generated by dot. A depth value of 3 means that only nodes reachable 
    -01740 # from the root by following a path via at most 3 edges will be shown. Nodes 
    -01741 # that lay further from the root node will be omitted. Note that setting this 
    -01742 # option to 1 or 2 may greatly reduce the computation time needed for large 
    -01743 # code bases. Also note that the size of a graph can be further restricted by 
    -01744 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
    -01745 
    -01746 MAX_DOT_GRAPH_DEPTH    = 1000
    -01747 
    -01748 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
    -01749 # background. This is disabled by default, because dot on Windows does not 
    -01750 # seem to support this out of the box. Warning: Depending on the platform used, 
    -01751 # enabling this option may lead to badly anti-aliased labels on the edges of 
    -01752 # a graph (i.e. they become hard to read).
    -01753 
    -01754 DOT_TRANSPARENT        = NO
    -01755 
    -01756 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
    -01757 # files in one run (i.e. multiple -o and -T options on the command line). This 
    -01758 # makes dot run faster, but since only newer versions of dot (>1.8.10) 
    -01759 # support this, this feature is disabled by default.
    -01760 
    -01761 DOT_MULTI_TARGETS      = NO
    -01762 
    -01763 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
    -01764 # generate a legend page explaining the meaning of the various boxes and 
    -01765 # arrows in the dot generated graphs.
    -01766 
    -01767 GENERATE_LEGEND        = YES
    -01768 
    -01769 # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
    -01770 # remove the intermediate dot files that are used to generate 
    -01771 # the various graphs.
    -01772 
    -01773 DOT_CLEANUP            = YES
    -
    - - - +
    1 # Doxyfile 1.8.2
    +
    2 
    +
    3 # This file describes the settings to be used by the documentation system
    +
    4 # doxygen (www.doxygen.org) for a project
    +
    5 #
    +
    6 # All text after a hash (#) is considered a comment and will be ignored
    +
    7 # The format is:
    +
    8 # TAG = value [value, ...]
    +
    9 # For lists items can also be appended using:
    +
    10 # TAG += value [value, ...]
    +
    11 # Values that contain spaces should be placed between quotes (" ")
    +
    12 
    +
    13 #---------------------------------------------------------------------------
    +
    14 # Project related configuration options
    +
    15 #---------------------------------------------------------------------------
    +
    16 
    +
    17 # This tag specifies the encoding used for all characters in the config file
    +
    18 # that follow. The default is UTF-8 which is also the encoding used for all
    +
    19 # text before the first occurrence of this tag. Doxygen uses libiconv (or the
    +
    20 # iconv built into libc) for the transcoding. See
    +
    21 # http://www.gnu.org/software/libiconv for the list of possible encodings.
    +
    22 
    +
    23 DOXYFILE_ENCODING = UTF-8
    +
    24 
    +
    25 # The PROJECT_NAME tag is a single word (or sequence of words) that should
    +
    26 # identify the project. Note that if you do not use Doxywizard you need
    +
    27 # to put quotes around the project name if it contains spaces.
    +
    28 
    +
    29 PROJECT_NAME =
    +
    30 
    +
    31 # The PROJECT_NUMBER tag can be used to enter a project or revision number.
    +
    32 # This could be handy for archiving the generated documentation or
    +
    33 # if some version control system is used.
    +
    34 
    +
    35 PROJECT_NUMBER = 0.9.4
    +
    36 
    +
    37 # Using the PROJECT_BRIEF tag one can provide an optional one line description
    +
    38 # for a project that appears at the top of each page and should give viewer
    +
    39 # a quick idea about the purpose of the project. Keep the description short.
    +
    40 
    +
    41 PROJECT_BRIEF =
    +
    42 
    +
    43 # With the PROJECT_LOGO tag one can specify an logo or icon that is
    +
    44 # included in the documentation. The maximum height of the logo should not
    +
    45 # exceed 55 pixels and the maximum width should not exceed 200 pixels.
    +
    46 # Doxygen will copy the logo to the output directory.
    +
    47 
    +
    48 PROJECT_LOGO = G:/Repository/glm/doc/logo.png
    +
    49 
    +
    50 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
    +
    51 # base path where the generated documentation will be put.
    +
    52 # If a relative path is entered, it will be relative to the location
    +
    53 # where doxygen was started. If left blank the current directory will be used.
    +
    54 
    +
    55 OUTPUT_DIRECTORY = .
    +
    56 
    +
    57 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
    +
    58 # 4096 sub-directories (in 2 levels) under the output directory of each output
    +
    59 # format and will distribute the generated files over these directories.
    +
    60 # Enabling this option can be useful when feeding doxygen a huge amount of
    +
    61 # source files, where putting all generated files in the same directory would
    +
    62 # otherwise cause performance problems for the file system.
    +
    63 
    +
    64 CREATE_SUBDIRS = NO
    +
    65 
    +
    66 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
    +
    67 # documentation generated by doxygen is written. Doxygen will use this
    +
    68 # information to generate all constant output in the proper language.
    +
    69 # The default language is English, other supported languages are:
    +
    70 # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
    +
    71 # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
    +
    72 # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
    +
    73 # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
    +
    74 # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
    +
    75 # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
    +
    76 
    +
    77 OUTPUT_LANGUAGE = English
    +
    78 
    +
    79 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
    +
    80 # include brief member descriptions after the members that are listed in
    +
    81 # the file and class documentation (similar to JavaDoc).
    +
    82 # Set to NO to disable this.
    +
    83 
    +
    84 BRIEF_MEMBER_DESC = NO
    +
    85 
    +
    86 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
    +
    87 # the brief description of a member or function before the detailed description.
    +
    88 # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
    +
    89 # brief descriptions will be completely suppressed.
    +
    90 
    +
    91 REPEAT_BRIEF = YES
    +
    92 
    +
    93 # This tag implements a quasi-intelligent brief description abbreviator
    +
    94 # that is used to form the text in various listings. Each string
    +
    95 # in this list, if found as the leading text of the brief description, will be
    +
    96 # stripped from the text and the result after processing the whole list, is
    +
    97 # used as the annotated text. Otherwise, the brief description is used as-is.
    +
    98 # If left blank, the following values are used ("$name" is automatically
    +
    99 # replaced with the name of the entity): "The $name class" "The $name widget"
    +
    100 # "The $name file" "is" "provides" "specifies" "contains"
    +
    101 # "represents" "a" "an" "the"
    +
    102 
    +
    103 ABBREVIATE_BRIEF = "The $name class " \
    +
    104  "The $name widget " \
    +
    105  "The $name file " \
    +
    106  is \
    +
    107  provides \
    +
    108  specifies \
    +
    109  contains \
    +
    110  represents \
    +
    111  a \
    +
    112  an \
    +
    113  the
    +
    114 
    +
    115 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
    +
    116 # Doxygen will generate a detailed section even if there is only a brief
    +
    117 # description.
    +
    118 
    +
    119 ALWAYS_DETAILED_SEC = NO
    +
    120 
    +
    121 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
    +
    122 # inherited members of a class in the documentation of that class as if those
    +
    123 # members were ordinary class members. Constructors, destructors and assignment
    +
    124 # operators of the base classes will not be shown.
    +
    125 
    +
    126 INLINE_INHERITED_MEMB = NO
    +
    127 
    +
    128 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
    +
    129 # path before files name in the file list and in the header files. If set
    +
    130 # to NO the shortest path that makes the file name unique will be used.
    +
    131 
    +
    132 FULL_PATH_NAMES = NO
    +
    133 
    +
    134 # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
    +
    135 # can be used to strip a user-defined part of the path. Stripping is
    +
    136 # only done if one of the specified strings matches the left-hand part of
    +
    137 # the path. The tag can be used to show relative paths in the file list.
    +
    138 # If left blank the directory from which doxygen is run is used as the
    +
    139 # path to strip. Note that you specify absolute paths here, but also
    +
    140 # relative paths, which will be relative from the directory where doxygen is
    +
    141 # started.
    +
    142 
    +
    143 STRIP_FROM_PATH = "C:/Documents and Settings/Groove/ "
    +
    144 
    +
    145 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
    +
    146 # the path mentioned in the documentation of a class, which tells
    +
    147 # the reader which header file to include in order to use a class.
    +
    148 # If left blank only the name of the header file containing the class
    +
    149 # definition is used. Otherwise one should specify the include paths that
    +
    150 # are normally passed to the compiler using the -I flag.
    +
    151 
    +
    152 STRIP_FROM_INC_PATH =
    +
    153 
    +
    154 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
    +
    155 # (but less readable) file names. This can be useful if your file system
    +
    156 # doesn't support long names like on DOS, Mac, or CD-ROM.
    +
    157 
    +
    158 SHORT_NAMES = YES
    +
    159 
    +
    160 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
    +
    161 # will interpret the first line (until the first dot) of a JavaDoc-style
    +
    162 # comment as the brief description. If set to NO, the JavaDoc
    +
    163 # comments will behave just like regular Qt-style comments
    +
    164 # (thus requiring an explicit @brief command for a brief description.)
    +
    165 
    +
    166 JAVADOC_AUTOBRIEF = YES
    +
    167 
    +
    168 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
    +
    169 # interpret the first line (until the first dot) of a Qt-style
    +
    170 # comment as the brief description. If set to NO, the comments
    +
    171 # will behave just like regular Qt-style comments (thus requiring
    +
    172 # an explicit \brief command for a brief description.)
    +
    173 
    +
    174 QT_AUTOBRIEF = NO
    +
    175 
    +
    176 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
    +
    177 # treat a multi-line C++ special comment block (i.e. a block of
    +
    178 # comments) as a brief description. This used to be the default behaviour.
    +
    179 # The new default is to treat a multi-line C++ comment block as a detailed
    +
    180 # description. Set this tag to YES if you prefer the old behaviour instead.
    +
    181 
    +
    182 MULTILINE_CPP_IS_BRIEF = NO
    +
    183 
    +
    184 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
    +
    185 # member inherits the documentation from any documented member that it
    +
    186 # re-implements.
    +
    187 
    +
    188 INHERIT_DOCS = YES
    +
    189 
    +
    190 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
    +
    191 # a new page for each member. If set to NO, the documentation of a member will
    +
    192 # be part of the file/class/namespace that contains it.
    +
    193 
    +
    194 SEPARATE_MEMBER_PAGES = NO
    +
    195 
    +
    196 # The TAB_SIZE tag can be used to set the number of spaces in a tab.
    +
    197 # Doxygen uses this value to replace tabs by spaces in code fragments.
    +
    198 
    +
    199 TAB_SIZE = 8
    +
    200 
    +
    201 # This tag can be used to specify a number of aliases that acts
    +
    202 # as commands in the documentation. An alias has the form "name=value".
    +
    203 # For example adding "sideeffect=\par Side Effects:\n" will allow you to
    +
    204 # put the command \sideeffect (or @sideeffect) in the documentation, which
    +
    205 # will result in a user-defined paragraph with heading "Side Effects:".
    +
    206 # You can put \n's in the value part of an alias to insert newlines.
    +
    207 
    +
    208 ALIASES =
    +
    209 
    +
    210 # This tag can be used to specify a number of word-keyword mappings (TCL only).
    +
    211 # A mapping has the form "name=value". For example adding
    +
    212 # "class=itcl::class" will allow you to use the command class in the
    +
    213 # itcl::class meaning.
    +
    214 
    +
    215 TCL_SUBST =
    +
    216 
    +
    217 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
    +
    218 # sources only. Doxygen will then generate output that is more tailored for C.
    +
    219 # For instance, some of the names that are used will be different. The list
    +
    220 # of all members will be omitted, etc.
    +
    221 
    +
    222 OPTIMIZE_OUTPUT_FOR_C = NO
    +
    223 
    +
    224 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
    +
    225 # sources only. Doxygen will then generate output that is more tailored for
    +
    226 # Java. For instance, namespaces will be presented as packages, qualified
    +
    227 # scopes will look different, etc.
    +
    228 
    +
    229 OPTIMIZE_OUTPUT_JAVA = NO
    +
    230 
    +
    231 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
    +
    232 # sources only. Doxygen will then generate output that is more tailored for
    +
    233 # Fortran.
    +
    234 
    +
    235 OPTIMIZE_FOR_FORTRAN = NO
    +
    236 
    +
    237 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
    +
    238 # sources. Doxygen will then generate output that is tailored for
    +
    239 # VHDL.
    +
    240 
    +
    241 OPTIMIZE_OUTPUT_VHDL = NO
    +
    242 
    +
    243 # Doxygen selects the parser to use depending on the extension of the files it
    +
    244 # parses. With this tag you can assign which parser to use for a given
    +
    245 # extension. Doxygen has a built-in mapping, but you can override or extend it
    +
    246 # using this tag. The format is ext=language, where ext is a file extension,
    +
    247 # and language is one of the parsers supported by doxygen: IDL, Java,
    +
    248 # Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
    +
    249 # C++. For instance to make doxygen treat .inc files as Fortran files (default
    +
    250 # is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
    +
    251 # that for custom extensions you also need to set FILE_PATTERNS otherwise the
    +
    252 # files are not read by doxygen.
    +
    253 
    +
    254 EXTENSION_MAPPING =
    +
    255 
    +
    256 # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
    +
    257 # comments according to the Markdown format, which allows for more readable
    +
    258 # documentation. See http://daringfireball.net/projects/markdown/ for details.
    +
    259 # The output of markdown processing is further processed by doxygen, so you
    +
    260 # can mix doxygen, HTML, and XML commands with Markdown formatting.
    +
    261 # Disable only in case of backward compatibilities issues.
    +
    262 
    +
    263 MARKDOWN_SUPPORT = YES
    +
    264 
    +
    265 # When enabled doxygen tries to link words that correspond to documented classes,
    +
    266 # or namespaces to their corresponding documentation. Such a link can be
    +
    267 # prevented in individual cases by by putting a % sign in front of the word or
    +
    268 # globally by setting AUTOLINK_SUPPORT to NO.
    +
    269 
    +
    270 AUTOLINK_SUPPORT = YES
    +
    271 
    +
    272 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
    +
    273 # to include (a tag file for) the STL sources as input, then you should
    +
    274 # set this tag to YES in order to let doxygen match functions declarations and
    +
    275 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
    +
    276 # func(std::string) {}). This also makes the inheritance and collaboration
    +
    277 # diagrams that involve STL classes more complete and accurate.
    +
    278 
    +
    279 BUILTIN_STL_SUPPORT = NO
    +
    280 
    +
    281 # If you use Microsoft's C++/CLI language, you should set this option to YES to
    +
    282 # enable parsing support.
    +
    283 
    +
    284 CPP_CLI_SUPPORT = NO
    +
    285 
    +
    286 # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
    +
    287 # Doxygen will parse them like normal C++ but will assume all classes use public
    +
    288 # instead of private inheritance when no explicit protection keyword is present.
    +
    289 
    +
    290 SIP_SUPPORT = NO
    +
    291 
    +
    292 # For Microsoft's IDL there are propget and propput attributes to indicate
    +
    293 # getter and setter methods for a property. Setting this option to YES (the
    +
    294 # default) will make doxygen replace the get and set methods by a property in
    +
    295 # the documentation. This will only work if the methods are indeed getting or
    +
    296 # setting a simple type. If this is not the case, or you want to show the
    +
    297 # methods anyway, you should set this option to NO.
    +
    298 
    +
    299 IDL_PROPERTY_SUPPORT = YES
    +
    300 
    +
    301 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
    +
    302 # tag is set to YES, then doxygen will reuse the documentation of the first
    +
    303 # member in the group (if any) for the other members of the group. By default
    +
    304 # all members of a group must be documented explicitly.
    +
    305 
    +
    306 DISTRIBUTE_GROUP_DOC = NO
    +
    307 
    +
    308 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of
    +
    309 # the same type (for instance a group of public functions) to be put as a
    +
    310 # subgroup of that type (e.g. under the Public Functions section). Set it to
    +
    311 # NO to prevent subgrouping. Alternatively, this can be done per class using
    +
    312 # the \nosubgrouping command.
    +
    313 
    +
    314 SUBGROUPING = NO
    +
    315 
    +
    316 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
    +
    317 # unions are shown inside the group in which they are included (e.g. using
    +
    318 # @ingroup) instead of on a separate page (for HTML and Man pages) or
    +
    319 # section (for LaTeX and RTF).
    +
    320 
    +
    321 INLINE_GROUPED_CLASSES = NO
    +
    322 
    +
    323 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
    +
    324 # unions with only public data fields will be shown inline in the documentation
    +
    325 # of the scope in which they are defined (i.e. file, namespace, or group
    +
    326 # documentation), provided this scope is documented. If set to NO (the default),
    +
    327 # structs, classes, and unions are shown on a separate page (for HTML and Man
    +
    328 # pages) or section (for LaTeX and RTF).
    +
    329 
    +
    330 INLINE_SIMPLE_STRUCTS = NO
    +
    331 
    +
    332 # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
    +
    333 # is documented as struct, union, or enum with the name of the typedef. So
    +
    334 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
    +
    335 # with name TypeT. When disabled the typedef will appear as a member of a file,
    +
    336 # namespace, or class. And the struct will be named TypeS. This can typically
    +
    337 # be useful for C code in case the coding convention dictates that all compound
    +
    338 # types are typedef'ed and only the typedef is referenced, never the tag name.
    +
    339 
    +
    340 TYPEDEF_HIDES_STRUCT = NO
    +
    341 
    +
    342 # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
    +
    343 # determine which symbols to keep in memory and which to flush to disk.
    +
    344 # When the cache is full, less often used symbols will be written to disk.
    +
    345 # For small to medium size projects (<1000 input files) the default value is
    +
    346 # probably good enough. For larger projects a too small cache size can cause
    +
    347 # doxygen to be busy swapping symbols to and from disk most of the time
    +
    348 # causing a significant performance penalty.
    +
    349 # If the system has enough physical memory increasing the cache will improve the
    +
    350 # performance by keeping more symbols in memory. Note that the value works on
    +
    351 # a logarithmic scale so increasing the size by one will roughly double the
    +
    352 # memory usage. The cache size is given by this formula:
    +
    353 # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
    +
    354 # corresponding to a cache size of 2^16 = 65536 symbols.
    +
    355 
    +
    356 SYMBOL_CACHE_SIZE = 0
    +
    357 
    +
    358 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
    +
    359 # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
    +
    360 # their name and scope. Since this can be an expensive process and often the
    +
    361 # same symbol appear multiple times in the code, doxygen keeps a cache of
    +
    362 # pre-resolved symbols. If the cache is too small doxygen will become slower.
    +
    363 # If the cache is too large, memory is wasted. The cache size is given by this
    +
    364 # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
    +
    365 # corresponding to a cache size of 2^16 = 65536 symbols.
    +
    366 
    +
    367 LOOKUP_CACHE_SIZE = 0
    +
    368 
    +
    369 #---------------------------------------------------------------------------
    +
    370 # Build related configuration options
    +
    371 #---------------------------------------------------------------------------
    +
    372 
    +
    373 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
    +
    374 # documentation are documented, even if no documentation was available.
    +
    375 # Private class members and static file members will be hidden unless
    +
    376 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
    +
    377 
    +
    378 EXTRACT_ALL = NO
    +
    379 
    +
    380 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class
    +
    381 # will be included in the documentation.
    +
    382 
    +
    383 EXTRACT_PRIVATE = NO
    +
    384 
    +
    385 # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
    +
    386 # scope will be included in the documentation.
    +
    387 
    +
    388 EXTRACT_PACKAGE = NO
    +
    389 
    +
    390 # If the EXTRACT_STATIC tag is set to YES all static members of a file
    +
    391 # will be included in the documentation.
    +
    392 
    +
    393 EXTRACT_STATIC = YES
    +
    394 
    +
    395 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
    +
    396 # defined locally in source files will be included in the documentation.
    +
    397 # If set to NO only classes defined in header files are included.
    +
    398 
    +
    399 EXTRACT_LOCAL_CLASSES = NO
    +
    400 
    +
    401 # This flag is only useful for Objective-C code. When set to YES local
    +
    402 # methods, which are defined in the implementation section but not in
    +
    403 # the interface are included in the documentation.
    +
    404 # If set to NO (the default) only methods in the interface are included.
    +
    405 
    +
    406 EXTRACT_LOCAL_METHODS = NO
    +
    407 
    +
    408 # If this flag is set to YES, the members of anonymous namespaces will be
    +
    409 # extracted and appear in the documentation as a namespace called
    +
    410 # 'anonymous_namespace{file}', where file will be replaced with the base
    +
    411 # name of the file that contains the anonymous namespace. By default
    +
    412 # anonymous namespaces are hidden.
    +
    413 
    +
    414 EXTRACT_ANON_NSPACES = NO
    +
    415 
    +
    416 # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
    +
    417 # undocumented members of documented classes, files or namespaces.
    +
    418 # If set to NO (the default) these members will be included in the
    +
    419 # various overviews, but no documentation section is generated.
    +
    420 # This option has no effect if EXTRACT_ALL is enabled.
    +
    421 
    +
    422 HIDE_UNDOC_MEMBERS = YES
    +
    423 
    +
    424 # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
    +
    425 # undocumented classes that are normally visible in the class hierarchy.
    +
    426 # If set to NO (the default) these classes will be included in the various
    +
    427 # overviews. This option has no effect if EXTRACT_ALL is enabled.
    +
    428 
    +
    429 HIDE_UNDOC_CLASSES = YES
    +
    430 
    +
    431 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
    +
    432 # friend (class|struct|union) declarations.
    +
    433 # If set to NO (the default) these declarations will be included in the
    +
    434 # documentation.
    +
    435 
    +
    436 HIDE_FRIEND_COMPOUNDS = YES
    +
    437 
    +
    438 # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
    +
    439 # documentation blocks found inside the body of a function.
    +
    440 # If set to NO (the default) these blocks will be appended to the
    +
    441 # function's detailed documentation block.
    +
    442 
    +
    443 HIDE_IN_BODY_DOCS = YES
    +
    444 
    +
    445 # The INTERNAL_DOCS tag determines if documentation
    +
    446 # that is typed after a \internal command is included. If the tag is set
    +
    447 # to NO (the default) then the documentation will be excluded.
    +
    448 # Set it to YES to include the internal documentation.
    +
    449 
    +
    450 INTERNAL_DOCS = NO
    +
    451 
    +
    452 # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
    +
    453 # file names in lower-case letters. If set to YES upper-case letters are also
    +
    454 # allowed. This is useful if you have classes or files whose names only differ
    +
    455 # in case and if your file system supports case sensitive file names. Windows
    +
    456 # and Mac users are advised to set this option to NO.
    +
    457 
    +
    458 CASE_SENSE_NAMES = YES
    +
    459 
    +
    460 # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
    +
    461 # will show members with their full class and namespace scopes in the
    +
    462 # documentation. If set to YES the scope will be hidden.
    +
    463 
    +
    464 HIDE_SCOPE_NAMES = YES
    +
    465 
    +
    466 # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
    +
    467 # will put a list of the files that are included by a file in the documentation
    +
    468 # of that file.
    +
    469 
    +
    470 SHOW_INCLUDE_FILES = NO
    +
    471 
    +
    472 # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
    +
    473 # will list include files with double quotes in the documentation
    +
    474 # rather than with sharp brackets.
    +
    475 
    +
    476 FORCE_LOCAL_INCLUDES = NO
    +
    477 
    +
    478 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
    +
    479 # is inserted in the documentation for inline members.
    +
    480 
    +
    481 INLINE_INFO = NO
    +
    482 
    +
    483 # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
    +
    484 # will sort the (detailed) documentation of file and class members
    +
    485 # alphabetically by member name. If set to NO the members will appear in
    +
    486 # declaration order.
    +
    487 
    +
    488 SORT_MEMBER_DOCS = YES
    +
    489 
    +
    490 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
    +
    491 # brief documentation of file, namespace and class members alphabetically
    +
    492 # by member name. If set to NO (the default) the members will appear in
    +
    493 # declaration order.
    +
    494 
    +
    495 SORT_BRIEF_DOCS = YES
    +
    496 
    +
    497 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
    +
    498 # will sort the (brief and detailed) documentation of class members so that
    +
    499 # constructors and destructors are listed first. If set to NO (the default)
    +
    500 # the constructors will appear in the respective orders defined by
    +
    501 # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
    +
    502 # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
    +
    503 # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
    +
    504 
    +
    505 SORT_MEMBERS_CTORS_1ST = NO
    +
    506 
    +
    507 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
    +
    508 # hierarchy of group names into alphabetical order. If set to NO (the default)
    +
    509 # the group names will appear in their defined order.
    +
    510 
    +
    511 SORT_GROUP_NAMES = NO
    +
    512 
    +
    513 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
    +
    514 # sorted by fully-qualified names, including namespaces. If set to
    +
    515 # NO (the default), the class list will be sorted only by class name,
    +
    516 # not including the namespace part.
    +
    517 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
    +
    518 # Note: This option applies only to the class list, not to the
    +
    519 # alphabetical list.
    +
    520 
    +
    521 SORT_BY_SCOPE_NAME = YES
    +
    522 
    +
    523 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
    +
    524 # do proper type resolution of all parameters of a function it will reject a
    +
    525 # match between the prototype and the implementation of a member function even
    +
    526 # if there is only one candidate or it is obvious which candidate to choose
    +
    527 # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
    +
    528 # will still accept a match between prototype and implementation in such cases.
    +
    529 
    +
    530 STRICT_PROTO_MATCHING = NO
    +
    531 
    +
    532 # The GENERATE_TODOLIST tag can be used to enable (YES) or
    +
    533 # disable (NO) the todo list. This list is created by putting \todo
    +
    534 # commands in the documentation.
    +
    535 
    +
    536 GENERATE_TODOLIST = YES
    +
    537 
    +
    538 # The GENERATE_TESTLIST tag can be used to enable (YES) or
    +
    539 # disable (NO) the test list. This list is created by putting \test
    +
    540 # commands in the documentation.
    +
    541 
    +
    542 GENERATE_TESTLIST = YES
    +
    543 
    +
    544 # The GENERATE_BUGLIST tag can be used to enable (YES) or
    +
    545 # disable (NO) the bug list. This list is created by putting \bug
    +
    546 # commands in the documentation.
    +
    547 
    +
    548 GENERATE_BUGLIST = YES
    +
    549 
    +
    550 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
    +
    551 # disable (NO) the deprecated list. This list is created by putting
    +
    552 # \deprecated commands in the documentation.
    +
    553 
    +
    554 GENERATE_DEPRECATEDLIST= YES
    +
    555 
    +
    556 # The ENABLED_SECTIONS tag can be used to enable conditional
    +
    557 # documentation sections, marked by \if sectionname ... \endif.
    +
    558 
    +
    559 ENABLED_SECTIONS =
    +
    560 
    +
    561 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines
    +
    562 # the initial value of a variable or macro consists of for it to appear in
    +
    563 # the documentation. If the initializer consists of more lines than specified
    +
    564 # here it will be hidden. Use a value of 0 to hide initializers completely.
    +
    565 # The appearance of the initializer of individual variables and macros in the
    +
    566 # documentation can be controlled using \showinitializer or \hideinitializer
    +
    567 # command in the documentation regardless of this setting.
    +
    568 
    +
    569 MAX_INITIALIZER_LINES = 30
    +
    570 
    +
    571 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated
    +
    572 # at the bottom of the documentation of classes and structs. If set to YES the
    +
    573 # list will mention the files that were used to generate the documentation.
    +
    574 
    +
    575 SHOW_USED_FILES = NO
    +
    576 
    +
    577 # Set the SHOW_FILES tag to NO to disable the generation of the Files page.
    +
    578 # This will remove the Files entry from the Quick Index and from the
    +
    579 # Folder Tree View (if specified). The default is YES.
    +
    580 
    +
    581 SHOW_FILES = YES
    +
    582 
    +
    583 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the
    +
    584 # Namespaces page. This will remove the Namespaces entry from the Quick Index
    +
    585 # and from the Folder Tree View (if specified). The default is YES.
    +
    586 
    +
    587 SHOW_NAMESPACES = YES
    +
    588 
    +
    589 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
    +
    590 # doxygen should invoke to get the current version for each file (typically from
    +
    591 # the version control system). Doxygen will invoke the program by executing (via
    +
    592 # popen()) the command <command> <input-file>, where <command> is the value of
    +
    593 # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
    +
    594 # provided by doxygen. Whatever the program writes to standard output
    +
    595 # is used as the file version. See the manual for examples.
    +
    596 
    +
    597 FILE_VERSION_FILTER =
    +
    598 
    +
    599 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
    +
    600 # by doxygen. The layout file controls the global structure of the generated
    +
    601 # output files in an output format independent way. To create the layout file
    +
    602 # that represents doxygen's defaults, run doxygen with the -l option.
    +
    603 # You can optionally specify a file name after the option, if omitted
    +
    604 # DoxygenLayout.xml will be used as the name of the layout file.
    +
    605 
    +
    606 LAYOUT_FILE =
    +
    607 
    +
    608 # The CITE_BIB_FILES tag can be used to specify one or more bib files
    +
    609 # containing the references data. This must be a list of .bib files. The
    +
    610 # .bib extension is automatically appended if omitted. Using this command
    +
    611 # requires the bibtex tool to be installed. See also
    +
    612 # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
    +
    613 # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
    +
    614 # feature you need bibtex and perl available in the search path.
    +
    615 
    +
    616 CITE_BIB_FILES =
    +
    617 
    +
    618 #---------------------------------------------------------------------------
    +
    619 # configuration options related to warning and progress messages
    +
    620 #---------------------------------------------------------------------------
    +
    621 
    +
    622 # The QUIET tag can be used to turn on/off the messages that are generated
    +
    623 # by doxygen. Possible values are YES and NO. If left blank NO is used.
    +
    624 
    +
    625 QUIET = NO
    +
    626 
    +
    627 # The WARNINGS tag can be used to turn on/off the warning messages that are
    +
    628 # generated by doxygen. Possible values are YES and NO. If left blank
    +
    629 # NO is used.
    +
    630 
    +
    631 WARNINGS = YES
    +
    632 
    +
    633 # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
    +
    634 # for undocumented members. If EXTRACT_ALL is set to YES then this flag will
    +
    635 # automatically be disabled.
    +
    636 
    +
    637 WARN_IF_UNDOCUMENTED = YES
    +
    638 
    +
    639 # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
    +
    640 # potential errors in the documentation, such as not documenting some
    +
    641 # parameters in a documented function, or documenting parameters that
    +
    642 # don't exist or using markup commands wrongly.
    +
    643 
    +
    644 WARN_IF_DOC_ERROR = YES
    +
    645 
    +
    646 # The WARN_NO_PARAMDOC option can be enabled to get warnings for
    +
    647 # functions that are documented, but have no documentation for their parameters
    +
    648 # or return value. If set to NO (the default) doxygen will only warn about
    +
    649 # wrong or incomplete parameter documentation, but not about the absence of
    +
    650 # documentation.
    +
    651 
    +
    652 WARN_NO_PARAMDOC = NO
    +
    653 
    +
    654 # The WARN_FORMAT tag determines the format of the warning messages that
    +
    655 # doxygen can produce. The string should contain the $file, $line, and $text
    +
    656 # tags, which will be replaced by the file and line number from which the
    +
    657 # warning originated and the warning text. Optionally the format may contain
    +
    658 # $version, which will be replaced by the version of the file (if it could
    +
    659 # be obtained via FILE_VERSION_FILTER)
    +
    660 
    +
    661 WARN_FORMAT = "$file:$line: $text"
    +
    662 
    +
    663 # The WARN_LOGFILE tag can be used to specify a file to which warning
    +
    664 # and error messages should be written. If left blank the output is written
    +
    665 # to stderr.
    +
    666 
    +
    667 WARN_LOGFILE =
    +
    668 
    +
    669 #---------------------------------------------------------------------------
    +
    670 # configuration options related to the input files
    +
    671 #---------------------------------------------------------------------------
    +
    672 
    +
    673 # The INPUT tag can be used to specify the files and/or directories that contain
    +
    674 # documented source files. You may enter file names like "myfile.cpp" or
    +
    675 # directories like "/usr/src/myproject". Separate the files or directories
    +
    676 # with spaces.
    +
    677 
    +
    678 INPUT = ../glm \
    +
    679  .
    +
    680 
    +
    681 # This tag can be used to specify the character encoding of the source files
    +
    682 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
    +
    683 # also the default input encoding. Doxygen uses libiconv (or the iconv built
    +
    684 # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
    +
    685 # the list of possible encodings.
    +
    686 
    +
    687 INPUT_ENCODING = UTF-8
    +
    688 
    +
    689 # If the value of the INPUT tag contains directories, you can use the
    +
    690 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
    +
    691 # and *.h) to filter out the source-files in the directories. If left
    +
    692 # blank the following patterns are tested:
    +
    693 # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
    +
    694 # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
    +
    695 # *.f90 *.f *.for *.vhd *.vhdl
    +
    696 
    +
    697 FILE_PATTERNS = *.hpp \
    +
    698  *.doxy
    +
    699 
    +
    700 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
    +
    701 # should be searched for input files as well. Possible values are YES and NO.
    +
    702 # If left blank NO is used.
    +
    703 
    +
    704 RECURSIVE = YES
    +
    705 
    +
    706 # The EXCLUDE tag can be used to specify files and/or directories that should be
    +
    707 # excluded from the INPUT source files. This way you can easily exclude a
    +
    708 # subdirectory from a directory tree whose root is specified with the INPUT tag.
    +
    709 # Note that relative paths are relative to the directory from which doxygen is
    +
    710 # run.
    +
    711 
    +
    712 EXCLUDE =
    +
    713 
    +
    714 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
    +
    715 # directories that are symbolic links (a Unix file system feature) are excluded
    +
    716 # from the input.
    +
    717 
    +
    718 EXCLUDE_SYMLINKS = NO
    +
    719 
    +
    720 # If the value of the INPUT tag contains directories, you can use the
    +
    721 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
    +
    722 # certain files from those directories. Note that the wildcards are matched
    +
    723 # against the file with absolute path, so to exclude all test directories
    +
    724 # for example use the pattern */test/*
    +
    725 
    +
    726 EXCLUDE_PATTERNS =
    +
    727 
    +
    728 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
    +
    729 # (namespaces, classes, functions, etc.) that should be excluded from the
    +
    730 # output. The symbol name can be a fully qualified name, a word, or if the
    +
    731 # wildcard * is used, a substring. Examples: ANamespace, AClass,
    +
    732 # AClass::ANamespace, ANamespace::*Test
    +
    733 
    +
    734 EXCLUDE_SYMBOLS =
    +
    735 
    +
    736 # The EXAMPLE_PATH tag can be used to specify one or more files or
    +
    737 # directories that contain example code fragments that are included (see
    +
    738 # the \include command).
    +
    739 
    +
    740 EXAMPLE_PATH =
    +
    741 
    +
    742 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
    +
    743 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
    +
    744 # and *.h) to filter out the source-files in the directories. If left
    +
    745 # blank all files are included.
    +
    746 
    +
    747 EXAMPLE_PATTERNS = *
    +
    748 
    +
    749 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
    +
    750 # searched for input files to be used with the \include or \dontinclude
    +
    751 # commands irrespective of the value of the RECURSIVE tag.
    +
    752 # Possible values are YES and NO. If left blank NO is used.
    +
    753 
    +
    754 EXAMPLE_RECURSIVE = NO
    +
    755 
    +
    756 # The IMAGE_PATH tag can be used to specify one or more files or
    +
    757 # directories that contain image that are included in the documentation (see
    +
    758 # the \image command).
    +
    759 
    +
    760 IMAGE_PATH =
    +
    761 
    +
    762 # The INPUT_FILTER tag can be used to specify a program that doxygen should
    +
    763 # invoke to filter for each input file. Doxygen will invoke the filter program
    +
    764 # by executing (via popen()) the command <filter> <input-file>, where <filter>
    +
    765 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an
    +
    766 # input file. Doxygen will then use the output that the filter program writes
    +
    767 # to standard output. If FILTER_PATTERNS is specified, this tag will be
    +
    768 # ignored.
    +
    769 
    +
    770 INPUT_FILTER =
    +
    771 
    +
    772 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
    +
    773 # basis. Doxygen will compare the file name with each pattern and apply the
    +
    774 # filter if there is a match. The filters are a list of the form:
    +
    775 # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
    +
    776 # info on how filters are used. If FILTER_PATTERNS is empty or if
    +
    777 # non of the patterns match the file name, INPUT_FILTER is applied.
    +
    778 
    +
    779 FILTER_PATTERNS =
    +
    780 
    +
    781 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
    +
    782 # INPUT_FILTER) will be used to filter the input files when producing source
    +
    783 # files to browse (i.e. when SOURCE_BROWSER is set to YES).
    +
    784 
    +
    785 FILTER_SOURCE_FILES = NO
    +
    786 
    +
    787 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
    +
    788 # pattern. A pattern will override the setting for FILTER_PATTERN (if any)
    +
    789 # and it is also possible to disable source filtering for a specific pattern
    +
    790 # using *.ext= (so without naming a filter). This option only has effect when
    +
    791 # FILTER_SOURCE_FILES is enabled.
    +
    792 
    +
    793 FILTER_SOURCE_PATTERNS =
    +
    794 
    +
    795 #---------------------------------------------------------------------------
    +
    796 # configuration options related to source browsing
    +
    797 #---------------------------------------------------------------------------
    +
    798 
    +
    799 # If the SOURCE_BROWSER tag is set to YES then a list of source files will
    +
    800 # be generated. Documented entities will be cross-referenced with these sources.
    +
    801 # Note: To get rid of all source code in the generated output, make sure also
    +
    802 # VERBATIM_HEADERS is set to NO.
    +
    803 
    +
    804 SOURCE_BROWSER = YES
    +
    805 
    +
    806 # Setting the INLINE_SOURCES tag to YES will include the body
    +
    807 # of functions and classes directly in the documentation.
    +
    808 
    +
    809 INLINE_SOURCES = NO
    +
    810 
    +
    811 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
    +
    812 # doxygen to hide any special comment blocks from generated source code
    +
    813 # fragments. Normal C, C++ and Fortran comments will always remain visible.
    +
    814 
    +
    815 STRIP_CODE_COMMENTS = YES
    +
    816 
    +
    817 # If the REFERENCED_BY_RELATION tag is set to YES
    +
    818 # then for each documented function all documented
    +
    819 # functions referencing it will be listed.
    +
    820 
    +
    821 REFERENCED_BY_RELATION = YES
    +
    822 
    +
    823 # If the REFERENCES_RELATION tag is set to YES
    +
    824 # then for each documented function all documented entities
    +
    825 # called/used by that function will be listed.
    +
    826 
    +
    827 REFERENCES_RELATION = YES
    +
    828 
    +
    829 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
    +
    830 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
    +
    831 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
    +
    832 # link to the source code. Otherwise they will link to the documentation.
    +
    833 
    +
    834 REFERENCES_LINK_SOURCE = YES
    +
    835 
    +
    836 # If the USE_HTAGS tag is set to YES then the references to source code
    +
    837 # will point to the HTML generated by the htags(1) tool instead of doxygen
    +
    838 # built-in source browser. The htags tool is part of GNU's global source
    +
    839 # tagging system (see http://www.gnu.org/software/global/global.html). You
    +
    840 # will need version 4.8.6 or higher.
    +
    841 
    +
    842 USE_HTAGS = NO
    +
    843 
    +
    844 # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
    +
    845 # will generate a verbatim copy of the header file for each class for
    +
    846 # which an include is specified. Set to NO to disable this.
    +
    847 
    +
    848 VERBATIM_HEADERS = YES
    +
    849 
    +
    850 #---------------------------------------------------------------------------
    +
    851 # configuration options related to the alphabetical class index
    +
    852 #---------------------------------------------------------------------------
    +
    853 
    +
    854 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
    +
    855 # of all compounds will be generated. Enable this if the project
    +
    856 # contains a lot of classes, structs, unions or interfaces.
    +
    857 
    +
    858 ALPHABETICAL_INDEX = NO
    +
    859 
    +
    860 # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
    +
    861 # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
    +
    862 # in which this list will be split (can be a number in the range [1..20])
    +
    863 
    +
    864 COLS_IN_ALPHA_INDEX = 5
    +
    865 
    +
    866 # In case all classes in a project start with a common prefix, all
    +
    867 # classes will be put under the same header in the alphabetical index.
    +
    868 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that
    +
    869 # should be ignored while generating the index headers.
    +
    870 
    +
    871 IGNORE_PREFIX =
    +
    872 
    +
    873 #---------------------------------------------------------------------------
    +
    874 # configuration options related to the HTML output
    +
    875 #---------------------------------------------------------------------------
    +
    876 
    +
    877 # If the GENERATE_HTML tag is set to YES (the default) Doxygen will
    +
    878 # generate HTML output.
    +
    879 
    +
    880 GENERATE_HTML = YES
    +
    881 
    +
    882 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
    +
    883 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    +
    884 # put in front of it. If left blank `html' will be used as the default path.
    +
    885 
    +
    886 HTML_OUTPUT = html
    +
    887 
    +
    888 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for
    +
    889 # each generated HTML page (for example: .htm,.php,.asp). If it is left blank
    +
    890 # doxygen will generate files with .html extension.
    +
    891 
    +
    892 HTML_FILE_EXTENSION = .html
    +
    893 
    +
    894 # The HTML_HEADER tag can be used to specify a personal HTML header for
    +
    895 # each generated HTML page. If it is left blank doxygen will generate a
    +
    896 # standard header. Note that when using a custom header you are responsible
    +
    897 # for the proper inclusion of any scripts and style sheets that doxygen
    +
    898 # needs, which is dependent on the configuration options used.
    +
    899 # It is advised to generate a default header using "doxygen -w html
    +
    900 # header.html footer.html stylesheet.css YourConfigFile" and then modify
    +
    901 # that header. Note that the header is subject to change so you typically
    +
    902 # have to redo this when upgrading to a newer version of doxygen or when
    +
    903 # changing the value of configuration settings such as GENERATE_TREEVIEW!
    +
    904 
    +
    905 HTML_HEADER =
    +
    906 
    +
    907 # The HTML_FOOTER tag can be used to specify a personal HTML footer for
    +
    908 # each generated HTML page. If it is left blank doxygen will generate a
    +
    909 # standard footer.
    +
    910 
    +
    911 HTML_FOOTER =
    +
    912 
    +
    913 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
    +
    914 # style sheet that is used by each HTML page. It can be used to
    +
    915 # fine-tune the look of the HTML output. If left blank doxygen will
    +
    916 # generate a default style sheet. Note that it is recommended to use
    +
    917 # HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
    +
    918 # tag will in the future become obsolete.
    +
    919 
    +
    920 HTML_STYLESHEET =
    +
    921 
    +
    922 # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
    +
    923 # user-defined cascading style sheet that is included after the standard
    +
    924 # style sheets created by doxygen. Using this option one can overrule
    +
    925 # certain style aspects. This is preferred over using HTML_STYLESHEET
    +
    926 # since it does not replace the standard style sheet and is therefor more
    +
    927 # robust against future updates. Doxygen will copy the style sheet file to
    +
    928 # the output directory.
    +
    929 
    +
    930 HTML_EXTRA_STYLESHEET =
    +
    931 
    +
    932 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
    +
    933 # other source files which should be copied to the HTML output directory. Note
    +
    934 # that these files will be copied to the base HTML output directory. Use the
    +
    935 # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
    +
    936 # files. In the HTML_STYLESHEET file, use the file name only. Also note that
    +
    937 # the files will be copied as-is; there are no commands or markers available.
    +
    938 
    +
    939 HTML_EXTRA_FILES =
    +
    940 
    +
    941 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
    +
    942 # Doxygen will adjust the colors in the style sheet and background images
    +
    943 # according to this color. Hue is specified as an angle on a colorwheel,
    +
    944 # see http://en.wikipedia.org/wiki/Hue for more information.
    +
    945 # For instance the value 0 represents red, 60 is yellow, 120 is green,
    +
    946 # 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
    +
    947 # The allowed range is 0 to 359.
    +
    948 
    +
    949 HTML_COLORSTYLE_HUE = 220
    +
    950 
    +
    951 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
    +
    952 # the colors in the HTML output. For a value of 0 the output will use
    +
    953 # grayscales only. A value of 255 will produce the most vivid colors.
    +
    954 
    +
    955 HTML_COLORSTYLE_SAT = 100
    +
    956 
    +
    957 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
    +
    958 # the luminance component of the colors in the HTML output. Values below
    +
    959 # 100 gradually make the output lighter, whereas values above 100 make
    +
    960 # the output darker. The value divided by 100 is the actual gamma applied,
    +
    961 # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
    +
    962 # and 100 does not change the gamma.
    +
    963 
    +
    964 HTML_COLORSTYLE_GAMMA = 80
    +
    965 
    +
    966 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
    +
    967 # page will contain the date and time when the page was generated. Setting
    +
    968 # this to NO can help when comparing the output of multiple runs.
    +
    969 
    +
    970 HTML_TIMESTAMP = NO
    +
    971 
    +
    972 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
    +
    973 # documentation will contain sections that can be hidden and shown after the
    +
    974 # page has loaded.
    +
    975 
    +
    976 HTML_DYNAMIC_SECTIONS = NO
    +
    977 
    +
    978 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
    +
    979 # entries shown in the various tree structured indices initially; the user
    +
    980 # can expand and collapse entries dynamically later on. Doxygen will expand
    +
    981 # the tree to such a level that at most the specified number of entries are
    +
    982 # visible (unless a fully collapsed tree already exceeds this amount).
    +
    983 # So setting the number of entries 1 will produce a full collapsed tree by
    +
    984 # default. 0 is a special value representing an infinite number of entries
    +
    985 # and will result in a full expanded tree by default.
    +
    986 
    +
    987 HTML_INDEX_NUM_ENTRIES = 100
    +
    988 
    +
    989 # If the GENERATE_DOCSET tag is set to YES, additional index files
    +
    990 # will be generated that can be used as input for Apple's Xcode 3
    +
    991 # integrated development environment, introduced with OSX 10.5 (Leopard).
    +
    992 # To create a documentation set, doxygen will generate a Makefile in the
    +
    993 # HTML output directory. Running make will produce the docset in that
    +
    994 # directory and running "make install" will install the docset in
    +
    995 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
    +
    996 # it at startup.
    +
    997 # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
    +
    998 # for more information.
    +
    999 
    +
    1000 GENERATE_DOCSET = NO
    +
    1001 
    +
    1002 # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
    +
    1003 # feed. A documentation feed provides an umbrella under which multiple
    +
    1004 # documentation sets from a single provider (such as a company or product suite)
    +
    1005 # can be grouped.
    +
    1006 
    +
    1007 DOCSET_FEEDNAME = "Doxygen generated docs"
    +
    1008 
    +
    1009 # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
    +
    1010 # should uniquely identify the documentation set bundle. This should be a
    +
    1011 # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
    +
    1012 # will append .docset to the name.
    +
    1013 
    +
    1014 DOCSET_BUNDLE_ID = org.doxygen.Project
    +
    1015 
    +
    1016 # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
    +
    1017 # identify the documentation publisher. This should be a reverse domain-name
    +
    1018 # style string, e.g. com.mycompany.MyDocSet.documentation.
    +
    1019 
    +
    1020 DOCSET_PUBLISHER_ID = org.doxygen.Publisher
    +
    1021 
    +
    1022 # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
    +
    1023 
    +
    1024 DOCSET_PUBLISHER_NAME = Publisher
    +
    1025 
    +
    1026 # If the GENERATE_HTMLHELP tag is set to YES, additional index files
    +
    1027 # will be generated that can be used as input for tools like the
    +
    1028 # Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
    +
    1029 # of the generated HTML documentation.
    +
    1030 
    +
    1031 GENERATE_HTMLHELP = NO
    +
    1032 
    +
    1033 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
    +
    1034 # be used to specify the file name of the resulting .chm file. You
    +
    1035 # can add a path in front of the file if the result should not be
    +
    1036 # written to the html output directory.
    +
    1037 
    +
    1038 CHM_FILE =
    +
    1039 
    +
    1040 # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
    +
    1041 # be used to specify the location (absolute path including file name) of
    +
    1042 # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
    +
    1043 # the HTML help compiler on the generated index.hhp.
    +
    1044 
    +
    1045 HHC_LOCATION =
    +
    1046 
    +
    1047 # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
    +
    1048 # controls if a separate .chi index file is generated (YES) or that
    +
    1049 # it should be included in the master .chm file (NO).
    +
    1050 
    +
    1051 GENERATE_CHI = NO
    +
    1052 
    +
    1053 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
    +
    1054 # is used to encode HtmlHelp index (hhk), content (hhc) and project file
    +
    1055 # content.
    +
    1056 
    +
    1057 CHM_INDEX_ENCODING =
    +
    1058 
    +
    1059 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
    +
    1060 # controls whether a binary table of contents is generated (YES) or a
    +
    1061 # normal table of contents (NO) in the .chm file.
    +
    1062 
    +
    1063 BINARY_TOC = NO
    +
    1064 
    +
    1065 # The TOC_EXPAND flag can be set to YES to add extra items for group members
    +
    1066 # to the contents of the HTML help documentation and to the tree view.
    +
    1067 
    +
    1068 TOC_EXPAND = NO
    +
    1069 
    +
    1070 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
    +
    1071 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
    +
    1072 # that can be used as input for Qt's qhelpgenerator to generate a
    +
    1073 # Qt Compressed Help (.qch) of the generated HTML documentation.
    +
    1074 
    +
    1075 GENERATE_QHP = NO
    +
    1076 
    +
    1077 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can
    +
    1078 # be used to specify the file name of the resulting .qch file.
    +
    1079 # The path specified is relative to the HTML output folder.
    +
    1080 
    +
    1081 QCH_FILE =
    +
    1082 
    +
    1083 # The QHP_NAMESPACE tag specifies the namespace to use when generating
    +
    1084 # Qt Help Project output. For more information please see
    +
    1085 # http://doc.trolltech.com/qthelpproject.html#namespace
    +
    1086 
    +
    1087 QHP_NAMESPACE = org.doxygen.Project
    +
    1088 
    +
    1089 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
    +
    1090 # Qt Help Project output. For more information please see
    +
    1091 # http://doc.trolltech.com/qthelpproject.html#virtual-folders
    +
    1092 
    +
    1093 QHP_VIRTUAL_FOLDER = doc
    +
    1094 
    +
    1095 # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
    +
    1096 # add. For more information please see
    +
    1097 # http://doc.trolltech.com/qthelpproject.html#custom-filters
    +
    1098 
    +
    1099 QHP_CUST_FILTER_NAME =
    +
    1100 
    +
    1101 # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
    +
    1102 # custom filter to add. For more information please see
    +
    1103 # <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
    +
    1104 # Qt Help Project / Custom Filters</a>.
    +
    1105 
    +
    1106 QHP_CUST_FILTER_ATTRS =
    +
    1107 
    +
    1108 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
    +
    1109 # project's
    +
    1110 # filter section matches.
    +
    1111 # <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
    +
    1112 # Qt Help Project / Filter Attributes</a>.
    +
    1113 
    +
    1114 QHP_SECT_FILTER_ATTRS =
    +
    1115 
    +
    1116 # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
    +
    1117 # be used to specify the location of Qt's qhelpgenerator.
    +
    1118 # If non-empty doxygen will try to run qhelpgenerator on the generated
    +
    1119 # .qhp file.
    +
    1120 
    +
    1121 QHG_LOCATION =
    +
    1122 
    +
    1123 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
    +
    1124 # will be generated, which together with the HTML files, form an Eclipse help
    +
    1125 # plugin. To install this plugin and make it available under the help contents
    +
    1126 # menu in Eclipse, the contents of the directory containing the HTML and XML
    +
    1127 # files needs to be copied into the plugins directory of eclipse. The name of
    +
    1128 # the directory within the plugins directory should be the same as
    +
    1129 # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
    +
    1130 # the help appears.
    +
    1131 
    +
    1132 GENERATE_ECLIPSEHELP = NO
    +
    1133 
    +
    1134 # A unique identifier for the eclipse help plugin. When installing the plugin
    +
    1135 # the directory name containing the HTML and XML files should also have
    +
    1136 # this name.
    +
    1137 
    +
    1138 ECLIPSE_DOC_ID = org.doxygen.Project
    +
    1139 
    +
    1140 # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
    +
    1141 # at top of each HTML page. The value NO (the default) enables the index and
    +
    1142 # the value YES disables it. Since the tabs have the same information as the
    +
    1143 # navigation tree you can set this option to NO if you already set
    +
    1144 # GENERATE_TREEVIEW to YES.
    +
    1145 
    +
    1146 DISABLE_INDEX = NO
    +
    1147 
    +
    1148 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
    +
    1149 # structure should be generated to display hierarchical information.
    +
    1150 # If the tag value is set to YES, a side panel will be generated
    +
    1151 # containing a tree-like index structure (just like the one that
    +
    1152 # is generated for HTML Help). For this to work a browser that supports
    +
    1153 # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
    +
    1154 # Windows users are probably better off using the HTML help feature.
    +
    1155 # Since the tree basically has the same information as the tab index you
    +
    1156 # could consider to set DISABLE_INDEX to NO when enabling this option.
    +
    1157 
    +
    1158 GENERATE_TREEVIEW = NO
    +
    1159 
    +
    1160 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
    +
    1161 # (range [0,1..20]) that doxygen will group on one line in the generated HTML
    +
    1162 # documentation. Note that a value of 0 will completely suppress the enum
    +
    1163 # values from appearing in the overview section.
    +
    1164 
    +
    1165 ENUM_VALUES_PER_LINE = 4
    +
    1166 
    +
    1167 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
    +
    1168 # used to set the initial width (in pixels) of the frame in which the tree
    +
    1169 # is shown.
    +
    1170 
    +
    1171 TREEVIEW_WIDTH = 250
    +
    1172 
    +
    1173 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
    +
    1174 # links to external symbols imported via tag files in a separate window.
    +
    1175 
    +
    1176 EXT_LINKS_IN_WINDOW = NO
    +
    1177 
    +
    1178 # Use this tag to change the font size of Latex formulas included
    +
    1179 # as images in the HTML documentation. The default is 10. Note that
    +
    1180 # when you change the font size after a successful doxygen run you need
    +
    1181 # to manually remove any form_*.png images from the HTML output directory
    +
    1182 # to force them to be regenerated.
    +
    1183 
    +
    1184 FORMULA_FONTSIZE = 10
    +
    1185 
    +
    1186 # Use the FORMULA_TRANPARENT tag to determine whether or not the images
    +
    1187 # generated for formulas are transparent PNGs. Transparent PNGs are
    +
    1188 # not supported properly for IE 6.0, but are supported on all modern browsers.
    +
    1189 # Note that when changing this option you need to delete any form_*.png files
    +
    1190 # in the HTML output before the changes have effect.
    +
    1191 
    +
    1192 FORMULA_TRANSPARENT = YES
    +
    1193 
    +
    1194 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
    +
    1195 # (see http://www.mathjax.org) which uses client side Javascript for the
    +
    1196 # rendering instead of using prerendered bitmaps. Use this if you do not
    +
    1197 # have LaTeX installed or if you want to formulas look prettier in the HTML
    +
    1198 # output. When enabled you may also need to install MathJax separately and
    +
    1199 # configure the path to it using the MATHJAX_RELPATH option.
    +
    1200 
    +
    1201 USE_MATHJAX = NO
    +
    1202 
    +
    1203 # When MathJax is enabled you need to specify the location relative to the
    +
    1204 # HTML output directory using the MATHJAX_RELPATH option. The destination
    +
    1205 # directory should contain the MathJax.js script. For instance, if the mathjax
    +
    1206 # directory is located at the same level as the HTML output directory, then
    +
    1207 # MATHJAX_RELPATH should be ../mathjax. The default value points to
    +
    1208 # the MathJax Content Delivery Network so you can quickly see the result without
    +
    1209 # installing MathJax. However, it is strongly recommended to install a local
    +
    1210 # copy of MathJax from http://www.mathjax.org before deployment.
    +
    1211 
    +
    1212 MATHJAX_RELPATH = http://www.mathjax.org/mathjax
    +
    1213 
    +
    1214 # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
    +
    1215 # names that should be enabled during MathJax rendering.
    +
    1216 
    +
    1217 MATHJAX_EXTENSIONS =
    +
    1218 
    +
    1219 # When the SEARCHENGINE tag is enabled doxygen will generate a search box
    +
    1220 # for the HTML output. The underlying search engine uses javascript
    +
    1221 # and DHTML and should work on any modern browser. Note that when using
    +
    1222 # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
    +
    1223 # (GENERATE_DOCSET) there is already a search function so this one should
    +
    1224 # typically be disabled. For large projects the javascript based search engine
    +
    1225 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
    +
    1226 
    +
    1227 SEARCHENGINE = NO
    +
    1228 
    +
    1229 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
    +
    1230 # implemented using a PHP enabled web server instead of at the web client
    +
    1231 # using Javascript. Doxygen will generate the search PHP script and index
    +
    1232 # file to put on the web server. The advantage of the server
    +
    1233 # based approach is that it scales better to large projects and allows
    +
    1234 # full text search. The disadvantages are that it is more difficult to setup
    +
    1235 # and does not have live searching capabilities.
    +
    1236 
    +
    1237 SERVER_BASED_SEARCH = NO
    +
    1238 
    +
    1239 #---------------------------------------------------------------------------
    +
    1240 # configuration options related to the LaTeX output
    +
    1241 #---------------------------------------------------------------------------
    +
    1242 
    +
    1243 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
    +
    1244 # generate Latex output.
    +
    1245 
    +
    1246 GENERATE_LATEX = NO
    +
    1247 
    +
    1248 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
    +
    1249 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    +
    1250 # put in front of it. If left blank `latex' will be used as the default path.
    +
    1251 
    +
    1252 LATEX_OUTPUT = latex
    +
    1253 
    +
    1254 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
    +
    1255 # invoked. If left blank `latex' will be used as the default command name.
    +
    1256 # Note that when enabling USE_PDFLATEX this option is only used for
    +
    1257 # generating bitmaps for formulas in the HTML output, but not in the
    +
    1258 # Makefile that is written to the output directory.
    +
    1259 
    +
    1260 LATEX_CMD_NAME = latex
    +
    1261 
    +
    1262 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
    +
    1263 # generate index for LaTeX. If left blank `makeindex' will be used as the
    +
    1264 # default command name.
    +
    1265 
    +
    1266 MAKEINDEX_CMD_NAME = makeindex
    +
    1267 
    +
    1268 # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
    +
    1269 # LaTeX documents. This may be useful for small projects and may help to
    +
    1270 # save some trees in general.
    +
    1271 
    +
    1272 COMPACT_LATEX = NO
    +
    1273 
    +
    1274 # The PAPER_TYPE tag can be used to set the paper type that is used
    +
    1275 # by the printer. Possible values are: a4, letter, legal and
    +
    1276 # executive. If left blank a4wide will be used.
    +
    1277 
    +
    1278 PAPER_TYPE = a4wide
    +
    1279 
    +
    1280 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
    +
    1281 # packages that should be included in the LaTeX output.
    +
    1282 
    +
    1283 EXTRA_PACKAGES =
    +
    1284 
    +
    1285 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for
    +
    1286 # the generated latex document. The header should contain everything until
    +
    1287 # the first chapter. If it is left blank doxygen will generate a
    +
    1288 # standard header. Notice: only use this tag if you know what you are doing!
    +
    1289 
    +
    1290 LATEX_HEADER =
    +
    1291 
    +
    1292 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
    +
    1293 # the generated latex document. The footer should contain everything after
    +
    1294 # the last chapter. If it is left blank doxygen will generate a
    +
    1295 # standard footer. Notice: only use this tag if you know what you are doing!
    +
    1296 
    +
    1297 LATEX_FOOTER =
    +
    1298 
    +
    1299 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
    +
    1300 # is prepared for conversion to pdf (using ps2pdf). The pdf file will
    +
    1301 # contain links (just like the HTML output) instead of page references
    +
    1302 # This makes the output suitable for online browsing using a pdf viewer.
    +
    1303 
    +
    1304 PDF_HYPERLINKS = NO
    +
    1305 
    +
    1306 # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
    +
    1307 # plain latex in the generated Makefile. Set this option to YES to get a
    +
    1308 # higher quality PDF documentation.
    +
    1309 
    +
    1310 USE_PDFLATEX = YES
    +
    1311 
    +
    1312 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
    +
    1313 # command to the generated LaTeX files. This will instruct LaTeX to keep
    +
    1314 # running if errors occur, instead of asking the user for help.
    +
    1315 # This option is also used when generating formulas in HTML.
    +
    1316 
    +
    1317 LATEX_BATCHMODE = NO
    +
    1318 
    +
    1319 # If LATEX_HIDE_INDICES is set to YES then doxygen will not
    +
    1320 # include the index chapters (such as File Index, Compound Index, etc.)
    +
    1321 # in the output.
    +
    1322 
    +
    1323 LATEX_HIDE_INDICES = NO
    +
    1324 
    +
    1325 # If LATEX_SOURCE_CODE is set to YES then doxygen will include
    +
    1326 # source code with syntax highlighting in the LaTeX output.
    +
    1327 # Note that which sources are shown also depends on other settings
    +
    1328 # such as SOURCE_BROWSER.
    +
    1329 
    +
    1330 LATEX_SOURCE_CODE = NO
    +
    1331 
    +
    1332 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
    +
    1333 # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
    +
    1334 # http://en.wikipedia.org/wiki/BibTeX for more info.
    +
    1335 
    +
    1336 LATEX_BIB_STYLE = plain
    +
    1337 
    +
    1338 #---------------------------------------------------------------------------
    +
    1339 # configuration options related to the RTF output
    +
    1340 #---------------------------------------------------------------------------
    +
    1341 
    +
    1342 # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
    +
    1343 # The RTF output is optimized for Word 97 and may not look very pretty with
    +
    1344 # other RTF readers or editors.
    +
    1345 
    +
    1346 GENERATE_RTF = NO
    +
    1347 
    +
    1348 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
    +
    1349 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    +
    1350 # put in front of it. If left blank `rtf' will be used as the default path.
    +
    1351 
    +
    1352 RTF_OUTPUT = glm.rtf
    +
    1353 
    +
    1354 # If the COMPACT_RTF tag is set to YES Doxygen generates more compact
    +
    1355 # RTF documents. This may be useful for small projects and may help to
    +
    1356 # save some trees in general.
    +
    1357 
    +
    1358 COMPACT_RTF = NO
    +
    1359 
    +
    1360 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
    +
    1361 # will contain hyperlink fields. The RTF file will
    +
    1362 # contain links (just like the HTML output) instead of page references.
    +
    1363 # This makes the output suitable for online browsing using WORD or other
    +
    1364 # programs which support those fields.
    +
    1365 # Note: wordpad (write) and others do not support links.
    +
    1366 
    +
    1367 RTF_HYPERLINKS = YES
    +
    1368 
    +
    1369 # Load style sheet definitions from file. Syntax is similar to doxygen's
    +
    1370 # config file, i.e. a series of assignments. You only have to provide
    +
    1371 # replacements, missing definitions are set to their default value.
    +
    1372 
    +
    1373 RTF_STYLESHEET_FILE =
    +
    1374 
    +
    1375 # Set optional variables used in the generation of an rtf document.
    +
    1376 # Syntax is similar to doxygen's config file.
    +
    1377 
    +
    1378 RTF_EXTENSIONS_FILE =
    +
    1379 
    +
    1380 #---------------------------------------------------------------------------
    +
    1381 # configuration options related to the man page output
    +
    1382 #---------------------------------------------------------------------------
    +
    1383 
    +
    1384 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
    +
    1385 # generate man pages
    +
    1386 
    +
    1387 GENERATE_MAN = NO
    +
    1388 
    +
    1389 # The MAN_OUTPUT tag is used to specify where the man pages will be put.
    +
    1390 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    +
    1391 # put in front of it. If left blank `man' will be used as the default path.
    +
    1392 
    +
    1393 MAN_OUTPUT = man
    +
    1394 
    +
    1395 # The MAN_EXTENSION tag determines the extension that is added to
    +
    1396 # the generated man pages (default is the subroutine's section .3)
    +
    1397 
    +
    1398 MAN_EXTENSION = .3
    +
    1399 
    +
    1400 # If the MAN_LINKS tag is set to YES and Doxygen generates man output,
    +
    1401 # then it will generate one additional man file for each entity
    +
    1402 # documented in the real man page(s). These additional files
    +
    1403 # only source the real man page, but without them the man command
    +
    1404 # would be unable to find the correct page. The default is NO.
    +
    1405 
    +
    1406 MAN_LINKS = NO
    +
    1407 
    +
    1408 #---------------------------------------------------------------------------
    +
    1409 # configuration options related to the XML output
    +
    1410 #---------------------------------------------------------------------------
    +
    1411 
    +
    1412 # If the GENERATE_XML tag is set to YES Doxygen will
    +
    1413 # generate an XML file that captures the structure of
    +
    1414 # the code including all documentation.
    +
    1415 
    +
    1416 GENERATE_XML = NO
    +
    1417 
    +
    1418 # The XML_OUTPUT tag is used to specify where the XML pages will be put.
    +
    1419 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    +
    1420 # put in front of it. If left blank `xml' will be used as the default path.
    +
    1421 
    +
    1422 XML_OUTPUT = xml
    +
    1423 
    +
    1424 # The XML_SCHEMA tag can be used to specify an XML schema,
    +
    1425 # which can be used by a validating XML parser to check the
    +
    1426 # syntax of the XML files.
    +
    1427 
    +
    1428 XML_SCHEMA =
    +
    1429 
    +
    1430 # The XML_DTD tag can be used to specify an XML DTD,
    +
    1431 # which can be used by a validating XML parser to check the
    +
    1432 # syntax of the XML files.
    +
    1433 
    +
    1434 XML_DTD =
    +
    1435 
    +
    1436 # If the XML_PROGRAMLISTING tag is set to YES Doxygen will
    +
    1437 # dump the program listings (including syntax highlighting
    +
    1438 # and cross-referencing information) to the XML output. Note that
    +
    1439 # enabling this will significantly increase the size of the XML output.
    +
    1440 
    +
    1441 XML_PROGRAMLISTING = YES
    +
    1442 
    +
    1443 #---------------------------------------------------------------------------
    +
    1444 # configuration options for the AutoGen Definitions output
    +
    1445 #---------------------------------------------------------------------------
    +
    1446 
    +
    1447 # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
    +
    1448 # generate an AutoGen Definitions (see autogen.sf.net) file
    +
    1449 # that captures the structure of the code including all
    +
    1450 # documentation. Note that this feature is still experimental
    +
    1451 # and incomplete at the moment.
    +
    1452 
    +
    1453 GENERATE_AUTOGEN_DEF = NO
    +
    1454 
    +
    1455 #---------------------------------------------------------------------------
    +
    1456 # configuration options related to the Perl module output
    +
    1457 #---------------------------------------------------------------------------
    +
    1458 
    +
    1459 # If the GENERATE_PERLMOD tag is set to YES Doxygen will
    +
    1460 # generate a Perl module file that captures the structure of
    +
    1461 # the code including all documentation. Note that this
    +
    1462 # feature is still experimental and incomplete at the
    +
    1463 # moment.
    +
    1464 
    +
    1465 GENERATE_PERLMOD = NO
    +
    1466 
    +
    1467 # If the PERLMOD_LATEX tag is set to YES Doxygen will generate
    +
    1468 # the necessary Makefile rules, Perl scripts and LaTeX code to be able
    +
    1469 # to generate PDF and DVI output from the Perl module output.
    +
    1470 
    +
    1471 PERLMOD_LATEX = NO
    +
    1472 
    +
    1473 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
    +
    1474 # nicely formatted so it can be parsed by a human reader. This is useful
    +
    1475 # if you want to understand what is going on. On the other hand, if this
    +
    1476 # tag is set to NO the size of the Perl module output will be much smaller
    +
    1477 # and Perl will parse it just the same.
    +
    1478 
    +
    1479 PERLMOD_PRETTY = YES
    +
    1480 
    +
    1481 # The names of the make variables in the generated doxyrules.make file
    +
    1482 # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
    +
    1483 # This is useful so different doxyrules.make files included by the same
    +
    1484 # Makefile don't overwrite each other's variables.
    +
    1485 
    +
    1486 PERLMOD_MAKEVAR_PREFIX =
    +
    1487 
    +
    1488 #---------------------------------------------------------------------------
    +
    1489 # Configuration options related to the preprocessor
    +
    1490 #---------------------------------------------------------------------------
    +
    1491 
    +
    1492 # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
    +
    1493 # evaluate all C-preprocessor directives found in the sources and include
    +
    1494 # files.
    +
    1495 
    +
    1496 ENABLE_PREPROCESSING = YES
    +
    1497 
    +
    1498 # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
    +
    1499 # names in the source code. If set to NO (the default) only conditional
    +
    1500 # compilation will be performed. Macro expansion can be done in a controlled
    +
    1501 # way by setting EXPAND_ONLY_PREDEF to YES.
    +
    1502 
    +
    1503 MACRO_EXPANSION = NO
    +
    1504 
    +
    1505 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
    +
    1506 # then the macro expansion is limited to the macros specified with the
    +
    1507 # PREDEFINED and EXPAND_AS_DEFINED tags.
    +
    1508 
    +
    1509 EXPAND_ONLY_PREDEF = NO
    +
    1510 
    +
    1511 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
    +
    1512 # pointed to by INCLUDE_PATH will be searched when a #include is found.
    +
    1513 
    +
    1514 SEARCH_INCLUDES = YES
    +
    1515 
    +
    1516 # The INCLUDE_PATH tag can be used to specify one or more directories that
    +
    1517 # contain include files that are not input files but should be processed by
    +
    1518 # the preprocessor.
    +
    1519 
    +
    1520 INCLUDE_PATH =
    +
    1521 
    +
    1522 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
    +
    1523 # patterns (like *.h and *.hpp) to filter out the header-files in the
    +
    1524 # directories. If left blank, the patterns specified with FILE_PATTERNS will
    +
    1525 # be used.
    +
    1526 
    +
    1527 INCLUDE_FILE_PATTERNS =
    +
    1528 
    +
    1529 # The PREDEFINED tag can be used to specify one or more macro names that
    +
    1530 # are defined before the preprocessor is started (similar to the -D option of
    +
    1531 # gcc). The argument of the tag is a list of macros of the form: name
    +
    1532 # or name=definition (no spaces). If the definition and the = are
    +
    1533 # omitted =1 is assumed. To prevent a macro definition from being
    +
    1534 # undefined via #undef or recursively expanded use the := operator
    +
    1535 # instead of the = operator.
    +
    1536 
    +
    1537 PREDEFINED =
    +
    1538 
    +
    1539 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
    +
    1540 # this tag can be used to specify a list of macro names that should be expanded.
    +
    1541 # The macro definition that is found in the sources will be used.
    +
    1542 # Use the PREDEFINED tag if you want to use a different macro definition that
    +
    1543 # overrules the definition found in the source code.
    +
    1544 
    +
    1545 EXPAND_AS_DEFINED =
    +
    1546 
    +
    1547 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
    +
    1548 # doxygen's preprocessor will remove all references to function-like macros
    +
    1549 # that are alone on a line, have an all uppercase name, and do not end with a
    +
    1550 # semicolon, because these will confuse the parser if not removed.
    +
    1551 
    +
    1552 SKIP_FUNCTION_MACROS = YES
    +
    1553 
    +
    1554 #---------------------------------------------------------------------------
    +
    1555 # Configuration::additions related to external references
    +
    1556 #---------------------------------------------------------------------------
    +
    1557 
    +
    1558 # The TAGFILES option can be used to specify one or more tagfiles. For each
    +
    1559 # tag file the location of the external documentation should be added. The
    +
    1560 # format of a tag file without this location is as follows:
    +
    1561 # TAGFILES = file1 file2 ...
    +
    1562 # Adding location for the tag files is done as follows:
    +
    1563 # TAGFILES = file1=loc1 "file2 = loc2" ...
    +
    1564 # where "loc1" and "loc2" can be relative or absolute paths
    +
    1565 # or URLs. Note that each tag file must have a unique name (where the name does
    +
    1566 # NOT include the path). If a tag file is not located in the directory in which
    +
    1567 # doxygen is run, you must also specify the path to the tagfile here.
    +
    1568 
    +
    1569 TAGFILES =
    +
    1570 
    +
    1571 # When a file name is specified after GENERATE_TAGFILE, doxygen will create
    +
    1572 # a tag file that is based on the input files it reads.
    +
    1573 
    +
    1574 GENERATE_TAGFILE =
    +
    1575 
    +
    1576 # If the ALLEXTERNALS tag is set to YES all external classes will be listed
    +
    1577 # in the class index. If set to NO only the inherited external classes
    +
    1578 # will be listed.
    +
    1579 
    +
    1580 ALLEXTERNALS = NO
    +
    1581 
    +
    1582 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
    +
    1583 # in the modules index. If set to NO, only the current project's groups will
    +
    1584 # be listed.
    +
    1585 
    +
    1586 EXTERNAL_GROUPS = YES
    +
    1587 
    +
    1588 # The PERL_PATH should be the absolute path and name of the perl script
    +
    1589 # interpreter (i.e. the result of `which perl').
    +
    1590 
    +
    1591 PERL_PATH = /usr/bin/perl
    +
    1592 
    +
    1593 #---------------------------------------------------------------------------
    +
    1594 # Configuration options related to the dot tool
    +
    1595 #---------------------------------------------------------------------------
    +
    1596 
    +
    1597 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
    +
    1598 # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
    +
    1599 # or super classes. Setting the tag to NO turns the diagrams off. Note that
    +
    1600 # this option also works with HAVE_DOT disabled, but it is recommended to
    +
    1601 # install and use dot, since it yields more powerful graphs.
    +
    1602 
    +
    1603 CLASS_DIAGRAMS = YES
    +
    1604 
    +
    1605 # You can define message sequence charts within doxygen comments using the \msc
    +
    1606 # command. Doxygen will then run the mscgen tool (see
    +
    1607 # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
    +
    1608 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
    +
    1609 # the mscgen tool resides. If left empty the tool is assumed to be found in the
    +
    1610 # default search path.
    +
    1611 
    +
    1612 MSCGEN_PATH =
    +
    1613 
    +
    1614 # If set to YES, the inheritance and collaboration graphs will hide
    +
    1615 # inheritance and usage relations if the target is undocumented
    +
    1616 # or is not a class.
    +
    1617 
    +
    1618 HIDE_UNDOC_RELATIONS = YES
    +
    1619 
    +
    1620 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
    +
    1621 # available from the path. This tool is part of Graphviz, a graph visualization
    +
    1622 # toolkit from AT&T and Lucent Bell Labs. The other options in this section
    +
    1623 # have no effect if this option is set to NO (the default)
    +
    1624 
    +
    1625 HAVE_DOT = NO
    +
    1626 
    +
    1627 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
    +
    1628 # allowed to run in parallel. When set to 0 (the default) doxygen will
    +
    1629 # base this on the number of processors available in the system. You can set it
    +
    1630 # explicitly to a value larger than 0 to get control over the balance
    +
    1631 # between CPU load and processing speed.
    +
    1632 
    +
    1633 DOT_NUM_THREADS = 0
    +
    1634 
    +
    1635 # By default doxygen will use the Helvetica font for all dot files that
    +
    1636 # doxygen generates. When you want a differently looking font you can specify
    +
    1637 # the font name using DOT_FONTNAME. You need to make sure dot is able to find
    +
    1638 # the font, which can be done by putting it in a standard location or by setting
    +
    1639 # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
    +
    1640 # directory containing the font.
    +
    1641 
    +
    1642 DOT_FONTNAME = FreeSans
    +
    1643 
    +
    1644 # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
    +
    1645 # The default size is 10pt.
    +
    1646 
    +
    1647 DOT_FONTSIZE = 10
    +
    1648 
    +
    1649 # By default doxygen will tell dot to use the Helvetica font.
    +
    1650 # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
    +
    1651 # set the path where dot can find it.
    +
    1652 
    +
    1653 DOT_FONTPATH =
    +
    1654 
    +
    1655 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
    +
    1656 # will generate a graph for each documented class showing the direct and
    +
    1657 # indirect inheritance relations. Setting this tag to YES will force the
    +
    1658 # CLASS_DIAGRAMS tag to NO.
    +
    1659 
    +
    1660 CLASS_GRAPH = YES
    +
    1661 
    +
    1662 # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
    +
    1663 # will generate a graph for each documented class showing the direct and
    +
    1664 # indirect implementation dependencies (inheritance, containment, and
    +
    1665 # class references variables) of the class with other documented classes.
    +
    1666 
    +
    1667 COLLABORATION_GRAPH = YES
    +
    1668 
    +
    1669 # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
    +
    1670 # will generate a graph for groups, showing the direct groups dependencies
    +
    1671 
    +
    1672 GROUP_GRAPHS = YES
    +
    1673 
    +
    1674 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and
    +
    1675 # collaboration diagrams in a style similar to the OMG's Unified Modeling
    +
    1676 # Language.
    +
    1677 
    +
    1678 UML_LOOK = NO
    +
    1679 
    +
    1680 # If the UML_LOOK tag is enabled, the fields and methods are shown inside
    +
    1681 # the class node. If there are many fields or methods and many nodes the
    +
    1682 # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
    +
    1683 # threshold limits the number of items for each type to make the size more
    +
    1684 # managable. Set this to 0 for no limit. Note that the threshold may be
    +
    1685 # exceeded by 50% before the limit is enforced.
    +
    1686 
    +
    1687 UML_LIMIT_NUM_FIELDS = 10
    +
    1688 
    +
    1689 # If set to YES, the inheritance and collaboration graphs will show the
    +
    1690 # relations between templates and their instances.
    +
    1691 
    +
    1692 TEMPLATE_RELATIONS = NO
    +
    1693 
    +
    1694 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
    +
    1695 # tags are set to YES then doxygen will generate a graph for each documented
    +
    1696 # file showing the direct and indirect include dependencies of the file with
    +
    1697 # other documented files.
    +
    1698 
    +
    1699 INCLUDE_GRAPH = YES
    +
    1700 
    +
    1701 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
    +
    1702 # HAVE_DOT tags are set to YES then doxygen will generate a graph for each
    +
    1703 # documented header file showing the documented files that directly or
    +
    1704 # indirectly include this file.
    +
    1705 
    +
    1706 INCLUDED_BY_GRAPH = YES
    +
    1707 
    +
    1708 # If the CALL_GRAPH and HAVE_DOT options are set to YES then
    +
    1709 # doxygen will generate a call dependency graph for every global function
    +
    1710 # or class method. Note that enabling this option will significantly increase
    +
    1711 # the time of a run. So in most cases it will be better to enable call graphs
    +
    1712 # for selected functions only using the \callgraph command.
    +
    1713 
    +
    1714 CALL_GRAPH = YES
    +
    1715 
    +
    1716 # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
    +
    1717 # doxygen will generate a caller dependency graph for every global function
    +
    1718 # or class method. Note that enabling this option will significantly increase
    +
    1719 # the time of a run. So in most cases it will be better to enable caller
    +
    1720 # graphs for selected functions only using the \callergraph command.
    +
    1721 
    +
    1722 CALLER_GRAPH = YES
    +
    1723 
    +
    1724 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
    +
    1725 # will generate a graphical hierarchy of all classes instead of a textual one.
    +
    1726 
    +
    1727 GRAPHICAL_HIERARCHY = YES
    +
    1728 
    +
    1729 # If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
    +
    1730 # then doxygen will show the dependencies a directory has on other directories
    +
    1731 # in a graphical way. The dependency relations are determined by the #include
    +
    1732 # relations between the files in the directories.
    +
    1733 
    +
    1734 DIRECTORY_GRAPH = YES
    +
    1735 
    +
    1736 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
    +
    1737 # generated by dot. Possible values are svg, png, jpg, or gif.
    +
    1738 # If left blank png will be used. If you choose svg you need to set
    +
    1739 # HTML_FILE_EXTENSION to xhtml in order to make the SVG files
    +
    1740 # visible in IE 9+ (other browsers do not have this requirement).
    +
    1741 
    +
    1742 DOT_IMAGE_FORMAT = png
    +
    1743 
    +
    1744 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
    +
    1745 # enable generation of interactive SVG images that allow zooming and panning.
    +
    1746 # Note that this requires a modern browser other than Internet Explorer.
    +
    1747 # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
    +
    1748 # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
    +
    1749 # visible. Older versions of IE do not have SVG support.
    +
    1750 
    +
    1751 INTERACTIVE_SVG = NO
    +
    1752 
    +
    1753 # The tag DOT_PATH can be used to specify the path where the dot tool can be
    +
    1754 # found. If left blank, it is assumed the dot tool can be found in the path.
    +
    1755 
    +
    1756 DOT_PATH =
    +
    1757 
    +
    1758 # The DOTFILE_DIRS tag can be used to specify one or more directories that
    +
    1759 # contain dot files that are included in the documentation (see the
    +
    1760 # \dotfile command).
    +
    1761 
    +
    1762 DOTFILE_DIRS =
    +
    1763 
    +
    1764 # The MSCFILE_DIRS tag can be used to specify one or more directories that
    +
    1765 # contain msc files that are included in the documentation (see the
    +
    1766 # \mscfile command).
    +
    1767 
    +
    1768 MSCFILE_DIRS =
    +
    1769 
    +
    1770 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
    +
    1771 # nodes that will be shown in the graph. If the number of nodes in a graph
    +
    1772 # becomes larger than this value, doxygen will truncate the graph, which is
    +
    1773 # visualized by representing a node as a red box. Note that doxygen if the
    +
    1774 # number of direct children of the root node in a graph is already larger than
    +
    1775 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
    +
    1776 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
    +
    1777 
    +
    1778 DOT_GRAPH_MAX_NODES = 50
    +
    1779 
    +
    1780 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
    +
    1781 # graphs generated by dot. A depth value of 3 means that only nodes reachable
    +
    1782 # from the root by following a path via at most 3 edges will be shown. Nodes
    +
    1783 # that lay further from the root node will be omitted. Note that setting this
    +
    1784 # option to 1 or 2 may greatly reduce the computation time needed for large
    +
    1785 # code bases. Also note that the size of a graph can be further restricted by
    +
    1786 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
    +
    1787 
    +
    1788 MAX_DOT_GRAPH_DEPTH = 1000
    +
    1789 
    +
    1790 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
    +
    1791 # background. This is disabled by default, because dot on Windows does not
    +
    1792 # seem to support this out of the box. Warning: Depending on the platform used,
    +
    1793 # enabling this option may lead to badly anti-aliased labels on the edges of
    +
    1794 # a graph (i.e. they become hard to read).
    +
    1795 
    +
    1796 DOT_TRANSPARENT = NO
    +
    1797 
    +
    1798 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
    +
    1799 # files in one run (i.e. multiple -o and -T options on the command line). This
    +
    1800 # makes dot run faster, but since only newer versions of dot (>1.8.10)
    +
    1801 # support this, this feature is disabled by default.
    +
    1802 
    +
    1803 DOT_MULTI_TARGETS = NO
    +
    1804 
    +
    1805 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
    +
    1806 # generate a legend page explaining the meaning of the various boxes and
    +
    1807 # arrows in the dot generated graphs.
    +
    1808 
    +
    1809 GENERATE_LEGEND = YES
    +
    1810 
    +
    1811 # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
    +
    1812 # remove the intermediate dot files that are used to generate
    +
    1813 # the various graphs.
    +
    1814 
    +
    1815 DOT_CLEANUP = YES
    +
    + - diff --git a/doc/api/a00052.html b/doc/api/a00052.html index 0340dfb5..d9392dfd 100644 --- a/doc/api/a00052.html +++ b/doc/api/a00052.html @@ -2,42 +2,31 @@ - + matrix_access.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,47 +35,53 @@
  • File List
  • + +
    matrix_access.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType::col_type column (genType const &m, int index)
    template<typename genType >
    genType column (genType const &m, int index, typename genType::col_type const &x)
    template<typename genType >
    genType::row_type row (genType const &m, int index)
    template<typename genType >
    genType row (genType const &m, int index, typename genType::row_type const &x)
    template<typename genType >
    genType::col_type column (genType const &m, int index)
     
    template<typename genType >
    genType column (genType const &m, int index, typename genType::col_type const &x)
     
    template<typename genType >
    genType::row_type row (genType const &m, int index)
     
    template<typename genType >
    genType row (genType const &m, int index, typename genType::row_type const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_matrix_access: Access matrix rows and columns

    -
    Date:
    2005-12-27 / 2011-05-16
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_matrix_access

    +
    Date
    2005-12-27 / 2011-05-16
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file matrix_access.hpp.

    -
    - - + + - diff --git a/doc/api/a00052_source.html b/doc/api/a00052_source.html index 466b17fc..3b5cf10d 100644 --- a/doc/api/a00052_source.html +++ b/doc/api/a00052_source.html @@ -2,42 +2,31 @@ - + matrix_access.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,96 +35,98 @@
  • File List
  • + +
    matrix_access.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 #ifndef GLM_GTC_matrix_access
    -00038 #define GLM_GTC_matrix_access GLM_VERSION
    -00039 
    -00040 // Dependency:
    -00041 #include "../glm.hpp"
    -00042 
    -00043 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00044 #       pragma message("GLM: GLM_GTC_matrix_access extension included")
    -00045 #endif
    -00046 
    -00047 namespace glm
    -00048 {
    -00051 
    -00054         template <typename genType> 
    -00055         typename genType::row_type row(
    -00056                 genType const & m, 
    -00057                 int index);
    -00058 
    -00061     template <typename genType> 
    -00062         genType row(
    -00063                 genType const & m, 
    -00064                 int index, 
    -00065                 typename genType::row_type const & x);
    -00066 
    -00069         template <typename genType> 
    -00070         typename genType::col_type column(
    -00071                 genType const & m, 
    -00072                 int index);
    -00073 
    -00076         template <typename genType> 
    -00077         genType column(
    -00078                 genType const & m, 
    -00079                 int index, 
    -00080                 typename genType::col_type const & x);
    -00081 
    -00083 }//namespace glm
    -00084 
    -00085 #include "matrix_access.inl"
    -00086 
    -00087 #endif//GLM_GTC_matrix_access
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 #ifndef GLM_GTC_matrix_access
    +
    38 #define GLM_GTC_matrix_access GLM_VERSION
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    44 # pragma message("GLM: GLM_GTC_matrix_access extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename genType>
    +
    55  typename genType::row_type row(
    +
    56  genType const & m,
    +
    57  int index);
    +
    58 
    +
    61  template <typename genType>
    +
    62  genType row(
    +
    63  genType const & m,
    +
    64  int index,
    +
    65  typename genType::row_type const & x);
    +
    66 
    +
    69  template <typename genType>
    +
    70  typename genType::col_type column(
    +
    71  genType const & m,
    +
    72  int index);
    +
    73 
    +
    76  template <typename genType>
    +
    77  genType column(
    +
    78  genType const & m,
    +
    79  int index,
    +
    80  typename genType::col_type const & x);
    +
    81 
    +
    83 }//namespace glm
    +
    84 
    +
    85 #include "matrix_access.inl"
    +
    86 
    +
    87 #endif//GLM_GTC_matrix_access
    +
    + - diff --git a/doc/api/a00053.html b/doc/api/a00053.html index f3b63d2c..01875394 100644 --- a/doc/api/a00053.html +++ b/doc/api/a00053.html @@ -2,42 +2,31 @@ - + matrix_cross_product.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,49 @@
  • File List
  • + +
    matrix_cross_product.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat3x3< T > matrixCross3 (detail::tvec3< T > const &x)
    template<typename T >
    detail::tmat4x4< T > matrixCross4 (detail::tvec3< T > const &x)
    template<typename T >
    detail::tmat3x3< T > matrixCross3 (detail::tvec3< T > const &x)
     
    template<typename T >
    detail::tmat4x4< T > matrixCross4 (detail::tvec3< T > const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_cross_product: Cross product matrix form

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_matrix_cross_product

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    +GLM_GTX_extented_min_max (dependence)

    Definition in file matrix_cross_product.hpp.

    -
    - - + + - diff --git a/doc/api/a00053_source.html b/doc/api/a00053_source.html index 2a2d6337..2a51de49 100644 --- a/doc/api/a00053_source.html +++ b/doc/api/a00053_source.html @@ -2,42 +2,31 @@ - + matrix_cross_product.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,84 +35,86 @@
  • File List
  • + +
    matrix_cross_product.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_matrix_cross_product
    -00040 #define GLM_GTX_matrix_cross_product GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_matrix_cross_product extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056         template <typename T> 
    -00057         detail::tmat3x3<T> matrixCross3(
    -00058                 detail::tvec3<T> const & x);
    -00059                 
    -00062         template <typename T> 
    -00063         detail::tmat4x4<T> matrixCross4(
    -00064                 detail::tvec3<T> const & x);
    -00065 
    -00067 }//namespace glm
    -00068 
    -00069 #include "matrix_cross_product.inl"
    -00070 
    -00071 #endif//GLM_GTX_matrix_cross_product
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_matrix_cross_product
    +
    40 #define GLM_GTX_matrix_cross_product GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_matrix_cross_product extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename T>
    +
    57  detail::tmat3x3<T> matrixCross3(
    +
    58  detail::tvec3<T> const & x);
    +
    59 
    +
    62  template <typename T>
    +
    63  detail::tmat4x4<T> matrixCross4(
    +
    64  detail::tvec3<T> const & x);
    +
    65 
    +
    67 }//namespace glm
    +
    68 
    +
    69 #include "matrix_cross_product.inl"
    +
    70 
    +
    71 #endif//GLM_GTX_matrix_cross_product
    +
    + - diff --git a/doc/api/a00054.html b/doc/api/a00054.html index a6886766..fb3baf22 100644 --- a/doc/api/a00054.html +++ b/doc/api/a00054.html @@ -2,42 +2,31 @@ - + matrix_integer.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,195 +35,293 @@
  • File List
  • + +
    matrix_integer.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Typedefs

    typedef detail::tmat2x2
    -< highp_int > 
    highp_imat2
    typedef detail::tmat2x2
    -< highp_int > 
    highp_imat2x2
    typedef detail::tmat2x3
    -< highp_int > 
    highp_imat2x3
    typedef detail::tmat2x4
    -< highp_int > 
    highp_imat2x4
    typedef detail::tmat3x3
    -< highp_int > 
    highp_imat3
    typedef detail::tmat3x2
    -< highp_int > 
    highp_imat3x2
    typedef detail::tmat3x3
    -< highp_int > 
    highp_imat3x3
    typedef detail::tmat3x4
    -< highp_int > 
    highp_imat3x4
    typedef detail::tmat4x4
    -< highp_int > 
    highp_imat4
    typedef detail::tmat4x2
    -< highp_int > 
    highp_imat4x2
    typedef detail::tmat4x3
    -< highp_int > 
    highp_imat4x3
    typedef detail::tmat4x4
    -< highp_int > 
    highp_imat4x4
    typedef detail::tmat2x2
    -< highp_uint > 
    highp_umat2
    typedef detail::tmat2x2
    -< highp_uint > 
    highp_umat2x2
    typedef detail::tmat2x3
    -< highp_uint > 
    highp_umat2x3
    typedef detail::tmat2x4
    -< highp_uint > 
    highp_umat2x4
    typedef detail::tmat3x3
    -< highp_uint > 
    highp_umat3
    typedef detail::tmat3x2
    -< highp_uint > 
    highp_umat3x2
    typedef detail::tmat3x3
    -< highp_uint > 
    highp_umat3x3
    typedef detail::tmat3x4
    -< highp_uint > 
    highp_umat3x4
    typedef detail::tmat4x4
    -< highp_uint > 
    highp_umat4
    typedef detail::tmat4x2
    -< highp_uint > 
    highp_umat4x2
    typedef detail::tmat4x3
    -< highp_uint > 
    highp_umat4x3
    typedef detail::tmat4x4
    -< highp_uint > 
    highp_umat4x4
    typedef mediump_imat2 imat2
    typedef mediump_imat2x2 imat2x2
    typedef mediump_imat2x3 imat2x3
    typedef mediump_imat2x4 imat2x4
    typedef mediump_imat3 imat3
    typedef mediump_imat3x2 imat3x2
    typedef mediump_imat3x3 imat3x3
    typedef mediump_imat3x4 imat3x4
    typedef mediump_imat4 imat4
    typedef mediump_imat4x2 imat4x2
    typedef mediump_imat4x3 imat4x3
    typedef mediump_imat4x4 imat4x4
    typedef detail::tmat2x2< lowp_int > lowp_imat2
    typedef detail::tmat2x2< lowp_int > lowp_imat2x2
    typedef detail::tmat2x3< lowp_int > lowp_imat2x3
    typedef detail::tmat2x4< lowp_int > lowp_imat2x4
    typedef detail::tmat3x3< lowp_int > lowp_imat3
    typedef detail::tmat3x2< lowp_int > lowp_imat3x2
    typedef detail::tmat3x3< lowp_int > lowp_imat3x3
    typedef detail::tmat3x4< lowp_int > lowp_imat3x4
    typedef detail::tmat4x4< lowp_int > lowp_imat4
    typedef detail::tmat4x2< lowp_int > lowp_imat4x2
    typedef detail::tmat4x3< lowp_int > lowp_imat4x3
    typedef detail::tmat4x4< lowp_int > lowp_imat4x4
    typedef detail::tmat2x2
    -< lowp_uint > 
    lowp_umat2
    typedef detail::tmat2x2
    -< lowp_uint > 
    lowp_umat2x2
    typedef detail::tmat2x3
    -< lowp_uint > 
    lowp_umat2x3
    typedef detail::tmat2x4
    -< lowp_uint > 
    lowp_umat2x4
    typedef detail::tmat3x3
    -< lowp_uint > 
    lowp_umat3
    typedef detail::tmat3x2
    -< lowp_uint > 
    lowp_umat3x2
    typedef detail::tmat3x3
    -< lowp_uint > 
    lowp_umat3x3
    typedef detail::tmat3x4
    -< lowp_uint > 
    lowp_umat3x4
    typedef detail::tmat4x4
    -< lowp_uint > 
    lowp_umat4
    typedef detail::tmat4x2
    -< lowp_uint > 
    lowp_umat4x2
    typedef detail::tmat4x3
    -< lowp_uint > 
    lowp_umat4x3
    typedef detail::tmat4x4
    -< lowp_uint > 
    lowp_umat4x4
    typedef detail::tmat2x2
    -< mediump_int > 
    mediump_imat2
    typedef detail::tmat2x2
    -< mediump_int > 
    mediump_imat2x2
    typedef detail::tmat2x3
    -< mediump_int > 
    mediump_imat2x3
    typedef detail::tmat2x4
    -< mediump_int > 
    mediump_imat2x4
    typedef detail::tmat3x3
    -< mediump_int > 
    mediump_imat3
    typedef detail::tmat3x2
    -< mediump_int > 
    mediump_imat3x2
    typedef detail::tmat3x3
    -< mediump_int > 
    mediump_imat3x3
    typedef detail::tmat3x4
    -< mediump_int > 
    mediump_imat3x4
    typedef detail::tmat4x4
    -< mediump_int > 
    mediump_imat4
    typedef detail::tmat4x2
    -< mediump_int > 
    mediump_imat4x2
    typedef detail::tmat4x3
    -< mediump_int > 
    mediump_imat4x3
    typedef detail::tmat4x4
    -< mediump_int > 
    mediump_imat4x4
    typedef detail::tmat2x2
    -< mediump_uint > 
    mediump_umat2
    typedef detail::tmat2x2
    -< mediump_uint > 
    mediump_umat2x2
    typedef detail::tmat2x3
    -< mediump_uint > 
    mediump_umat2x3
    typedef detail::tmat2x4
    -< mediump_uint > 
    mediump_umat2x4
    typedef detail::tmat3x3
    -< mediump_uint > 
    mediump_umat3
    typedef detail::tmat3x2
    -< mediump_uint > 
    mediump_umat3x2
    typedef detail::tmat3x3
    -< mediump_uint > 
    mediump_umat3x3
    typedef detail::tmat3x4
    -< mediump_uint > 
    mediump_umat3x4
    typedef detail::tmat4x4
    -< mediump_uint > 
    mediump_umat4
    typedef detail::tmat4x2
    -< mediump_uint > 
    mediump_umat4x2
    typedef detail::tmat4x3
    -< mediump_uint > 
    mediump_umat4x3
    typedef detail::tmat4x4
    -< mediump_uint > 
    mediump_umat4x4
    typedef mediump_umat2 umat2
    typedef mediump_umat2x2 umat2x2
    typedef mediump_umat2x3 umat2x3
    typedef mediump_umat2x4 umat2x4
    typedef mediump_umat3 umat3
    typedef mediump_umat3x2 umat3x2
    typedef mediump_umat3x3 umat3x3
    typedef mediump_umat3x4 umat3x4
    typedef mediump_umat4 umat4
    typedef mediump_umat4x2 umat4x2
    typedef mediump_umat4x3 umat4x3
    typedef mediump_umat4x4 umat4x4
    typedef detail::tmat2x2
    +< highp_int > 
    highp_imat2
     
    typedef detail::tmat2x2
    +< highp_int > 
    highp_imat2x2
     
    typedef detail::tmat2x3
    +< highp_int > 
    highp_imat2x3
     
    typedef detail::tmat2x4
    +< highp_int > 
    highp_imat2x4
     
    typedef detail::tmat3x3
    +< highp_int > 
    highp_imat3
     
    typedef detail::tmat3x2
    +< highp_int > 
    highp_imat3x2
     
    typedef detail::tmat3x3
    +< highp_int > 
    highp_imat3x3
     
    typedef detail::tmat3x4
    +< highp_int > 
    highp_imat3x4
     
    typedef detail::tmat4x4
    +< highp_int > 
    highp_imat4
     
    typedef detail::tmat4x2
    +< highp_int > 
    highp_imat4x2
     
    typedef detail::tmat4x3
    +< highp_int > 
    highp_imat4x3
     
    typedef detail::tmat4x4
    +< highp_int > 
    highp_imat4x4
     
    typedef detail::tmat2x2
    +< highp_uint > 
    highp_umat2
     
    typedef detail::tmat2x2
    +< highp_uint > 
    highp_umat2x2
     
    typedef detail::tmat2x3
    +< highp_uint > 
    highp_umat2x3
     
    typedef detail::tmat2x4
    +< highp_uint > 
    highp_umat2x4
     
    typedef detail::tmat3x3
    +< highp_uint > 
    highp_umat3
     
    typedef detail::tmat3x2
    +< highp_uint > 
    highp_umat3x2
     
    typedef detail::tmat3x3
    +< highp_uint > 
    highp_umat3x3
     
    typedef detail::tmat3x4
    +< highp_uint > 
    highp_umat3x4
     
    typedef detail::tmat4x4
    +< highp_uint > 
    highp_umat4
     
    typedef detail::tmat4x2
    +< highp_uint > 
    highp_umat4x2
     
    typedef detail::tmat4x3
    +< highp_uint > 
    highp_umat4x3
     
    typedef detail::tmat4x4
    +< highp_uint > 
    highp_umat4x4
     
    typedef mediump_imat2 imat2
     
    typedef mediump_imat2x2 imat2x2
     
    typedef mediump_imat2x3 imat2x3
     
    typedef mediump_imat2x4 imat2x4
     
    typedef mediump_imat3 imat3
     
    typedef mediump_imat3x2 imat3x2
     
    typedef mediump_imat3x3 imat3x3
     
    typedef mediump_imat3x4 imat3x4
     
    typedef mediump_imat4 imat4
     
    typedef mediump_imat4x2 imat4x2
     
    typedef mediump_imat4x3 imat4x3
     
    typedef mediump_imat4x4 imat4x4
     
    typedef detail::tmat2x2< lowp_int > lowp_imat2
     
    typedef detail::tmat2x2< lowp_int > lowp_imat2x2
     
    typedef detail::tmat2x3< lowp_int > lowp_imat2x3
     
    typedef detail::tmat2x4< lowp_int > lowp_imat2x4
     
    typedef detail::tmat3x3< lowp_int > lowp_imat3
     
    typedef detail::tmat3x2< lowp_int > lowp_imat3x2
     
    typedef detail::tmat3x3< lowp_int > lowp_imat3x3
     
    typedef detail::tmat3x4< lowp_int > lowp_imat3x4
     
    typedef detail::tmat4x4< lowp_int > lowp_imat4
     
    typedef detail::tmat4x2< lowp_int > lowp_imat4x2
     
    typedef detail::tmat4x3< lowp_int > lowp_imat4x3
     
    typedef detail::tmat4x4< lowp_int > lowp_imat4x4
     
    typedef detail::tmat2x2
    +< lowp_uint > 
    lowp_umat2
     
    typedef detail::tmat2x2
    +< lowp_uint > 
    lowp_umat2x2
     
    typedef detail::tmat2x3
    +< lowp_uint > 
    lowp_umat2x3
     
    typedef detail::tmat2x4
    +< lowp_uint > 
    lowp_umat2x4
     
    typedef detail::tmat3x3
    +< lowp_uint > 
    lowp_umat3
     
    typedef detail::tmat3x2
    +< lowp_uint > 
    lowp_umat3x2
     
    typedef detail::tmat3x3
    +< lowp_uint > 
    lowp_umat3x3
     
    typedef detail::tmat3x4
    +< lowp_uint > 
    lowp_umat3x4
     
    typedef detail::tmat4x4
    +< lowp_uint > 
    lowp_umat4
     
    typedef detail::tmat4x2
    +< lowp_uint > 
    lowp_umat4x2
     
    typedef detail::tmat4x3
    +< lowp_uint > 
    lowp_umat4x3
     
    typedef detail::tmat4x4
    +< lowp_uint > 
    lowp_umat4x4
     
    typedef detail::tmat2x2
    +< mediump_int > 
    mediump_imat2
     
    typedef detail::tmat2x2
    +< mediump_int > 
    mediump_imat2x2
     
    typedef detail::tmat2x3
    +< mediump_int > 
    mediump_imat2x3
     
    typedef detail::tmat2x4
    +< mediump_int > 
    mediump_imat2x4
     
    typedef detail::tmat3x3
    +< mediump_int > 
    mediump_imat3
     
    typedef detail::tmat3x2
    +< mediump_int > 
    mediump_imat3x2
     
    typedef detail::tmat3x3
    +< mediump_int > 
    mediump_imat3x3
     
    typedef detail::tmat3x4
    +< mediump_int > 
    mediump_imat3x4
     
    typedef detail::tmat4x4
    +< mediump_int > 
    mediump_imat4
     
    typedef detail::tmat4x2
    +< mediump_int > 
    mediump_imat4x2
     
    typedef detail::tmat4x3
    +< mediump_int > 
    mediump_imat4x3
     
    typedef detail::tmat4x4
    +< mediump_int > 
    mediump_imat4x4
     
    typedef detail::tmat2x2
    +< mediump_uint > 
    mediump_umat2
     
    typedef detail::tmat2x2
    +< mediump_uint > 
    mediump_umat2x2
     
    typedef detail::tmat2x3
    +< mediump_uint > 
    mediump_umat2x3
     
    typedef detail::tmat2x4
    +< mediump_uint > 
    mediump_umat2x4
     
    typedef detail::tmat3x3
    +< mediump_uint > 
    mediump_umat3
     
    typedef detail::tmat3x2
    +< mediump_uint > 
    mediump_umat3x2
     
    typedef detail::tmat3x3
    +< mediump_uint > 
    mediump_umat3x3
     
    typedef detail::tmat3x4
    +< mediump_uint > 
    mediump_umat3x4
     
    typedef detail::tmat4x4
    +< mediump_uint > 
    mediump_umat4
     
    typedef detail::tmat4x2
    +< mediump_uint > 
    mediump_umat4x2
     
    typedef detail::tmat4x3
    +< mediump_uint > 
    mediump_umat4x3
     
    typedef detail::tmat4x4
    +< mediump_uint > 
    mediump_umat4x4
     
    typedef mediump_umat2 umat2
     
    typedef mediump_umat2x2 umat2x2
     
    typedef mediump_umat2x3 umat2x3
     
    typedef mediump_umat2x4 umat2x4
     
    typedef mediump_umat3 umat3
     
    typedef mediump_umat3x2 umat3x2
     
    typedef mediump_umat3x3 umat3x3
     
    typedef mediump_umat3x4 umat3x4
     
    typedef mediump_umat4 umat4
     
    typedef mediump_umat4x2 umat4x2
     
    typedef mediump_umat4x3 umat4x3
     
    typedef mediump_umat4x4 umat4x4
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_matrix_integer: Integer matrix types

    -
    Date:
    2011-01-20 / 2011-06-05
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_matrix_integer

    +
    Date
    2011-01-20 / 2011-06-05
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file matrix_integer.hpp.

    -
    - - + + - diff --git a/doc/api/a00054_source.html b/doc/api/a00054_source.html index 45d33e06..f1807339 100644 --- a/doc/api/a00054_source.html +++ b/doc/api/a00054_source.html @@ -2,42 +2,31 @@ - + matrix_integer.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,331 +35,333 @@
  • File List
  • + +
    matrix_integer.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 #ifndef GLM_GTC_matrix_integer
    -00038 #define GLM_GTC_matrix_integer GLM_VERSION
    -00039 
    -00040 // Dependency:
    -00041 #include "../glm.hpp"
    -00042 
    -00043 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00044 #       pragma message("GLM: GLM_GTC_matrix_integer extension included")
    -00045 #endif
    -00046 
    -00047 namespace glm
    -00048 {
    -00051 
    -00054         typedef detail::tmat2x2<highp_int>                              highp_imat2;    
    -00055 
    -00058         typedef detail::tmat3x3<highp_int>                              highp_imat3;
    -00059 
    -00062         typedef detail::tmat4x4<highp_int>                              highp_imat4;
    -00063 
    -00066         typedef detail::tmat2x2<highp_int>                              highp_imat2x2;
    -00067 
    -00070         typedef detail::tmat2x3<highp_int>                              highp_imat2x3;
    -00071 
    -00074         typedef detail::tmat2x4<highp_int>                              highp_imat2x4;
    -00075 
    -00078         typedef detail::tmat3x2<highp_int>                              highp_imat3x2;
    -00079 
    -00082         typedef detail::tmat3x3<highp_int>                              highp_imat3x3;
    -00083 
    -00086         typedef detail::tmat3x4<highp_int>                              highp_imat3x4;
    -00087 
    -00090         typedef detail::tmat4x2<highp_int>                              highp_imat4x2;
    -00091 
    -00094         typedef detail::tmat4x3<highp_int>                              highp_imat4x3;
    -00095 
    -00098         typedef detail::tmat4x4<highp_int>                              highp_imat4x4;
    -00099 
    -00100 
    -00103         typedef detail::tmat2x2<mediump_int>                    mediump_imat2;
    -00104 
    -00107         typedef detail::tmat3x3<mediump_int>                    mediump_imat3;
    -00108 
    -00111         typedef detail::tmat4x4<mediump_int>                    mediump_imat4;
    -00112 
    -00113 
    -00116         typedef detail::tmat2x2<mediump_int>                    mediump_imat2x2;
    -00117 
    -00120         typedef detail::tmat2x3<mediump_int>                    mediump_imat2x3;
    -00121 
    -00124         typedef detail::tmat2x4<mediump_int>                    mediump_imat2x4;
    -00125 
    -00128         typedef detail::tmat3x2<mediump_int>                    mediump_imat3x2;
    -00129 
    -00132         typedef detail::tmat3x3<mediump_int>                    mediump_imat3x3;
    -00133 
    -00136         typedef detail::tmat3x4<mediump_int>                    mediump_imat3x4;
    -00137 
    -00140         typedef detail::tmat4x2<mediump_int>                    mediump_imat4x2;
    -00141 
    -00144         typedef detail::tmat4x3<mediump_int>                    mediump_imat4x3;
    -00145 
    -00148         typedef detail::tmat4x4<mediump_int>                    mediump_imat4x4;
    -00149 
    -00150 
    -00153         typedef detail::tmat2x2<lowp_int>                               lowp_imat2;
    -00154         
    -00157         typedef detail::tmat3x3<lowp_int>                               lowp_imat3;
    -00158 
    -00161         typedef detail::tmat4x4<lowp_int>                               lowp_imat4;
    -00162 
    -00163 
    -00166         typedef detail::tmat2x2<lowp_int>                               lowp_imat2x2;
    -00167 
    -00170         typedef detail::tmat2x3<lowp_int>                               lowp_imat2x3;
    -00171 
    -00174         typedef detail::tmat2x4<lowp_int>                               lowp_imat2x4;
    -00175 
    -00178         typedef detail::tmat3x2<lowp_int>                               lowp_imat3x2;
    -00179 
    -00182         typedef detail::tmat3x3<lowp_int>                               lowp_imat3x3;
    -00183 
    -00186         typedef detail::tmat3x4<lowp_int>                               lowp_imat3x4;
    -00187 
    -00190         typedef detail::tmat4x2<lowp_int>                               lowp_imat4x2;
    -00191 
    -00194         typedef detail::tmat4x3<lowp_int>                               lowp_imat4x3;
    -00195 
    -00198         typedef detail::tmat4x4<lowp_int>                               lowp_imat4x4;
    -00199 
    -00200 
    -00203         typedef detail::tmat2x2<highp_uint>                             highp_umat2;    
    -00204 
    -00207         typedef detail::tmat3x3<highp_uint>                             highp_umat3;
    -00208 
    -00211         typedef detail::tmat4x4<highp_uint>                             highp_umat4;
    -00212 
    -00215         typedef detail::tmat2x2<highp_uint>                             highp_umat2x2;
    -00216 
    -00219         typedef detail::tmat2x3<highp_uint>                             highp_umat2x3;
    -00220 
    -00223         typedef detail::tmat2x4<highp_uint>                             highp_umat2x4;
    -00224 
    -00227         typedef detail::tmat3x2<highp_uint>                             highp_umat3x2;
    -00228 
    -00231         typedef detail::tmat3x3<highp_uint>                             highp_umat3x3;
    -00232 
    -00235         typedef detail::tmat3x4<highp_uint>                             highp_umat3x4;
    -00236 
    -00239         typedef detail::tmat4x2<highp_uint>                             highp_umat4x2;
    -00240 
    -00243         typedef detail::tmat4x3<highp_uint>                             highp_umat4x3;
    -00244 
    -00247         typedef detail::tmat4x4<highp_uint>                             highp_umat4x4;
    -00248 
    -00249 
    -00252         typedef detail::tmat2x2<mediump_uint>                   mediump_umat2;
    -00253 
    -00256         typedef detail::tmat3x3<mediump_uint>                   mediump_umat3;
    -00257 
    -00260         typedef detail::tmat4x4<mediump_uint>                   mediump_umat4;
    -00261 
    -00262 
    -00265         typedef detail::tmat2x2<mediump_uint>                   mediump_umat2x2;
    -00266 
    -00269         typedef detail::tmat2x3<mediump_uint>                   mediump_umat2x3;
    -00270 
    -00273         typedef detail::tmat2x4<mediump_uint>                   mediump_umat2x4;
    -00274 
    -00277         typedef detail::tmat3x2<mediump_uint>                   mediump_umat3x2;
    -00278 
    -00281         typedef detail::tmat3x3<mediump_uint>                   mediump_umat3x3;
    -00282 
    -00285         typedef detail::tmat3x4<mediump_uint>                   mediump_umat3x4;
    -00286 
    -00289         typedef detail::tmat4x2<mediump_uint>                   mediump_umat4x2;
    -00290 
    -00293         typedef detail::tmat4x3<mediump_uint>                   mediump_umat4x3;
    -00294 
    -00297         typedef detail::tmat4x4<mediump_uint>                   mediump_umat4x4;
    -00298 
    -00299 
    -00302         typedef detail::tmat2x2<lowp_uint>                              lowp_umat2;
    -00303         
    -00306         typedef detail::tmat3x3<lowp_uint>                              lowp_umat3;
    -00307 
    -00310         typedef detail::tmat4x4<lowp_uint>                              lowp_umat4;
    -00311 
    -00312 
    -00315         typedef detail::tmat2x2<lowp_uint>                              lowp_umat2x2;
    -00316 
    -00319         typedef detail::tmat2x3<lowp_uint>                              lowp_umat2x3;
    -00320 
    -00323         typedef detail::tmat2x4<lowp_uint>                              lowp_umat2x4;
    -00324 
    -00327         typedef detail::tmat3x2<lowp_uint>                              lowp_umat3x2;
    -00328 
    -00331         typedef detail::tmat3x3<lowp_uint>                              lowp_umat3x3;
    -00332 
    -00335         typedef detail::tmat3x4<lowp_uint>                              lowp_umat3x4;
    -00336 
    -00339         typedef detail::tmat4x2<lowp_uint>                              lowp_umat4x2;
    -00340 
    -00343         typedef detail::tmat4x3<lowp_uint>                              lowp_umat4x3;
    -00344 
    -00347         typedef detail::tmat4x4<lowp_uint>                              lowp_umat4x4;
    -00348 
    -00349 #if(defined(GLM_PRECISION_HIGHP_INT))
    -00350         typedef highp_imat2                                                             imat2;
    -00351         typedef highp_imat3                                                             imat3;
    -00352         typedef highp_imat4                                                             imat4;
    -00353         typedef highp_imat2x2                                                   imat2x2;
    -00354         typedef highp_imat2x3                                                   imat2x3;
    -00355         typedef highp_imat2x4                                                   imat2x4;
    -00356         typedef highp_imat3x2                                                   imat3x2;
    -00357         typedef highp_imat3x3                                                   imat3x3;
    -00358         typedef highp_imat3x4                                                   imat3x4;
    -00359         typedef highp_imat4x2                                                   imat4x2;
    -00360         typedef highp_imat4x3                                                   imat4x3;
    -00361         typedef highp_imat4x4                                                   imat4x4;
    -00362 #elif(defined(GLM_PRECISION_LOWP_INT))
    -00363         typedef lowp_imat2                                                              imat2;
    -00364         typedef lowp_imat3                                                              imat3;
    -00365         typedef lowp_imat4                                                              imat4;
    -00366         typedef lowp_imat2x2                                                    imat2x2;
    -00367         typedef lowp_imat2x3                                                    imat2x3;
    -00368         typedef lowp_imat2x4                                                    imat2x4;
    -00369         typedef lowp_imat3x2                                                    imat3x2;
    -00370         typedef lowp_imat3x3                                                    imat3x3;
    -00371         typedef lowp_imat3x4                                                    imat3x4;
    -00372         typedef lowp_imat4x2                                                    imat4x2;
    -00373         typedef lowp_imat4x3                                                    imat4x3;
    -00374         typedef lowp_imat4x4                                                    imat4x4;
    -00375 #else //if(defined(GLM_PRECISION_MEDIUMP_INT))
    -00376 
    -00379         typedef mediump_imat2                                                   imat2;
    -00380 
    -00383         typedef mediump_imat3                                                   imat3;
    -00384 
    -00387         typedef mediump_imat4                                                   imat4;
    -00388 
    -00391         typedef mediump_imat2x2                                                 imat2x2;
    -00392 
    -00395         typedef mediump_imat2x3                                                 imat2x3;
    -00396 
    -00399         typedef mediump_imat2x4                                                 imat2x4;
    -00400 
    -00403         typedef mediump_imat3x2                                                 imat3x2;
    -00404 
    -00407         typedef mediump_imat3x3                                                 imat3x3;
    -00408 
    -00411         typedef mediump_imat3x4                                                 imat3x4;
    -00412 
    -00415         typedef mediump_imat4x2                                                 imat4x2;
    -00416 
    -00419         typedef mediump_imat4x3                                                 imat4x3;
    -00420 
    -00423         typedef mediump_imat4x4                                                 imat4x4;
    -00424 #endif//GLM_PRECISION
    -00425 
    -00426 #if(defined(GLM_PRECISION_HIGHP_UINT))
    -00427         typedef highp_umat2                                                             umat2;
    -00428         typedef highp_umat3                                                             umat3;
    -00429         typedef highp_umat4                                                             umat4;
    -00430         typedef highp_umat2x2                                                   umat2x2;
    -00431         typedef highp_umat2x3                                                   umat2x3;
    -00432         typedef highp_umat2x4                                                   umat2x4;
    -00433         typedef highp_umat3x2                                                   umat3x2;
    -00434         typedef highp_umat3x3                                                   umat3x3;
    -00435         typedef highp_umat3x4                                                   umat3x4;
    -00436         typedef highp_umat4x2                                                   umat4x2;
    -00437         typedef highp_umat4x3                                                   umat4x3;
    -00438         typedef highp_umat4x4                                                   umat4x4;
    -00439 #elif(defined(GLM_PRECISION_LOWP_UINT))
    -00440         typedef lowp_umat2                                                              umat2;
    -00441         typedef lowp_umat3                                                              umat3;
    -00442         typedef lowp_umat4                                                              umat4;
    -00443         typedef lowp_umat2x2                                                    umat2x2;
    -00444         typedef lowp_umat2x3                                                    umat2x3;
    -00445         typedef lowp_umat2x4                                                    umat2x4;
    -00446         typedef lowp_umat3x2                                                    umat3x2;
    -00447         typedef lowp_umat3x3                                                    umat3x3;
    -00448         typedef lowp_umat3x4                                                    umat3x4;
    -00449         typedef lowp_umat4x2                                                    umat4x2;
    -00450         typedef lowp_umat4x3                                                    umat4x3;
    -00451         typedef lowp_umat4x4                                                    umat4x4;
    -00452 #else //if(defined(GLM_PRECISION_MEDIUMP_UINT))
    -00453         
    -00456         typedef mediump_umat2                                                   umat2;
    -00457 
    -00460         typedef mediump_umat3                                                   umat3;
    -00461 
    -00464         typedef mediump_umat4                                                   umat4;
    -00465 
    -00468         typedef mediump_umat2x2                                                 umat2x2;
    -00469 
    -00472         typedef mediump_umat2x3                                                 umat2x3;
    -00473 
    -00476         typedef mediump_umat2x4                                                 umat2x4;
    -00477 
    -00480         typedef mediump_umat3x2                                                 umat3x2;
    -00481 
    -00484         typedef mediump_umat3x3                                                 umat3x3;
    -00485 
    -00488         typedef mediump_umat3x4                                                 umat3x4;
    -00489 
    -00492         typedef mediump_umat4x2                                                 umat4x2;
    -00493 
    -00496         typedef mediump_umat4x3                                                 umat4x3;
    -00497 
    -00500         typedef mediump_umat4x4                                                 umat4x4;
    -00501 #endif//GLM_PRECISION
    -00502 
    -00504 }//namespace glm
    -00505 
    -00506 #endif//GLM_GTC_matrix_integer
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 #ifndef GLM_GTC_matrix_integer
    +
    38 #define GLM_GTC_matrix_integer GLM_VERSION
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    44 # pragma message("GLM: GLM_GTC_matrix_integer extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  typedef detail::tmat2x2<highp_int> highp_imat2;
    +
    55 
    +
    58  typedef detail::tmat3x3<highp_int> highp_imat3;
    +
    59 
    +
    62  typedef detail::tmat4x4<highp_int> highp_imat4;
    +
    63 
    +
    66  typedef detail::tmat2x2<highp_int> highp_imat2x2;
    +
    67 
    +
    70  typedef detail::tmat2x3<highp_int> highp_imat2x3;
    +
    71 
    +
    74  typedef detail::tmat2x4<highp_int> highp_imat2x4;
    +
    75 
    +
    78  typedef detail::tmat3x2<highp_int> highp_imat3x2;
    +
    79 
    +
    82  typedef detail::tmat3x3<highp_int> highp_imat3x3;
    +
    83 
    +
    86  typedef detail::tmat3x4<highp_int> highp_imat3x4;
    +
    87 
    +
    90  typedef detail::tmat4x2<highp_int> highp_imat4x2;
    +
    91 
    +
    94  typedef detail::tmat4x3<highp_int> highp_imat4x3;
    +
    95 
    +
    98  typedef detail::tmat4x4<highp_int> highp_imat4x4;
    +
    99 
    +
    100 
    +
    103  typedef detail::tmat2x2<mediump_int> mediump_imat2;
    +
    104 
    +
    107  typedef detail::tmat3x3<mediump_int> mediump_imat3;
    +
    108 
    +
    111  typedef detail::tmat4x4<mediump_int> mediump_imat4;
    +
    112 
    +
    113 
    +
    116  typedef detail::tmat2x2<mediump_int> mediump_imat2x2;
    +
    117 
    +
    120  typedef detail::tmat2x3<mediump_int> mediump_imat2x3;
    +
    121 
    +
    124  typedef detail::tmat2x4<mediump_int> mediump_imat2x4;
    +
    125 
    +
    128  typedef detail::tmat3x2<mediump_int> mediump_imat3x2;
    +
    129 
    +
    132  typedef detail::tmat3x3<mediump_int> mediump_imat3x3;
    +
    133 
    +
    136  typedef detail::tmat3x4<mediump_int> mediump_imat3x4;
    +
    137 
    +
    140  typedef detail::tmat4x2<mediump_int> mediump_imat4x2;
    +
    141 
    +
    144  typedef detail::tmat4x3<mediump_int> mediump_imat4x3;
    +
    145 
    +
    148  typedef detail::tmat4x4<mediump_int> mediump_imat4x4;
    +
    149 
    +
    150 
    +
    153  typedef detail::tmat2x2<lowp_int> lowp_imat2;
    +
    154 
    +
    157  typedef detail::tmat3x3<lowp_int> lowp_imat3;
    +
    158 
    +
    161  typedef detail::tmat4x4<lowp_int> lowp_imat4;
    +
    162 
    +
    163 
    +
    166  typedef detail::tmat2x2<lowp_int> lowp_imat2x2;
    +
    167 
    +
    170  typedef detail::tmat2x3<lowp_int> lowp_imat2x3;
    +
    171 
    +
    174  typedef detail::tmat2x4<lowp_int> lowp_imat2x4;
    +
    175 
    +
    178  typedef detail::tmat3x2<lowp_int> lowp_imat3x2;
    +
    179 
    +
    182  typedef detail::tmat3x3<lowp_int> lowp_imat3x3;
    +
    183 
    +
    186  typedef detail::tmat3x4<lowp_int> lowp_imat3x4;
    +
    187 
    +
    190  typedef detail::tmat4x2<lowp_int> lowp_imat4x2;
    +
    191 
    +
    194  typedef detail::tmat4x3<lowp_int> lowp_imat4x3;
    +
    195 
    +
    198  typedef detail::tmat4x4<lowp_int> lowp_imat4x4;
    +
    199 
    +
    200 
    +
    203  typedef detail::tmat2x2<highp_uint> highp_umat2;
    +
    204 
    +
    207  typedef detail::tmat3x3<highp_uint> highp_umat3;
    +
    208 
    +
    211  typedef detail::tmat4x4<highp_uint> highp_umat4;
    +
    212 
    +
    215  typedef detail::tmat2x2<highp_uint> highp_umat2x2;
    +
    216 
    +
    219  typedef detail::tmat2x3<highp_uint> highp_umat2x3;
    +
    220 
    +
    223  typedef detail::tmat2x4<highp_uint> highp_umat2x4;
    +
    224 
    +
    227  typedef detail::tmat3x2<highp_uint> highp_umat3x2;
    +
    228 
    +
    231  typedef detail::tmat3x3<highp_uint> highp_umat3x3;
    +
    232 
    +
    235  typedef detail::tmat3x4<highp_uint> highp_umat3x4;
    +
    236 
    +
    239  typedef detail::tmat4x2<highp_uint> highp_umat4x2;
    +
    240 
    +
    243  typedef detail::tmat4x3<highp_uint> highp_umat4x3;
    +
    244 
    +
    247  typedef detail::tmat4x4<highp_uint> highp_umat4x4;
    +
    248 
    +
    249 
    +
    252  typedef detail::tmat2x2<mediump_uint> mediump_umat2;
    +
    253 
    +
    256  typedef detail::tmat3x3<mediump_uint> mediump_umat3;
    +
    257 
    +
    260  typedef detail::tmat4x4<mediump_uint> mediump_umat4;
    +
    261 
    +
    262 
    +
    265  typedef detail::tmat2x2<mediump_uint> mediump_umat2x2;
    +
    266 
    +
    269  typedef detail::tmat2x3<mediump_uint> mediump_umat2x3;
    +
    270 
    +
    273  typedef detail::tmat2x4<mediump_uint> mediump_umat2x4;
    +
    274 
    +
    277  typedef detail::tmat3x2<mediump_uint> mediump_umat3x2;
    +
    278 
    +
    281  typedef detail::tmat3x3<mediump_uint> mediump_umat3x3;
    +
    282 
    +
    285  typedef detail::tmat3x4<mediump_uint> mediump_umat3x4;
    +
    286 
    +
    289  typedef detail::tmat4x2<mediump_uint> mediump_umat4x2;
    +
    290 
    +
    293  typedef detail::tmat4x3<mediump_uint> mediump_umat4x3;
    +
    294 
    +
    297  typedef detail::tmat4x4<mediump_uint> mediump_umat4x4;
    +
    298 
    +
    299 
    +
    302  typedef detail::tmat2x2<lowp_uint> lowp_umat2;
    +
    303 
    +
    306  typedef detail::tmat3x3<lowp_uint> lowp_umat3;
    +
    307 
    +
    310  typedef detail::tmat4x4<lowp_uint> lowp_umat4;
    +
    311 
    +
    312 
    +
    315  typedef detail::tmat2x2<lowp_uint> lowp_umat2x2;
    +
    316 
    +
    319  typedef detail::tmat2x3<lowp_uint> lowp_umat2x3;
    +
    320 
    +
    323  typedef detail::tmat2x4<lowp_uint> lowp_umat2x4;
    +
    324 
    +
    327  typedef detail::tmat3x2<lowp_uint> lowp_umat3x2;
    +
    328 
    +
    331  typedef detail::tmat3x3<lowp_uint> lowp_umat3x3;
    +
    332 
    +
    335  typedef detail::tmat3x4<lowp_uint> lowp_umat3x4;
    +
    336 
    +
    339  typedef detail::tmat4x2<lowp_uint> lowp_umat4x2;
    +
    340 
    +
    343  typedef detail::tmat4x3<lowp_uint> lowp_umat4x3;
    +
    344 
    +
    347  typedef detail::tmat4x4<lowp_uint> lowp_umat4x4;
    +
    348 
    +
    349 #if(defined(GLM_PRECISION_HIGHP_INT))
    +
    350  typedef highp_imat2 imat2;
    +
    351  typedef highp_imat3 imat3;
    +
    352  typedef highp_imat4 imat4;
    +
    353  typedef highp_imat2x2 imat2x2;
    +
    354  typedef highp_imat2x3 imat2x3;
    +
    355  typedef highp_imat2x4 imat2x4;
    +
    356  typedef highp_imat3x2 imat3x2;
    +
    357  typedef highp_imat3x3 imat3x3;
    +
    358  typedef highp_imat3x4 imat3x4;
    +
    359  typedef highp_imat4x2 imat4x2;
    +
    360  typedef highp_imat4x3 imat4x3;
    +
    361  typedef highp_imat4x4 imat4x4;
    +
    362 #elif(defined(GLM_PRECISION_LOWP_INT))
    +
    363  typedef lowp_imat2 imat2;
    +
    364  typedef lowp_imat3 imat3;
    +
    365  typedef lowp_imat4 imat4;
    +
    366  typedef lowp_imat2x2 imat2x2;
    +
    367  typedef lowp_imat2x3 imat2x3;
    +
    368  typedef lowp_imat2x4 imat2x4;
    +
    369  typedef lowp_imat3x2 imat3x2;
    +
    370  typedef lowp_imat3x3 imat3x3;
    +
    371  typedef lowp_imat3x4 imat3x4;
    +
    372  typedef lowp_imat4x2 imat4x2;
    +
    373  typedef lowp_imat4x3 imat4x3;
    +
    374  typedef lowp_imat4x4 imat4x4;
    +
    375 #else //if(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    376 
    + +
    380 
    + +
    384 
    + +
    388 
    + +
    392 
    + +
    396 
    + +
    400 
    + +
    404 
    + +
    408 
    + +
    412 
    + +
    416 
    + +
    420 
    + +
    424 #endif//GLM_PRECISION
    +
    425 
    +
    426 #if(defined(GLM_PRECISION_HIGHP_UINT))
    +
    427  typedef highp_umat2 umat2;
    +
    428  typedef highp_umat3 umat3;
    +
    429  typedef highp_umat4 umat4;
    +
    430  typedef highp_umat2x2 umat2x2;
    +
    431  typedef highp_umat2x3 umat2x3;
    +
    432  typedef highp_umat2x4 umat2x4;
    +
    433  typedef highp_umat3x2 umat3x2;
    +
    434  typedef highp_umat3x3 umat3x3;
    +
    435  typedef highp_umat3x4 umat3x4;
    +
    436  typedef highp_umat4x2 umat4x2;
    +
    437  typedef highp_umat4x3 umat4x3;
    +
    438  typedef highp_umat4x4 umat4x4;
    +
    439 #elif(defined(GLM_PRECISION_LOWP_UINT))
    +
    440  typedef lowp_umat2 umat2;
    +
    441  typedef lowp_umat3 umat3;
    +
    442  typedef lowp_umat4 umat4;
    +
    443  typedef lowp_umat2x2 umat2x2;
    +
    444  typedef lowp_umat2x3 umat2x3;
    +
    445  typedef lowp_umat2x4 umat2x4;
    +
    446  typedef lowp_umat3x2 umat3x2;
    +
    447  typedef lowp_umat3x3 umat3x3;
    +
    448  typedef lowp_umat3x4 umat3x4;
    +
    449  typedef lowp_umat4x2 umat4x2;
    +
    450  typedef lowp_umat4x3 umat4x3;
    +
    451  typedef lowp_umat4x4 umat4x4;
    +
    452 #else //if(defined(GLM_PRECISION_MEDIUMP_UINT))
    +
    453 
    + +
    457 
    + +
    461 
    + +
    465 
    + +
    469 
    + +
    473 
    + +
    477 
    + +
    481 
    + +
    485 
    + +
    489 
    + +
    493 
    + +
    497 
    + +
    501 #endif//GLM_PRECISION
    +
    502 
    +
    504 }//namespace glm
    +
    505 
    +
    506 #endif//GLM_GTC_matrix_integer
    +
    + - diff --git a/doc/api/a00055.html b/doc/api/a00055.html index 4a950f3c..300baec4 100644 --- a/doc/api/a00055.html +++ b/doc/api/a00055.html @@ -2,42 +2,31 @@ - + matrix_interpolation.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,53 @@
  • File List
  • + +
    matrix_interpolation.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    void axisAngle (detail::tmat4x4< T > const &mat, detail::tvec3< T > &axis, T &angle)
    template<typename T >
    detail::tmat4x4< T > axisAngleMatrix (detail::tvec3< T > const &axis, T const angle)
    template<typename T >
    detail::tmat4x4< T > interpolate (detail::tmat4x4< T > const &m1, detail::tmat4x4< T > const &m2, T const delta)
    template<typename T >
    void axisAngle (detail::tmat4x4< T > const &mat, detail::tvec3< T > &axis, T &angle)
     
    template<typename T >
    detail::tmat4x4< T > axisAngleMatrix (detail::tvec3< T > const &axis, T const angle)
     
    template<typename T >
    detail::tmat4x4< T > extractMatrixRotation (detail::tmat4x4< T > const &mat)
     
    template<typename T >
    detail::tmat4x4< T > interpolate (detail::tmat4x4< T > const &m1, detail::tmat4x4< T > const &m2, T const delta)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_interpolation: Rotation and translation matrix interpolation

    -
    Date:
    2011-03-05 / 2011-06-07
    -
    Author:
    Ghenadii Ursachi (the.asteroth@gmail.com)
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_matrix_interpolation

    +
    Date
    2011-03-05 / 2011-06-07
    +
    Author
    Ghenadii Ursachi (the.a.nosp@m.ster.nosp@m.oth@g.nosp@m.mail.nosp@m..com)
    +
    See Also
    GLM Core (dependence)

    Definition in file matrix_interpolation.hpp.

    -
    - - + + - diff --git a/doc/api/a00055_source.html b/doc/api/a00055_source.html index da02608a..35a281ad 100644 --- a/doc/api/a00055_source.html +++ b/doc/api/a00055_source.html @@ -2,42 +2,31 @@ - + matrix_interpolation.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,92 +35,98 @@
  • File List
  • + +
    matrix_interpolation.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_matrix_interpolation
    -00039 #define GLM_GTX_matrix_interpolation GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 //#include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_matrix_interpolation extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename T>
    -00056     void axisAngle(
    -00057         detail::tmat4x4<T> const & mat,
    -00058         detail::tvec3<T> & axis,
    -00059         T & angle);
    -00060 
    -00063         template <typename T>
    -00064     detail::tmat4x4<T> axisAngleMatrix(
    -00065         detail::tvec3<T> const & axis,
    -00066         T const angle);
    -00067 
    -00071         template <typename T>
    -00072     detail::tmat4x4<T> interpolate(
    -00073         detail::tmat4x4<T> const & m1,
    -00074         detail::tmat4x4<T> const & m2,
    -00075         T const delta);
    -00076 
    -00078 }//namespace glm
    -00079 
    -00080 #include "matrix_interpolation.inl"
    -00081 
    -00082 #endif//GLM_GTX_matrix_interpolation
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_matrix_interpolation
    +
    39 #define GLM_GTX_matrix_interpolation GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 //#include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_matrix_interpolation extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T>
    +
    56  void axisAngle(
    +
    57  detail::tmat4x4<T> const & mat,
    +
    58  detail::tvec3<T> & axis,
    +
    59  T & angle);
    +
    60 
    +
    63  template <typename T>
    +
    64  detail::tmat4x4<T> axisAngleMatrix(
    +
    65  detail::tvec3<T> const & axis,
    +
    66  T const angle);
    +
    67 
    +
    70  template <typename T>
    +
    71  detail::tmat4x4<T> extractMatrixRotation(
    +
    72  detail::tmat4x4<T> const & mat);
    +
    73 
    +
    77  template <typename T>
    +
    78  detail::tmat4x4<T> interpolate(
    +
    79  detail::tmat4x4<T> const & m1,
    +
    80  detail::tmat4x4<T> const & m2,
    +
    81  T const delta);
    +
    82 
    +
    84 }//namespace glm
    +
    85 
    +
    86 #include "matrix_interpolation.inl"
    +
    87 
    +
    88 #endif//GLM_GTX_matrix_interpolation
    +
    + - diff --git a/doc/api/a00056.html b/doc/api/a00056.html index fe076e6c..1e063ec7 100644 --- a/doc/api/a00056.html +++ b/doc/api/a00056.html @@ -2,42 +2,31 @@ - + matrix_inverse.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,44 +35,48 @@
  • File List
  • + +
    matrix_inverse.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + +

    +

    Functions

    template<typename genType >
    genType affineInverse (genType const &m)
    template<typename genType >
    GLM_FUNC_QUALIFIER
    -genType::value_type 
    inverseTranspose (genType const &m)
    template<typename genType >
    genType affineInverse (genType const &m)
     
    template<typename genType >
    GLM_FUNC_QUALIFIER
    +genType::value_type 
    inverseTranspose (genType const &m)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_matrix_inverse: Additional matrix inverse function

    -
    Date:
    2005-12-21 / 2011-06-05
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_matrix_inverse

    +
    Date
    2005-12-21 / 2011-06-05
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file matrix_inverse.hpp.

    -
    - - + + - diff --git a/doc/api/a00056_source.html b/doc/api/a00056_source.html index 4ccd1e34..8fc7970d 100644 --- a/doc/api/a00056_source.html +++ b/doc/api/a00056_source.html @@ -2,42 +2,31 @@ - + matrix_inverse.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,81 +35,83 @@
  • File List
  • + +
    matrix_inverse.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 #ifndef GLM_GTC_matrix_inverse
    -00038 #define GLM_GTC_matrix_inverse GLM_VERSION
    -00039 
    -00040 // Dependency:
    -00041 #include "../glm.hpp"
    -00042 
    -00043 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00044 #       pragma message("GLM: GLM_GTC_matrix_inverse extension included")
    -00045 #endif
    -00046 
    -00047 namespace glm
    -00048 {
    -00051 
    -00057         template <typename genType> 
    -00058         genType affineInverse(genType const & m);
    -00059 
    -00065         template <typename genType> 
    -00066         GLM_FUNC_QUALIFIER typename genType::value_type inverseTranspose(
    -00067                 genType const & m);
    -00068 
    -00070 }//namespace glm
    -00071 
    -00072 #include "matrix_inverse.inl"
    -00073 
    -00074 #endif//GLM_GTC_matrix_inverse
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 #ifndef GLM_GTC_matrix_inverse
    +
    38 #define GLM_GTC_matrix_inverse GLM_VERSION
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    44 # pragma message("GLM: GLM_GTC_matrix_inverse extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    57  template <typename genType>
    +
    58  genType affineInverse(genType const & m);
    +
    59 
    +
    65  template <typename genType>
    +
    66  GLM_FUNC_QUALIFIER typename genType::value_type inverseTranspose(
    +
    67  genType const & m);
    +
    68 
    +
    70 }//namespace glm
    +
    71 
    +
    72 #include "matrix_inverse.inl"
    +
    73 
    +
    74 #endif//GLM_GTC_matrix_inverse
    +
    + - diff --git a/doc/api/a00057.html b/doc/api/a00057.html index 25f7fa5a..0c89ec71 100644 --- a/doc/api/a00057.html +++ b/doc/api/a00057.html @@ -2,42 +2,31 @@ - + matrix_major_storage.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,65 +35,79 @@
  • File List
  • + +
    matrix_major_storage.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat2x2< T > colMajor2 (detail::tvec2< T > const &v1, detail::tvec2< T > const &v2)
    template<typename T >
    detail::tmat2x2< T > colMajor2 (detail::tmat2x2< T > const &m)
    template<typename T >
    detail::tmat3x3< T > colMajor3 (detail::tvec3< T > const &v1, detail::tvec3< T > const &v2, detail::tvec3< T > const &v3)
    template<typename T >
    detail::tmat3x3< T > colMajor3 (detail::tmat3x3< T > const &m)
    template<typename T >
    detail::tmat4x4< T > colMajor4 (detail::tvec4< T > const &v1, detail::tvec4< T > const &v2, detail::tvec4< T > const &v3, detail::tvec4< T > const &v4)
    template<typename T >
    detail::tmat4x4< T > colMajor4 (detail::tmat4x4< T > const &m)
    template<typename T >
    detail::tmat2x2< T > rowMajor2 (detail::tvec2< T > const &v1, detail::tvec2< T > const &v2)
    template<typename T >
    detail::tmat2x2< T > rowMajor2 (detail::tmat2x2< T > const &m)
    template<typename T >
    detail::tmat3x3< T > rowMajor3 (detail::tvec3< T > const &v1, detail::tvec3< T > const &v2, detail::tvec3< T > const &v3)
    template<typename T >
    detail::tmat3x3< T > rowMajor3 (detail::tmat3x3< T > const &m)
    template<typename T >
    detail::tmat4x4< T > rowMajor4 (detail::tvec4< T > const &v1, detail::tvec4< T > const &v2, detail::tvec4< T > const &v3, detail::tvec4< T > const &v4)
    template<typename T >
    detail::tmat4x4< T > rowMajor4 (detail::tmat4x4< T > const &m)
    template<typename T >
    detail::tmat2x2< T > colMajor2 (detail::tvec2< T > const &v1, detail::tvec2< T > const &v2)
     
    template<typename T >
    detail::tmat2x2< T > colMajor2 (detail::tmat2x2< T > const &m)
     
    template<typename T >
    detail::tmat3x3< T > colMajor3 (detail::tvec3< T > const &v1, detail::tvec3< T > const &v2, detail::tvec3< T > const &v3)
     
    template<typename T >
    detail::tmat3x3< T > colMajor3 (detail::tmat3x3< T > const &m)
     
    template<typename T >
    detail::tmat4x4< T > colMajor4 (detail::tvec4< T > const &v1, detail::tvec4< T > const &v2, detail::tvec4< T > const &v3, detail::tvec4< T > const &v4)
     
    template<typename T >
    detail::tmat4x4< T > colMajor4 (detail::tmat4x4< T > const &m)
     
    template<typename T >
    detail::tmat2x2< T > rowMajor2 (detail::tvec2< T > const &v1, detail::tvec2< T > const &v2)
     
    template<typename T >
    detail::tmat2x2< T > rowMajor2 (detail::tmat2x2< T > const &m)
     
    template<typename T >
    detail::tmat3x3< T > rowMajor3 (detail::tvec3< T > const &v1, detail::tvec3< T > const &v2, detail::tvec3< T > const &v3)
     
    template<typename T >
    detail::tmat3x3< T > rowMajor3 (detail::tmat3x3< T > const &m)
     
    template<typename T >
    detail::tmat4x4< T > rowMajor4 (detail::tvec4< T > const &v1, detail::tvec4< T > const &v2, detail::tvec4< T > const &v3, detail::tvec4< T > const &v4)
     
    template<typename T >
    detail::tmat4x4< T > rowMajor4 (detail::tmat4x4< T > const &m)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_major_storage: Build matrix

    -
    Date:
    2006-04-19 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_matrix_major_storage

    +
    Date
    2006-04-19 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    +GLM_GTX_extented_min_max (dependence)

    Definition in file matrix_major_storage.hpp.

    -
    - - + + - diff --git a/doc/api/a00057_source.html b/doc/api/a00057_source.html index 77a85f7c..037e19a3 100644 --- a/doc/api/a00057_source.html +++ b/doc/api/a00057_source.html @@ -2,42 +2,31 @@ - + matrix_major_storage.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,136 +35,138 @@
  • File List
  • + +
    matrix_major_storage.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_matrix_major_storage
    -00040 #define GLM_GTX_matrix_major_storage GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_matrix_major_storage extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056         template <typename T> 
    -00057         detail::tmat2x2<T> rowMajor2(
    -00058                 detail::tvec2<T> const & v1, 
    -00059                 detail::tvec2<T> const & v2);
    -00060                 
    -00063         template <typename T> 
    -00064         detail::tmat2x2<T> rowMajor2(
    -00065                 detail::tmat2x2<T> const & m);
    -00066 
    -00069         template <typename T> 
    -00070         detail::tmat3x3<T> rowMajor3(
    -00071                 detail::tvec3<T> const & v1, 
    -00072                 detail::tvec3<T> const & v2, 
    -00073                 detail::tvec3<T> const & v3);
    -00074 
    -00077         template <typename T> 
    -00078         detail::tmat3x3<T> rowMajor3(
    -00079                 detail::tmat3x3<T> const & m);
    -00080 
    -00083         template <typename T> 
    -00084         detail::tmat4x4<T> rowMajor4(
    -00085                 detail::tvec4<T> const & v1, 
    -00086                 detail::tvec4<T> const & v2,
    -00087                 detail::tvec4<T> const & v3, 
    -00088                 detail::tvec4<T> const & v4);
    -00089 
    -00092         template <typename T> 
    -00093         detail::tmat4x4<T> rowMajor4(
    -00094                 detail::tmat4x4<T> const & m);
    -00095 
    -00098         template <typename T> 
    -00099         detail::tmat2x2<T> colMajor2(
    -00100                 detail::tvec2<T> const & v1, 
    -00101                 detail::tvec2<T> const & v2);
    -00102                 
    -00105         template <typename T> 
    -00106         detail::tmat2x2<T> colMajor2(
    -00107                 detail::tmat2x2<T> const & m);
    -00108 
    -00111         template <typename T> 
    -00112         detail::tmat3x3<T> colMajor3(
    -00113                 detail::tvec3<T> const & v1, 
    -00114                 detail::tvec3<T> const & v2, 
    -00115                 detail::tvec3<T> const & v3);
    -00116                 
    -00119         template <typename T> 
    -00120         detail::tmat3x3<T> colMajor3(
    -00121                 detail::tmat3x3<T> const & m);
    -00122                 
    -00125         template <typename T> 
    -00126         detail::tmat4x4<T> colMajor4(
    -00127                 detail::tvec4<T> const & v1, 
    -00128                 detail::tvec4<T> const & v2, 
    -00129                 detail::tvec4<T> const & v3, 
    -00130                 detail::tvec4<T> const & v4);
    -00131                                 
    -00134         template <typename T> 
    -00135         detail::tmat4x4<T> colMajor4(
    -00136                 detail::tmat4x4<T> const & m);
    -00137 
    -00139 }//namespace glm
    -00140 
    -00141 #include "matrix_major_storage.inl"
    -00142 
    -00143 #endif//GLM_GTX_matrix_major_storage
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_matrix_major_storage
    +
    40 #define GLM_GTX_matrix_major_storage GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_matrix_major_storage extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename T>
    +
    57  detail::tmat2x2<T> rowMajor2(
    +
    58  detail::tvec2<T> const & v1,
    +
    59  detail::tvec2<T> const & v2);
    +
    60 
    +
    63  template <typename T>
    +
    64  detail::tmat2x2<T> rowMajor2(
    +
    65  detail::tmat2x2<T> const & m);
    +
    66 
    +
    69  template <typename T>
    +
    70  detail::tmat3x3<T> rowMajor3(
    +
    71  detail::tvec3<T> const & v1,
    +
    72  detail::tvec3<T> const & v2,
    +
    73  detail::tvec3<T> const & v3);
    +
    74 
    +
    77  template <typename T>
    +
    78  detail::tmat3x3<T> rowMajor3(
    +
    79  detail::tmat3x3<T> const & m);
    +
    80 
    +
    83  template <typename T>
    +
    84  detail::tmat4x4<T> rowMajor4(
    +
    85  detail::tvec4<T> const & v1,
    +
    86  detail::tvec4<T> const & v2,
    +
    87  detail::tvec4<T> const & v3,
    +
    88  detail::tvec4<T> const & v4);
    +
    89 
    +
    92  template <typename T>
    +
    93  detail::tmat4x4<T> rowMajor4(
    +
    94  detail::tmat4x4<T> const & m);
    +
    95 
    +
    98  template <typename T>
    +
    99  detail::tmat2x2<T> colMajor2(
    +
    100  detail::tvec2<T> const & v1,
    +
    101  detail::tvec2<T> const & v2);
    +
    102 
    +
    105  template <typename T>
    +
    106  detail::tmat2x2<T> colMajor2(
    +
    107  detail::tmat2x2<T> const & m);
    +
    108 
    +
    111  template <typename T>
    +
    112  detail::tmat3x3<T> colMajor3(
    +
    113  detail::tvec3<T> const & v1,
    +
    114  detail::tvec3<T> const & v2,
    +
    115  detail::tvec3<T> const & v3);
    +
    116 
    +
    119  template <typename T>
    +
    120  detail::tmat3x3<T> colMajor3(
    +
    121  detail::tmat3x3<T> const & m);
    +
    122 
    +
    125  template <typename T>
    +
    126  detail::tmat4x4<T> colMajor4(
    +
    127  detail::tvec4<T> const & v1,
    +
    128  detail::tvec4<T> const & v2,
    +
    129  detail::tvec4<T> const & v3,
    +
    130  detail::tvec4<T> const & v4);
    +
    131 
    +
    134  template <typename T>
    +
    135  detail::tmat4x4<T> colMajor4(
    +
    136  detail::tmat4x4<T> const & m);
    +
    137 
    +
    139 }//namespace glm
    +
    140 
    +
    141 #include "matrix_major_storage.inl"
    +
    142 
    +
    143 #endif//GLM_GTX_matrix_major_storage
    +
    + - diff --git a/doc/api/a00058.html b/doc/api/a00058.html index fb634699..f1384c84 100644 --- a/doc/api/a00058.html +++ b/doc/api/a00058.html @@ -2,42 +2,31 @@ - + matrix_operation.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,57 +35,68 @@
  • File List
  • + +
    matrix_operation.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tmat2x2< valType > diagonal2x2 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat2x3< valType > diagonal2x3 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat2x4< valType > diagonal2x4 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat3x2< valType > diagonal3x2 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat3x3< valType > diagonal3x3 (detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tmat3x4< valType > diagonal3x4 (detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tmat4x2< valType > diagonal4x2 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat4x3< valType > diagonal4x3 (detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tmat4x4< valType > diagonal4x4 (detail::tvec4< valType > const &v)
    template<typename valType >
    detail::tmat2x2< valType > diagonal2x2 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat2x3< valType > diagonal2x3 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat2x4< valType > diagonal2x4 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat3x2< valType > diagonal3x2 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat3x3< valType > diagonal3x3 (detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tmat3x4< valType > diagonal3x4 (detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tmat4x2< valType > diagonal4x2 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat4x3< valType > diagonal4x3 (detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tmat4x4< valType > diagonal4x4 (detail::tvec4< valType > const &v)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_operation: Extended matrix operations

    -
    Date:
    2009-08-29 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_matrix_operation

    +
    Date
    2009-08-29 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file matrix_operation.hpp.

    -
    - - + + - diff --git a/doc/api/a00058_source.html b/doc/api/a00058_source.html index 788392fe..138ce9df 100644 --- a/doc/api/a00058_source.html +++ b/doc/api/a00058_source.html @@ -2,42 +2,31 @@ - + matrix_operation.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,111 +35,113 @@
  • File List
  • + +
    matrix_operation.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_matrix_operation
    -00039 #define GLM_GTX_matrix_operation GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_matrix_operation extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename valType> 
    -00056         detail::tmat2x2<valType> diagonal2x2(
    -00057                 detail::tvec2<valType> const & v);
    -00058 
    -00061         template <typename valType> 
    -00062         detail::tmat2x3<valType> diagonal2x3(
    -00063                 detail::tvec2<valType> const & v);
    -00064 
    -00067         template <typename valType> 
    -00068         detail::tmat2x4<valType> diagonal2x4(
    -00069                 detail::tvec2<valType> const & v);
    -00070 
    -00073         template <typename valType> 
    -00074         detail::tmat3x2<valType> diagonal3x2(
    -00075                 detail::tvec2<valType> const & v);
    -00076 
    -00079         template <typename valType> 
    -00080         detail::tmat3x3<valType> diagonal3x3(
    -00081                 detail::tvec3<valType> const & v);
    -00082 
    -00085         template <typename valType> 
    -00086         detail::tmat3x4<valType> diagonal3x4(
    -00087                 detail::tvec3<valType> const & v);
    -00088 
    -00091         template <typename valType> 
    -00092         detail::tmat4x2<valType> diagonal4x2(
    -00093                 detail::tvec2<valType> const & v);
    -00094 
    -00097         template <typename valType> 
    -00098         detail::tmat4x3<valType> diagonal4x3(
    -00099                 detail::tvec3<valType> const & v);
    -00100 
    -00103         template <typename valType> 
    -00104         detail::tmat4x4<valType> diagonal4x4(
    -00105                 detail::tvec4<valType> const & v);
    -00106 
    -00108 }//namespace glm
    -00109 
    -00110 #include "matrix_operation.inl"
    -00111 
    -00112 #endif//GLM_GTX_matrix_operation
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_matrix_operation
    +
    39 #define GLM_GTX_matrix_operation GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_matrix_operation extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename valType>
    +
    56  detail::tmat2x2<valType> diagonal2x2(
    +
    57  detail::tvec2<valType> const & v);
    +
    58 
    +
    61  template <typename valType>
    +
    62  detail::tmat2x3<valType> diagonal2x3(
    +
    63  detail::tvec2<valType> const & v);
    +
    64 
    +
    67  template <typename valType>
    +
    68  detail::tmat2x4<valType> diagonal2x4(
    +
    69  detail::tvec2<valType> const & v);
    +
    70 
    +
    73  template <typename valType>
    +
    74  detail::tmat3x2<valType> diagonal3x2(
    +
    75  detail::tvec2<valType> const & v);
    +
    76 
    +
    79  template <typename valType>
    +
    80  detail::tmat3x3<valType> diagonal3x3(
    +
    81  detail::tvec3<valType> const & v);
    +
    82 
    +
    85  template <typename valType>
    +
    86  detail::tmat3x4<valType> diagonal3x4(
    +
    87  detail::tvec3<valType> const & v);
    +
    88 
    +
    91  template <typename valType>
    +
    92  detail::tmat4x2<valType> diagonal4x2(
    +
    93  detail::tvec2<valType> const & v);
    +
    94 
    +
    97  template <typename valType>
    +
    98  detail::tmat4x3<valType> diagonal4x3(
    +
    99  detail::tvec3<valType> const & v);
    +
    100 
    +
    103  template <typename valType>
    +
    104  detail::tmat4x4<valType> diagonal4x4(
    +
    105  detail::tvec4<valType> const & v);
    +
    106 
    +
    108 }//namespace glm
    +
    109 
    +
    110 #include "matrix_operation.inl"
    +
    111 
    +
    112 #endif//GLM_GTX_matrix_operation
    +
    + - diff --git a/doc/api/a00059.html b/doc/api/a00059.html index f1b8de0e..dbe905fa 100644 --- a/doc/api/a00059.html +++ b/doc/api/a00059.html @@ -2,42 +2,31 @@ - + matrix_query.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,57 +35,67 @@
  • File List
  • + +
    matrix_query.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    bool isIdentity (genType const &m, typename genType::value_type const &epsilon)
    template<typename valType >
    bool isNormalized (detail::tmat2x2< valType > const &m, valType const &epsilon)
    template<typename valType >
    bool isNormalized (detail::tmat3x3< valType > const &m, valType const &epsilon)
    template<typename valType >
    bool isNormalized (detail::tmat4x4< valType > const &m, valType const &epsilon)
    template<typename T >
    bool isNull (detail::tmat2x2< T > const &m, T const &epsilon)
    template<typename T >
    bool isNull (detail::tmat3x3< T > const &m, T const &epsilon)
    template<typename T >
    bool isNull (detail::tmat4x4< T > const &m, T const &epsilon)
    template<typename valType , template< typename > class matType>
    bool isOrthogonal (matType< valType > const &m, valType const &epsilon)
    template<typename genType >
    bool isIdentity (genType const &m, typename genType::value_type const &epsilon)
     
    template<typename valType >
    bool isNormalized (detail::tmat2x2< valType > const &m, valType const &epsilon)
     
    template<typename valType >
    bool isNormalized (detail::tmat3x3< valType > const &m, valType const &epsilon)
     
    template<typename valType >
    bool isNormalized (detail::tmat4x4< valType > const &m, valType const &epsilon)
     
    template<typename T >
    bool isNull (detail::tmat2x2< T > const &m, T const &epsilon)
     
    template<typename T >
    bool isNull (detail::tmat3x3< T > const &m, T const &epsilon)
     
    template<typename T >
    bool isNull (detail::tmat4x4< T > const &m, T const &epsilon)
     
    template<typename valType , template< typename > class matType>
    bool isOrthogonal (matType< valType > const &m, valType const &epsilon)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_query: Query matrix properties

    -
    Date:
    2007-03-05 / 2011-08-28
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_matrix_query

    +
    Date
    2007-03-05 / 2011-08-28
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_vector_query: Vector query (dependence)
    +GLM_GTX_vector_query (dependence)

    Definition in file matrix_query.hpp.

    -
    - - + + - diff --git a/doc/api/a00059_source.html b/doc/api/a00059_source.html index 37ed2f46..0338718a 100644 --- a/doc/api/a00059_source.html +++ b/doc/api/a00059_source.html @@ -2,42 +2,31 @@ - + matrix_query.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,118 +35,120 @@
  • File List
  • + +
    matrix_query.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_matrix_query
    -00040 #define GLM_GTX_matrix_query GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/vector_query.hpp"
    -00045 #include <limits>
    -00046 
    -00047 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00048 #       pragma message("GLM: GLM_GTX_matrix_query extension included")
    -00049 #endif
    -00050 
    -00051 namespace glm
    -00052 {
    -00055 
    -00058         template<typename T> 
    -00059         bool isNull(
    -00060                 detail::tmat2x2<T> const & m, 
    -00061                 T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
    -00062                 
    -00065         template<typename T> 
    -00066         bool isNull(
    -00067                 detail::tmat3x3<T> const & m, 
    -00068                 T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
    -00069                 
    -00072         template<typename T> 
    -00073         bool isNull(
    -00074                 detail::tmat4x4<T> const & m, 
    -00075                 T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
    -00076                         
    -00079         template<typename genType> 
    -00080         bool isIdentity(
    -00081                 genType const & m, 
    -00082                 typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    -00083 
    -00086         template<typename valType>   
    -00087         bool isNormalized(
    -00088                 detail::tmat2x2<valType> const & m, 
    -00089                 valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
    -00090 
    -00093         template<typename valType>   
    -00094         bool isNormalized(
    -00095                 detail::tmat3x3<valType> const & m, 
    -00096                 valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
    -00097 
    -00100         template<typename valType>   
    -00101         bool isNormalized(
    -00102                 detail::tmat4x4<valType> const & m, 
    -00103                 valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
    -00104 
    -00107         template<typename valType, template <typename> class matType> 
    -00108         bool isOrthogonal(
    -00109                 matType<valType> const & m, 
    -00110                 valType const & epsilon/* = std::numeric_limits<genType>::epsilon()*/);
    -00111 
    -00113 }//namespace glm
    -00114 
    -00115 #include "matrix_query.inl"
    -00116 
    -00117 #endif//GLM_GTX_matrix_query
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_matrix_query
    +
    40 #define GLM_GTX_matrix_query GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/vector_query.hpp"
    +
    45 #include <limits>
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    48 # pragma message("GLM: GLM_GTX_matrix_query extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    58  template<typename T>
    +
    59  bool isNull(
    +
    60  detail::tmat2x2<T> const & m,
    +
    61  T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
    +
    62 
    +
    65  template<typename T>
    +
    66  bool isNull(
    +
    67  detail::tmat3x3<T> const & m,
    +
    68  T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
    +
    69 
    +
    72  template<typename T>
    +
    73  bool isNull(
    +
    74  detail::tmat4x4<T> const & m,
    +
    75  T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
    +
    76 
    +
    79  template<typename genType>
    +
    80  bool isIdentity(
    +
    81  genType const & m,
    +
    82  typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    +
    83 
    +
    86  template<typename valType>
    +
    87  bool isNormalized(
    +
    88  detail::tmat2x2<valType> const & m,
    +
    89  valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
    +
    90 
    +
    93  template<typename valType>
    +
    94  bool isNormalized(
    +
    95  detail::tmat3x3<valType> const & m,
    +
    96  valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
    +
    97 
    +
    100  template<typename valType>
    +
    101  bool isNormalized(
    +
    102  detail::tmat4x4<valType> const & m,
    +
    103  valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
    +
    104 
    +
    107  template<typename valType, template <typename> class matType>
    +
    108  bool isOrthogonal(
    +
    109  matType<valType> const & m,
    +
    110  valType const & epsilon/* = std::numeric_limits<genType>::epsilon()*/);
    +
    111 
    +
    113 }//namespace glm
    +
    114 
    +
    115 #include "matrix_query.inl"
    +
    116 
    +
    117 #endif//GLM_GTX_matrix_query
    +
    + - diff --git a/doc/api/a00060.html b/doc/api/a00060.html index a8b42c69..73637b9d 100644 --- a/doc/api/a00060.html +++ b/doc/api/a00060.html @@ -2,42 +2,31 @@ - + matrix_transform.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,71 +35,87 @@
  • File List
  • + +
    matrix_transform.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat4x4< T > frustum (T const &left, T const &right, T const &bottom, T const &top, T const &near, T const &far)
    template<typename T >
    detail::tmat4x4< T > infinitePerspective (T fovy, T aspect, T near)
    template<typename T >
    detail::tmat4x4< T > lookAt (detail::tvec3< T > const &eye, detail::tvec3< T > const &center, detail::tvec3< T > const &up)
    template<typename T >
    detail::tmat4x4< T > ortho (T const &left, T const &right, T const &bottom, T const &top, T const &zNear, T const &zFar)
    template<typename T >
    detail::tmat4x4< T > ortho (T const &left, T const &right, T const &bottom, T const &top)
    template<typename T >
    detail::tmat4x4< T > perspective (T const &fovy, T const &aspect, T const &near, T const &far)
    template<typename valType >
    detail::tmat4x4< valType > perspectiveFov (valType const &fov, valType const &width, valType const &height, valType const &near, valType const &far)
    template<typename T , typename U >
    detail::tmat4x4< T > pickMatrix (detail::tvec2< T > const &center, detail::tvec2< T > const &delta, detail::tvec4< U > const &viewport)
    template<typename T , typename U >
    detail::tvec3< T > project (detail::tvec3< T > const &obj, detail::tmat4x4< T > const &model, detail::tmat4x4< T > const &proj, detail::tvec4< U > const &viewport)
    template<typename T >
    detail::tmat4x4< T > rotate (detail::tmat4x4< T > const &m, T const &angle, detail::tvec3< T > const &axis)
    template<typename T >
    detail::tmat4x4< T > scale (detail::tmat4x4< T > const &m, detail::tvec3< T > const &v)
    template<typename T >
    detail::tmat4x4< T > translate (detail::tmat4x4< T > const &m, detail::tvec3< T > const &v)
    template<typename T >
    detail::tmat4x4< T > tweakedInfinitePerspective (T fovy, T aspect, T near)
    template<typename T , typename U >
    detail::tvec3< T > unProject (detail::tvec3< T > const &win, detail::tmat4x4< T > const &model, detail::tmat4x4< T > const &proj, detail::tvec4< U > const &viewport)
    template<typename T >
    detail::tmat4x4< T > frustum (T const &left, T const &right, T const &bottom, T const &top, T const &near, T const &far)
     
    template<typename T >
    detail::tmat4x4< T > infinitePerspective (T fovy, T aspect, T near)
     
    template<typename T >
    detail::tmat4x4< T > lookAt (detail::tvec3< T > const &eye, detail::tvec3< T > const &center, detail::tvec3< T > const &up)
     
    template<typename T >
    detail::tmat4x4< T > ortho (T const &left, T const &right, T const &bottom, T const &top, T const &zNear, T const &zFar)
     
    template<typename T >
    detail::tmat4x4< T > ortho (T const &left, T const &right, T const &bottom, T const &top)
     
    template<typename T >
    detail::tmat4x4< T > perspective (T const &fovy, T const &aspect, T const &near, T const &far)
     
    template<typename valType >
    detail::tmat4x4< valType > perspectiveFov (valType const &fov, valType const &width, valType const &height, valType const &near, valType const &far)
     
    template<typename T , typename U >
    detail::tmat4x4< T > pickMatrix (detail::tvec2< T > const &center, detail::tvec2< T > const &delta, detail::tvec4< U > const &viewport)
     
    template<typename T , typename U >
    detail::tvec3< T > project (detail::tvec3< T > const &obj, detail::tmat4x4< T > const &model, detail::tmat4x4< T > const &proj, detail::tvec4< U > const &viewport)
     
    template<typename T >
    detail::tmat4x4< T > rotate (detail::tmat4x4< T > const &m, T const &angle, detail::tvec3< T > const &axis)
     
    template<typename T >
    detail::tmat4x4< T > scale (detail::tmat4x4< T > const &m, detail::tvec3< T > const &v)
     
    template<typename T >
    detail::tmat4x4< T > translate (detail::tmat4x4< T > const &m, detail::tvec3< T > const &v)
     
    template<typename T >
    detail::tmat4x4< T > tweakedInfinitePerspective (T fovy, T aspect, T near)
     
    template<typename T , typename U >
    detail::tvec3< T > unProject (detail::tvec3< T > const &win, detail::tmat4x4< T > const &model, detail::tmat4x4< T > const &proj, detail::tvec4< U > const &viewport)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_matrix_transform: Matrix transform functions

    -
    Date:
    2009-04-29 / 2011-05-16
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_matrix_transform

    +
    Date
    2009-04-29 / 2011-05-16
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_transform: Extented transformation matrices
    +GLM_GTX_transform
    -GLM_GTX_transform2: Extra transformation matrices
    +GLM_GTX_transform2

    Definition in file matrix_transform.hpp.

    -
    - - + + - diff --git a/doc/api/a00060_source.html b/doc/api/a00060_source.html index f6cf075f..7f1b0360 100644 --- a/doc/api/a00060_source.html +++ b/doc/api/a00060_source.html @@ -2,42 +2,31 @@ - + matrix_transform.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,173 +35,175 @@
  • File List
  • + +
    matrix_transform.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 
    -00042 
    -00043 
    -00044 
    -00045 
    -00046 #ifndef GLM_GTC_matrix_transform
    -00047 #define GLM_GTC_matrix_transform GLM_VERSION
    -00048 
    -00049 // Dependency:
    -00050 #include "../glm.hpp"
    -00051 
    -00052 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00053 #       pragma message("GLM: GLM_GTC_matrix_transform extension included")
    -00054 #endif
    -00055 
    -00056 namespace glm
    -00057 {
    -00060 
    -00081         template <typename T> 
    -00082         detail::tmat4x4<T> translate(
    -00083                 detail::tmat4x4<T> const & m,
    -00084                 detail::tvec3<T> const & v);
    -00085                 
    -00097         template <typename T> 
    -00098         detail::tmat4x4<T> rotate(
    -00099                 detail::tmat4x4<T> const & m,
    -00100                 T const & angle, 
    -00101                 detail::tvec3<T> const & axis);
    -00102 
    -00113         template <typename T> 
    -00114         detail::tmat4x4<T> scale(
    -00115                 detail::tmat4x4<T> const & m,
    -00116                 detail::tvec3<T> const & v);
    -00117 
    -00129         template <typename T> 
    -00130         detail::tmat4x4<T> ortho(
    -00131                 T const & left, 
    -00132                 T const & right, 
    -00133                 T const & bottom, 
    -00134                 T const & top, 
    -00135                 T const & zNear, 
    -00136                 T const & zFar);
    -00137 
    -00147         template <typename T> 
    -00148         detail::tmat4x4<T> ortho(
    -00149                 T const & left, 
    -00150                 T const & right, 
    -00151                 T const & bottom, 
    -00152                 T const & top);
    -00153 
    -00164         template <typename T> 
    -00165         detail::tmat4x4<T> frustum(
    -00166                 T const & left, 
    -00167                 T const & right, 
    -00168                 T const & bottom, 
    -00169                 T const & top, 
    -00170                 T const & near, 
    -00171                 T const & far);
    -00172 
    -00181         template <typename T> 
    -00182         detail::tmat4x4<T> perspective(
    -00183                 T const & fovy, 
    -00184                 T const & aspect, 
    -00185                 T const & near, 
    -00186                 T const & far);
    -00187 
    -00197         template <typename valType> 
    -00198         detail::tmat4x4<valType> perspectiveFov(
    -00199                 valType const & fov, 
    -00200                 valType const & width, 
    -00201                 valType const & height, 
    -00202                 valType const & near, 
    -00203                 valType const & far);
    -00204 
    -00212     template <typename T> 
    -00213         detail::tmat4x4<T> infinitePerspective(
    -00214                 T fovy, T aspect, T near);
    -00215 
    -00223     template <typename T> 
    -00224         detail::tmat4x4<T> tweakedInfinitePerspective(
    -00225                 T fovy, T aspect, T near);
    -00226 
    -00236         template <typename T, typename U> 
    -00237         detail::tvec3<T> project(
    -00238                 detail::tvec3<T> const & obj, 
    -00239                 detail::tmat4x4<T> const & model, 
    -00240                 detail::tmat4x4<T> const & proj, 
    -00241                 detail::tvec4<U> const & viewport);
    -00242 
    -00252         template <typename T, typename U> 
    -00253         detail::tvec3<T> unProject(
    -00254                 detail::tvec3<T> const & win, 
    -00255                 detail::tmat4x4<T> const & model, 
    -00256                 detail::tmat4x4<T> const & proj, 
    -00257                 detail::tvec4<U> const & viewport);
    -00258 
    -00267         template <typename T, typename U> 
    -00268         detail::tmat4x4<T> pickMatrix(
    -00269                 detail::tvec2<T> const & center, 
    -00270                 detail::tvec2<T> const & delta, 
    -00271                 detail::tvec4<U> const & viewport);
    -00272 
    -00280         template <typename T> 
    -00281         detail::tmat4x4<T> lookAt(
    -00282                 detail::tvec3<T> const & eye, 
    -00283                 detail::tvec3<T> const & center, 
    -00284                 detail::tvec3<T> const & up);
    -00285 
    -00287 }//namespace glm
    -00288 
    -00289 #include "matrix_transform.inl"
    -00290 
    -00291 #endif//GLM_GTC_matrix_transform
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 
    +
    42 
    +
    43 
    +
    44 
    +
    45 
    +
    46 #ifndef GLM_GTC_matrix_transform
    +
    47 #define GLM_GTC_matrix_transform GLM_VERSION
    +
    48 
    +
    49 // Dependency:
    +
    50 #include "../glm.hpp"
    +
    51 
    +
    52 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    53 # pragma message("GLM: GLM_GTC_matrix_transform extension included")
    +
    54 #endif
    +
    55 
    +
    56 namespace glm
    +
    57 {
    +
    60 
    +
    81  template <typename T>
    +
    82  detail::tmat4x4<T> translate(
    +
    83  detail::tmat4x4<T> const & m,
    +
    84  detail::tvec3<T> const & v);
    +
    85 
    +
    97  template <typename T>
    +
    98  detail::tmat4x4<T> rotate(
    +
    99  detail::tmat4x4<T> const & m,
    +
    100  T const & angle,
    +
    101  detail::tvec3<T> const & axis);
    +
    102 
    +
    113  template <typename T>
    +
    114  detail::tmat4x4<T> scale(
    +
    115  detail::tmat4x4<T> const & m,
    +
    116  detail::tvec3<T> const & v);
    +
    117 
    +
    129  template <typename T>
    +
    130  detail::tmat4x4<T> ortho(
    +
    131  T const & left,
    +
    132  T const & right,
    +
    133  T const & bottom,
    +
    134  T const & top,
    +
    135  T const & zNear,
    +
    136  T const & zFar);
    +
    137 
    +
    147  template <typename T>
    +
    148  detail::tmat4x4<T> ortho(
    +
    149  T const & left,
    +
    150  T const & right,
    +
    151  T const & bottom,
    +
    152  T const & top);
    +
    153 
    +
    164  template <typename T>
    +
    165  detail::tmat4x4<T> frustum(
    +
    166  T const & left,
    +
    167  T const & right,
    +
    168  T const & bottom,
    +
    169  T const & top,
    +
    170  T const & near,
    +
    171  T const & far);
    +
    172 
    +
    181  template <typename T>
    +
    182  detail::tmat4x4<T> perspective(
    +
    183  T const & fovy,
    +
    184  T const & aspect,
    +
    185  T const & near,
    +
    186  T const & far);
    +
    187 
    +
    197  template <typename valType>
    +
    198  detail::tmat4x4<valType> perspectiveFov(
    +
    199  valType const & fov,
    +
    200  valType const & width,
    +
    201  valType const & height,
    +
    202  valType const & near,
    +
    203  valType const & far);
    +
    204 
    +
    212  template <typename T>
    +
    213  detail::tmat4x4<T> infinitePerspective(
    +
    214  T fovy, T aspect, T near);
    +
    215 
    +
    223  template <typename T>
    +
    224  detail::tmat4x4<T> tweakedInfinitePerspective(
    +
    225  T fovy, T aspect, T near);
    +
    226 
    +
    236  template <typename T, typename U>
    +
    237  detail::tvec3<T> project(
    +
    238  detail::tvec3<T> const & obj,
    +
    239  detail::tmat4x4<T> const & model,
    +
    240  detail::tmat4x4<T> const & proj,
    +
    241  detail::tvec4<U> const & viewport);
    +
    242 
    +
    252  template <typename T, typename U>
    +
    253  detail::tvec3<T> unProject(
    +
    254  detail::tvec3<T> const & win,
    +
    255  detail::tmat4x4<T> const & model,
    +
    256  detail::tmat4x4<T> const & proj,
    +
    257  detail::tvec4<U> const & viewport);
    +
    258 
    +
    267  template <typename T, typename U>
    +
    268  detail::tmat4x4<T> pickMatrix(
    +
    269  detail::tvec2<T> const & center,
    +
    270  detail::tvec2<T> const & delta,
    +
    271  detail::tvec4<U> const & viewport);
    +
    272 
    +
    280  template <typename T>
    +
    281  detail::tmat4x4<T> lookAt(
    +
    282  detail::tvec3<T> const & eye,
    +
    283  detail::tvec3<T> const & center,
    +
    284  detail::tvec3<T> const & up);
    +
    285 
    +
    287 }//namespace glm
    +
    288 
    +
    289 #include "matrix_transform.inl"
    +
    290 
    +
    291 #endif//GLM_GTC_matrix_transform
    +
    + - diff --git a/doc/api/a00061.html b/doc/api/a00061.html index 5444349a..845045fb 100644 --- a/doc/api/a00061.html +++ b/doc/api/a00061.html @@ -2,42 +2,31 @@ - + mixed_product.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,42 +35,45 @@
  • File List
  • + +
    mixed_product.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - + +

    +

    Functions

    +
    template<typename valType >
    valType mixedProduct (detail::tvec3< valType > const &v1, detail::tvec3< valType > const &v2, detail::tvec3< valType > const &v3)
    valType mixedProduct (detail::tvec3< valType > const &v1, detail::tvec3< valType > const &v2, detail::tvec3< valType > const &v3)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_mixed_producte: Mixed product

    -
    Date:
    2007-04-03 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_mixed_producte

    +
    Date
    2007-04-03 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file mixed_product.hpp.

    -
    - - + + - diff --git a/doc/api/a00061_source.html b/doc/api/a00061_source.html index 37f970a4..10de07fe 100644 --- a/doc/api/a00061_source.html +++ b/doc/api/a00061_source.html @@ -2,42 +2,31 @@ - + mixed_product.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,81 +35,83 @@
  • File List
  • + +
    mixed_product.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_mixed_product
    -00039 #define GLM_GTX_mixed_product GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_mixed_product extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00054         template <typename valType> 
    -00055         valType mixedProduct(
    -00056                 detail::tvec3<valType> const & v1, 
    -00057                 detail::tvec3<valType> const & v2, 
    -00058                 detail::tvec3<valType> const & v3);
    -00059 
    -00061 }// namespace glm
    -00062 
    -00063 #include "mixed_product.inl"
    -00064 
    -00065 #endif//GLM_GTX_mixed_product
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_mixed_product
    +
    39 #define GLM_GTX_mixed_product GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_mixed_product extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    54  template <typename valType>
    +
    55  valType mixedProduct(
    +
    56  detail::tvec3<valType> const & v1,
    +
    57  detail::tvec3<valType> const & v2,
    +
    58  detail::tvec3<valType> const & v3);
    +
    59 
    +
    61 }// namespace glm
    +
    62 
    +
    63 #include "mixed_product.inl"
    +
    64 
    +
    65 #endif//GLM_GTX_mixed_product
    +
    + - diff --git a/doc/api/a00062.html b/doc/api/a00062.html index d8e30842..3a37366b 100644 --- a/doc/api/a00062.html +++ b/doc/api/a00062.html @@ -2,42 +2,31 @@ - + multiple.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,49 @@
  • File List
  • + +
    multiple.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + +

    +

    Functions

    template<typename genType >
    genType higherMultiple (genType const &Source, genType const &Multiple)
    template<typename genType >
    genType lowerMultiple (genType const &Source, genType const &Multiple)
    template<typename genType >
    genType higherMultiple (genType const &Source, genType const &Multiple)
     
    template<typename genType >
    genType lowerMultiple (genType const &Source, genType const &Multiple)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_multiple: Multiples

    -
    Date:
    2009-10-26 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_multiple

    +
    Date
    2009-10-26 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    +GLM_GTX_extented_min_max (dependence)

    Definition in file multiple.hpp.

    -
    - - + + - diff --git a/doc/api/a00062_source.html b/doc/api/a00062_source.html index ff0e81b2..ba6507a1 100644 --- a/doc/api/a00062_source.html +++ b/doc/api/a00062_source.html @@ -2,42 +2,31 @@ - + multiple.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,86 +35,88 @@
  • File List
  • + +
    multiple.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_multiple
    -00040 #define GLM_GTX_multiple GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_multiple extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056         template <typename genType> 
    -00057         genType higherMultiple(
    -00058                 genType const & Source, 
    -00059                 genType const & Multiple);
    -00060 
    -00063         template <typename genType> 
    -00064         genType lowerMultiple(
    -00065                 genType const & Source, 
    -00066                 genType const & Multiple);
    -00067 
    -00069 }//namespace glm
    -00070 
    -00071 #include "multiple.inl"
    -00072 
    -00073 #endif//GLM_GTX_multiple
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_multiple
    +
    40 #define GLM_GTX_multiple GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_multiple extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename genType>
    +
    57  genType higherMultiple(
    +
    58  genType const & Source,
    +
    59  genType const & Multiple);
    +
    60 
    +
    63  template <typename genType>
    +
    64  genType lowerMultiple(
    +
    65  genType const & Source,
    +
    66  genType const & Multiple);
    +
    67 
    +
    69 }//namespace glm
    +
    70 
    +
    71 #include "multiple.inl"
    +
    72 
    +
    73 #endif//GLM_GTX_multiple
    +
    + - diff --git a/doc/api/a00063.html b/doc/api/a00063.html index ef22dd0e..322602e5 100644 --- a/doc/api/a00063.html +++ b/doc/api/a00063.html @@ -2,42 +2,31 @@ - + noise.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,50 @@
  • File List
  • + +
    -
    noise.hpp File Reference
    -
    +
    gtc/noise.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - + + + + + + + + +

    +

    Functions

    template<typename T , template< typename > class vecType>
    perlin (vecType< T > const &p)
    template<typename T , template< typename > class vecType>
    perlin (vecType< T > const &p, vecType< T > const &rep)
    template<typename T , template< typename > class vecType>
    simplex (vecType< T > const &p)
    template<typename T , template< typename > class vecType>
    perlin (vecType< T > const &p)
     
    template<typename T , template< typename > class vecType>
    perlin (vecType< T > const &p, vecType< T > const &rep)
     
    template<typename T , template< typename > class vecType>
    simplex (vecType< T > const &p)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_noise: Procedural noise functions

    -
    Date:
    2011-04-21 / 2011-09-27
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_noise

    +
    Date
    2011-04-21 / 2011-09-27
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file gtc/noise.hpp.

    -
    - - + + - diff --git a/doc/api/a00063_source.html b/doc/api/a00063_source.html index 7446fd23..d18728e7 100644 --- a/doc/api/a00063_source.html +++ b/doc/api/a00063_source.html @@ -2,42 +2,31 @@ - + noise.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,91 +35,93 @@
  • File List
  • + +
    -
    noise.hpp
    -
    +
    gtc/noise.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 #ifndef GLM_GTC_noise
    -00042 #define GLM_GTC_noise GLM_VERSION
    -00043 
    -00044 // Dependency:
    -00045 #include "../glm.hpp"
    -00046 
    -00047 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00048 #       pragma message("GLM: GLM_GTC_noise extension included")
    -00049 #endif
    -00050 
    -00051 namespace glm
    -00052 {
    -00055 
    -00058         template <typename T, template<typename> class vecType> 
    -00059     T perlin(
    -00060                 vecType<T> const & p);
    -00061                 
    -00064         template <typename T, template<typename> class vecType> 
    -00065     T perlin(
    -00066                 vecType<T> const & p, 
    -00067                 vecType<T> const & rep);
    -00068 
    -00071         template <typename T, template<typename> class vecType> 
    -00072     T simplex(
    -00073                 vecType<T> const & p);
    -00074 
    -00076 }//namespace glm
    -00077 
    -00078 #include "noise.inl"
    -00079 
    -00080 #endif//GLM_GTC_noise
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 #ifndef GLM_GTC_noise
    +
    42 #define GLM_GTC_noise GLM_VERSION
    +
    43 
    +
    44 // Dependency:
    +
    45 #include "../glm.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    48 # pragma message("GLM: GLM_GTC_noise extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    58  template <typename T, template<typename> class vecType>
    +
    59  T perlin(
    +
    60  vecType<T> const & p);
    +
    61 
    +
    64  template <typename T, template<typename> class vecType>
    +
    65  T perlin(
    +
    66  vecType<T> const & p,
    +
    67  vecType<T> const & rep);
    +
    68 
    +
    71  template <typename T, template<typename> class vecType>
    +
    72  T simplex(
    +
    73  vecType<T> const & p);
    +
    74 
    +
    76 }//namespace glm
    +
    77 
    +
    78 #include "noise.inl"
    +
    79 
    +
    80 #endif//GLM_GTC_noise
    +
    + - diff --git a/doc/api/a00064_source.html b/doc/api/a00064_source.html index d0ee6f58..7ca3d68b 100644 --- a/doc/api/a00064_source.html +++ b/doc/api/a00064_source.html @@ -2,42 +2,31 @@ - + noise.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,80 +35,51 @@
  • File List
  • + +
    -
    noise.hpp
    -
    +
    gtx/noise.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 
    -00042 #ifndef GLM_GTX_noise
    -00043 #define GLM_GTX_noise GLM_VERSION
    -00044 
    -00045 // Dependency:
    -00046 #include "../glm.hpp"
    -00047 #include "../gtc/noise.hpp"
    -00048 
    -00049 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00050 #       pragma message("GLM: GLM_GTX_noise extension included")
    -00051 #endif
    -00052 
    -00053 namespace glm
    -00054 {
    -00057 
    -00059 }//namespace glm
    -00060 
    -00061 #include "noise.inl"
    -00062 
    -00063 #endif//glm_gtx_noise
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 #if(defined(GLM_MESSAGES))
    +
    25 # pragma message("GLM: GLM_GTX_random extension is deprecated, include GLM_GTC_random (glm/gtc/noise.hpp) instead")
    +
    26 #endif
    +
    27 
    +
    28 // Promoted:
    +
    29 #include "../gtc/noise.hpp"
    +
    + - diff --git a/doc/api/a00065.html b/doc/api/a00065.html index ca24e112..e36789aa 100644 --- a/doc/api/a00065.html +++ b/doc/api/a00065.html @@ -2,42 +2,31 @@ - + norm.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,63 +35,76 @@
  • File List
  • + +
    norm.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    distance2 (T const &p0, T const &p1)
    template<typename genType >
    genType::value_type distance2 (genType const &p0, genType const &p1)
    template<typename T >
    l1Norm (detail::tvec3< T > const &x, detail::tvec3< T > const &y)
    template<typename T >
    l1Norm (detail::tvec3< T > const &v)
    template<typename T >
    l2Norm (detail::tvec3< T > const &x, detail::tvec3< T > const &y)
    template<typename T >
    l2Norm (detail::tvec3< T > const &x)
    template<typename T >
    length2 (T const &x)
    template<typename genType >
    genType::value_type length2 (genType const &x)
    template<typename T >
    length2 (detail::tquat< T > const &q)
    template<typename T >
    lxNorm (detail::tvec3< T > const &x, detail::tvec3< T > const &y, unsigned int Depth)
    template<typename T >
    lxNorm (detail::tvec3< T > const &x, unsigned int Depth)
    template<typename T >
    distance2 (T const &p0, T const &p1)
     
    template<typename genType >
    genType::value_type distance2 (genType const &p0, genType const &p1)
     
    template<typename T >
    l1Norm (detail::tvec3< T > const &x, detail::tvec3< T > const &y)
     
    template<typename T >
    l1Norm (detail::tvec3< T > const &v)
     
    template<typename T >
    l2Norm (detail::tvec3< T > const &x, detail::tvec3< T > const &y)
     
    template<typename T >
    l2Norm (detail::tvec3< T > const &x)
     
    template<typename T >
    length2 (T const &x)
     
    template<typename genType >
    genType::value_type length2 (genType const &x)
     
    template<typename T >
    length2 (detail::tquat< T > const &q)
     
    template<typename T >
    lxNorm (detail::tvec3< T > const &x, detail::tvec3< T > const &y, unsigned int Depth)
     
    template<typename T >
    lxNorm (detail::tvec3< T > const &x, unsigned int Depth)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_norm: Vector norm calculations

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_norm

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_quaternion: Extented quaternion types and functions (dependence)
    +GLM_GTX_quaternion (dependence)

    Definition in file norm.hpp.

    -
    - - + + - diff --git a/doc/api/a00065_source.html b/doc/api/a00065_source.html index 104db856..c0d96e95 100644 --- a/doc/api/a00065_source.html +++ b/doc/api/a00065_source.html @@ -2,42 +2,31 @@ - + norm.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,128 +35,130 @@
  • File List
  • + +
    norm.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_norm
    -00040 #define GLM_GTX_norm GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/quaternion.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_norm extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename T> 
    -00058         T length2(
    -00059                 T const & x);
    -00060 
    -00063         template <typename genType> 
    -00064         typename genType::value_type length2(
    -00065                 genType const & x);
    -00066                 
    -00069         template <typename T>
    -00070         T length2(
    -00071                 detail::tquat<T> const & q);
    -00072 
    -00075         template <typename T>
    -00076         T distance2(
    -00077                 T const & p0, 
    -00078                 T const & p1);
    -00079                 
    -00082         template <typename genType> 
    -00083         typename genType::value_type distance2(
    -00084                 genType const & p0, 
    -00085                 genType const & p1);
    -00086 
    -00089         template <typename T>
    -00090         T l1Norm(
    -00091                 detail::tvec3<T> const & x,
    -00092                 detail::tvec3<T> const & y);
    -00093                 
    -00096         template <typename T> 
    -00097         T l1Norm(
    -00098                 detail::tvec3<T> const & v);
    -00099                 
    -00102         template <typename T> 
    -00103         T l2Norm(
    -00104                 detail::tvec3<T> const & x, 
    -00105                 detail::tvec3<T> const & y);
    -00106                 
    -00109         template <typename T> 
    -00110         T l2Norm(
    -00111                 detail::tvec3<T> const & x);
    -00112                 
    -00115         template <typename T> 
    -00116         T lxNorm(
    -00117                 detail::tvec3<T> const & x,
    -00118                 detail::tvec3<T> const & y,
    -00119                 unsigned int Depth);
    -00120 
    -00123         template <typename T>
    -00124         T lxNorm(
    -00125                 detail::tvec3<T> const & x,
    -00126                 unsigned int Depth);
    -00127 
    -00129 }//namespace glm
    -00130 
    -00131 #include "norm.inl"
    -00132 
    -00133 #endif//GLM_GTX_norm
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_norm
    +
    40 #define GLM_GTX_norm GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/quaternion.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_norm extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename T>
    +
    58  T length2(
    +
    59  T const & x);
    +
    60 
    +
    63  template <typename genType>
    +
    64  typename genType::value_type length2(
    +
    65  genType const & x);
    +
    66 
    +
    69  template <typename T>
    +
    70  T length2(
    +
    71  detail::tquat<T> const & q);
    +
    72 
    +
    75  template <typename T>
    +
    76  T distance2(
    +
    77  T const & p0,
    +
    78  T const & p1);
    +
    79 
    +
    82  template <typename genType>
    +
    83  typename genType::value_type distance2(
    +
    84  genType const & p0,
    +
    85  genType const & p1);
    +
    86 
    +
    89  template <typename T>
    +
    90  T l1Norm(
    +
    91  detail::tvec3<T> const & x,
    +
    92  detail::tvec3<T> const & y);
    +
    93 
    +
    96  template <typename T>
    +
    97  T l1Norm(
    +
    98  detail::tvec3<T> const & v);
    +
    99 
    +
    102  template <typename T>
    +
    103  T l2Norm(
    +
    104  detail::tvec3<T> const & x,
    +
    105  detail::tvec3<T> const & y);
    +
    106 
    +
    109  template <typename T>
    +
    110  T l2Norm(
    +
    111  detail::tvec3<T> const & x);
    +
    112 
    +
    115  template <typename T>
    +
    116  T lxNorm(
    +
    117  detail::tvec3<T> const & x,
    +
    118  detail::tvec3<T> const & y,
    +
    119  unsigned int Depth);
    +
    120 
    +
    123  template <typename T>
    +
    124  T lxNorm(
    +
    125  detail::tvec3<T> const & x,
    +
    126  unsigned int Depth);
    +
    127 
    +
    129 }//namespace glm
    +
    130 
    +
    131 #include "norm.inl"
    +
    132 
    +
    133 #endif//GLM_GTX_norm
    +
    + - diff --git a/doc/api/a00066.html b/doc/api/a00066.html index ff1f8c55..274ca24f 100644 --- a/doc/api/a00066.html +++ b/doc/api/a00066.html @@ -2,42 +2,31 @@ - + normal.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,43 +35,46 @@
  • File List
  • + +
    normal.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - + + +

    +

    Functions

    template<typename T >
    detail::tvec3< T > triangleNormal (detail::tvec3< T > const &p1, detail::tvec3< T > const &p2, detail::tvec3< T > const &p3)
    template<typename T >
    detail::tvec3< T > triangleNormal (detail::tvec3< T > const &p1, detail::tvec3< T > const &p2, detail::tvec3< T > const &p3)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_normal: Compute normals

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_normal

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    +GLM_GTX_extented_min_max (dependence)

    Definition in file normal.hpp.

    -
    - - + + - diff --git a/doc/api/a00066_source.html b/doc/api/a00066_source.html index 644363c3..36f1ae52 100644 --- a/doc/api/a00066_source.html +++ b/doc/api/a00066_source.html @@ -2,42 +2,31 @@ - + normal.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,82 +35,84 @@
  • File List
  • + +
    normal.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_normal
    -00040 #define GLM_GTX_normal GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_normal extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056     template <typename T> 
    -00057         detail::tvec3<T> triangleNormal(
    -00058                 detail::tvec3<T> const & p1, 
    -00059                 detail::tvec3<T> const & p2, 
    -00060                 detail::tvec3<T> const & p3);
    -00061 
    -00063 }//namespace glm
    -00064 
    -00065 #include "normal.inl"
    -00066 
    -00067 #endif//GLM_GTX_normal
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_normal
    +
    40 #define GLM_GTX_normal GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_normal extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename T>
    +
    57  detail::tvec3<T> triangleNormal(
    +
    58  detail::tvec3<T> const & p1,
    +
    59  detail::tvec3<T> const & p2,
    +
    60  detail::tvec3<T> const & p3);
    +
    61 
    +
    63 }//namespace glm
    +
    64 
    +
    65 #include "normal.inl"
    +
    66 
    +
    67 #endif//GLM_GTX_normal
    +
    + - diff --git a/doc/api/a00067.html b/doc/api/a00067.html index cfc79065..565c09ab 100644 --- a/doc/api/a00067.html +++ b/doc/api/a00067.html @@ -2,42 +2,31 @@ - + normalize_dot.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,49 @@
  • File List
  • + +
    normalize_dot.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + +

    +

    Functions

    template<typename genType >
    genType::value_type fastNormalizeDot (genType const &x, genType const &y)
    template<typename genType >
    genType::value_type normalizeDot (genType const &x, genType const &y)
    template<typename genType >
    genType::value_type fastNormalizeDot (genType const &x, genType const &y)
     
    template<typename genType >
    genType::value_type normalizeDot (genType const &x, genType const &y)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_normalize_dot: Normalize dot product

    -
    Date:
    2007-09-28 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_normalize_dot

    +
    Date
    2007-09-28 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_fast_square_root: Fast square root functions (dependence)
    +GLM_GTX_fast_square_root (dependence)

    Definition in file normalize_dot.hpp.

    -
    - - + + - diff --git a/doc/api/a00067_source.html b/doc/api/a00067_source.html index 5a97b7cb..57c2da05 100644 --- a/doc/api/a00067_source.html +++ b/doc/api/a00067_source.html @@ -2,42 +2,31 @@ - + normalize_dot.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,87 +35,89 @@
  • File List
  • + +
    normalize_dot.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_normalize_dot
    -00040 #define GLM_GTX_normalize_dot GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/fast_square_root.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_normalize_dot extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00058         template <typename genType> 
    -00059         typename genType::value_type normalizeDot(
    -00060                 genType const & x, 
    -00061                 genType const & y);
    -00062 
    -00066         template <typename genType> 
    -00067         typename genType::value_type fastNormalizeDot(
    -00068                 genType const & x, 
    -00069                 genType const & y);
    -00070 
    -00072 }//namespace glm
    -00073 
    -00074 #include "normalize_dot.inl"
    -00075 
    -00076 #endif//GLM_GTX_normalize_dot
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_normalize_dot
    +
    40 #define GLM_GTX_normalize_dot GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/fast_square_root.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_normalize_dot extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    58  template <typename genType>
    +
    59  typename genType::value_type normalizeDot(
    +
    60  genType const & x,
    +
    61  genType const & y);
    +
    62 
    +
    66  template <typename genType>
    +
    67  typename genType::value_type fastNormalizeDot(
    +
    68  genType const & x,
    +
    69  genType const & y);
    +
    70 
    +
    72 }//namespace glm
    +
    73 
    +
    74 #include "normalize_dot.inl"
    +
    75 
    +
    76 #endif//GLM_GTX_normalize_dot
    +
    + - diff --git a/doc/api/a00068.html b/doc/api/a00068.html index 0c174736..3a43a550 100644 --- a/doc/api/a00068.html +++ b/doc/api/a00068.html @@ -2,42 +2,31 @@ - + number_precision.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,69 +35,84 @@
  • File List
  • + +
    number_precision.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Typedefs

    -typedef f16 f16mat1
    -typedef f16 f16mat1x1
    -typedef f16 f16vec1
    -typedef f32 f32mat1
    -typedef f32 f32mat1x1
    -typedef f32 f32vec1
    -typedef f64 f64mat1
    -typedef f64 f64mat1x1
    -typedef f64 f64vec1
    -typedef u16 u16vec1
    -typedef u32 u32vec1
    -typedef u64 u64vec1
    -typedef u8 u8vec1
    +typedef f16 f16mat1
     
    +typedef f16 f16mat1x1
     
    +typedef f16 f16vec1
     
    +typedef f32 f32mat1
     
    +typedef f32 f32mat1x1
     
    +typedef f32 f32vec1
     
    +typedef f64 f64mat1
     
    +typedef f64 f64mat1x1
     
    +typedef f64 f64vec1
     
    +typedef u16 u16vec1
     
    +typedef u32 u32vec1
     
    +typedef u64 u64vec1
     
    +typedef u8 u8vec1
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_number_precision: Number precision

    -
    Date:
    2007-05-10 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_number_precision

    +
    Date
    2007-05-10 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions (dependence)
    +GLM_GTC_type_precision (dependence)
    -GLM_GTC_quaternion: Quaternion types and functions (dependence)
    +GLM_GTC_quaternion (dependence)

    Definition in file number_precision.hpp.

    -
    - - + + - diff --git a/doc/api/a00068_source.html b/doc/api/a00068_source.html index c099cc4e..c746aec9 100644 --- a/doc/api/a00068_source.html +++ b/doc/api/a00068_source.html @@ -2,42 +2,31 @@ - + number_precision.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,102 +35,104 @@
  • File List
  • + +
    number_precision.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 #ifndef GLM_GTX_number_precision
    -00041 #define GLM_GTX_number_precision GLM_VERSION
    -00042 
    -00043 // Dependency:
    -00044 #include "../glm.hpp"
    -00045 #include "../gtc/type_precision.hpp"
    -00046 
    -00047 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00048 #       pragma message("GLM: GLM_GTX_number_precision extension included")
    -00049 #endif
    -00050 
    -00051 namespace glm{
    -00052 namespace gtx
    -00053 {
    -00055         // Unsigned int vector types 
    -00056 
    -00059 
    -00060         typedef u8                      u8vec1;         
    -00061         typedef u16                     u16vec1;    
    -00062         typedef u32                     u32vec1;    
    -00063         typedef u64                     u64vec1;    
    -00064 
    -00066         // Float vector types 
    -00067 
    -00068         typedef f16                     f16vec1;    
    -00069         typedef f32                     f32vec1;    
    -00070         typedef f64                     f64vec1;    
    -00071 
    -00073         // Float matrix types 
    -00074 
    -00075         typedef f16                     f16mat1;    
    -00076         typedef f16                     f16mat1x1;      
    -00077         typedef f32                     f32mat1;        
    -00078         typedef f32                     f32mat1x1;      
    -00079         typedef f64                     f64mat1;        
    -00080         typedef f64                     f64mat1x1;      
    -00081 
    -00083 }//namespace gtx
    -00084 }//namespace glm
    -00085 
    -00086 #include "number_precision.inl"
    -00087 
    -00088 #endif//GLM_GTX_number_precision
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 #ifndef GLM_GTX_number_precision
    +
    41 #define GLM_GTX_number_precision GLM_VERSION
    +
    42 
    +
    43 // Dependency:
    +
    44 #include "../glm.hpp"
    +
    45 #include "../gtc/type_precision.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    48 # pragma message("GLM: GLM_GTX_number_precision extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm{
    +
    52 namespace gtx
    +
    53 {
    +
    55  // Unsigned int vector types
    +
    56 
    +
    59 
    +
    60  typedef u8 u8vec1;
    +
    61  typedef u16 u16vec1;
    +
    62  typedef u32 u32vec1;
    +
    63  typedef u64 u64vec1;
    +
    64 
    +
    66  // Float vector types
    +
    67 
    +
    68  typedef f16 f16vec1;
    +
    69  typedef f32 f32vec1;
    +
    70  typedef f64 f64vec1;
    +
    71 
    +
    73  // Float matrix types
    +
    74 
    +
    75  typedef f16 f16mat1;
    +
    76  typedef f16 f16mat1x1;
    +
    77  typedef f32 f32mat1;
    +
    78  typedef f32 f32mat1x1;
    +
    79  typedef f64 f64mat1;
    +
    80  typedef f64 f64mat1x1;
    +
    81 
    +
    83 }//namespace gtx
    +
    84 }//namespace glm
    +
    85 
    +
    86 #include "number_precision.inl"
    +
    87 
    +
    88 #endif//GLM_GTX_number_precision
    +
    + - diff --git a/doc/api/a00069.html b/doc/api/a00069.html index a67a4634..811fa433 100644 --- a/doc/api/a00069.html +++ b/doc/api/a00069.html @@ -2,42 +2,31 @@ - + ocl_type.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,160 +35,208 @@
  • File List
  • + +
    ocl_type.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - + + + + - + + - + + - - - + + + + + + - + + - + + - - - - + + + + + + + + - + + - + + - - - + + + + + + - + + - + + - - - + + + + + + - + + - + + - - - + + + + + + - + + - + + - - - + + + + + + - + + - + + - - - + + + + + + - + + - + + - - - + + + + + + - + + - + + +< detail::uint16 >  +

    +

    Typedefs

    -typedef detail::int8 cl_char
    -typedef detail::int8 cl_char1
    +
    +typedef detail::int8 cl_char
     
    +typedef detail::int8 cl_char1
     
    typedef detail::tvec2
    -< detail::int8 > 
    cl_char2
    +< detail::int8 > cl_char2
     
    typedef detail::tvec3
    -< detail::int8 > 
    cl_char3
    +< detail::int8 > cl_char3
     
    typedef detail::tvec4
    -< detail::int8 > 
    cl_char4
    -typedef detail::float32 cl_float
    -typedef detail::float32 cl_float1
    +< detail::int8 > cl_char4
     
    +typedef detail::float32 cl_float
     
    +typedef detail::float32 cl_float1
     
    typedef detail::tvec2
    -< detail::float32 > 
    cl_float2
    +< detail::float32 > cl_float2
     
    typedef detail::tvec3
    -< detail::float32 > 
    cl_float3
    +< detail::float32 > cl_float3
     
    typedef detail::tvec4
    -< detail::float32 > 
    cl_float4
    -typedef detail::float16 cl_half
    -typedef detail::int32 cl_int
    -typedef detail::int32 cl_int1
    +< detail::float32 > cl_float4
     
    +typedef detail::float16 cl_half
     
    +typedef detail::int32 cl_int
     
    +typedef detail::int32 cl_int1
     
    typedef detail::tvec2
    -< detail::int32 > 
    cl_int2
    +< detail::int32 > cl_int2
     
    typedef detail::tvec3
    -< detail::int32 > 
    cl_int3
    +< detail::int32 > cl_int3
     
    typedef detail::tvec4
    -< detail::int32 > 
    cl_int4
    -typedef detail::int64 cl_long
    -typedef detail::int64 cl_long1
    +< detail::int32 > cl_int4
     
    +typedef detail::int64 cl_long
     
    +typedef detail::int64 cl_long1
     
    typedef detail::tvec2
    -< detail::int64 > 
    cl_long2
    +< detail::int64 > cl_long2
     
    typedef detail::tvec3
    -< detail::int64 > 
    cl_long3
    +< detail::int64 > cl_long3
     
    typedef detail::tvec4
    -< detail::int64 > 
    cl_long4
    -typedef detail::int16 cl_short
    -typedef detail::int16 cl_short1
    +< detail::int64 > cl_long4
     
    +typedef detail::int16 cl_short
     
    +typedef detail::int16 cl_short1
     
    typedef detail::tvec2
    -< detail::int16 > 
    cl_short2
    +< detail::int16 > cl_short2
     
    typedef detail::tvec3
    -< detail::int16 > 
    cl_short3
    +< detail::int16 > cl_short3
     
    typedef detail::tvec4
    -< detail::int16 > 
    cl_short4
    -typedef detail::uint8 cl_uchar
    -typedef detail::uint8 cl_uchar1
    +< detail::int16 > cl_short4
     
    +typedef detail::uint8 cl_uchar
     
    +typedef detail::uint8 cl_uchar1
     
    typedef detail::tvec2
    -< detail::uint8 > 
    cl_uchar2
    +< detail::uint8 > cl_uchar2
     
    typedef detail::tvec3
    -< detail::uint8 > 
    cl_uchar3
    +< detail::uint8 > cl_uchar3
     
    typedef detail::tvec4
    -< detail::uint8 > 
    cl_uchar4
    -typedef detail::uint32 cl_uint
    -typedef detail::uint32 cl_uint1
    +< detail::uint8 > cl_uchar4
     
    +typedef detail::uint32 cl_uint
     
    +typedef detail::uint32 cl_uint1
     
    typedef detail::tvec2
    -< detail::uint32 > 
    cl_uint2
    +< detail::uint32 > cl_uint2
     
    typedef detail::tvec3
    -< detail::uint32 > 
    cl_uint3
    +< detail::uint32 > cl_uint3
     
    typedef detail::tvec4
    -< detail::uint32 > 
    cl_uint4
    -typedef detail::uint64 cl_ulong
    -typedef detail::uint64 cl_ulong1
    +< detail::uint32 > cl_uint4
     
    +typedef detail::uint64 cl_ulong
     
    +typedef detail::uint64 cl_ulong1
     
    typedef detail::tvec2
    -< detail::uint64 > 
    cl_ulong2
    +< detail::uint64 > cl_ulong2
     
    typedef detail::tvec3
    -< detail::uint64 > 
    cl_ulong3
    +< detail::uint64 > cl_ulong3
     
    typedef detail::tvec4
    -< detail::uint64 > 
    cl_ulong4
    -typedef detail::uint16 cl_ushort
    -typedef detail::uint16 cl_ushort1
    +< detail::uint64 > cl_ulong4
     
    +typedef detail::uint16 cl_ushort
     
    +typedef detail::uint16 cl_ushort1
     
    typedef detail::tvec2
    -< detail::uint16 > 
    cl_ushort2
    +< detail::uint16 > cl_ushort2
     
    typedef detail::tvec3
    -< detail::uint16 > 
    cl_ushort3
    +< detail::uint16 > cl_ushort3
     
    typedef detail::tvec4
    -< detail::uint16 > 
    cl_ushort4
    cl_ushort4
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_ocl_type: OpenCL types

    -
    Date:
    2009-05-07 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_ocl_type

    +
    Date
    2009-05-07 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    +GLM_GTX_extented_min_max (dependence)

    Definition in file ocl_type.hpp.

    -
    - - + + - diff --git a/doc/api/a00069_source.html b/doc/api/a00069_source.html index b8f4f84b..7634dc09 100644 --- a/doc/api/a00069_source.html +++ b/doc/api/a00069_source.html @@ -2,42 +2,31 @@ - + ocl_type.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,148 +35,150 @@
  • File List
  • + +
    ocl_type.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_ocl_type
    -00040 #define GLM_GTX_ocl_type GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_ocl_type extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm{
    -00050 namespace gtx
    -00051 {
    -00053         // Scalar types 
    -00054 
    -00057 
    -00058         typedef detail::int8                                            cl_char;                
    -00059         typedef detail::int16                                           cl_short;               
    -00060         typedef detail::int32                                           cl_int;                 
    -00061         typedef detail::int64                                           cl_long;                
    -00062 
    -00063         typedef detail::uint8                                           cl_uchar;               
    -00064         typedef detail::uint16                                          cl_ushort;              
    -00065         typedef detail::uint32                                          cl_uint;                
    -00066         typedef detail::uint64                                          cl_ulong;               
    -00067 
    -00068         typedef detail::float16                                         cl_half;        
    -00069         typedef detail::float32                                         cl_float;       
    -00070 
    -00071 
    -00072         typedef detail::int8                                            cl_char1;               
    -00073         typedef detail::int16                                           cl_short1;              
    -00074         typedef detail::int32                                           cl_int1;                        
    -00075         typedef detail::int64                                           cl_long1;               
    -00076 
    -00077         typedef detail::uint8                                           cl_uchar1;              
    -00078         typedef detail::uint16                                          cl_ushort1;             
    -00079         typedef detail::uint32                                          cl_uint1;               
    -00080         typedef detail::uint64                                          cl_ulong1;              
    -00081 
    -00082         //typedef detail::float16                                               cl_half1;       //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
    -00083         typedef detail::float32                                         cl_float1;      
    -00084 
    -00085 
    -00086         typedef detail::tvec2<detail::int8>                     cl_char2;               
    -00087         typedef detail::tvec2<detail::int16>            cl_short2;              
    -00088         typedef detail::tvec2<detail::int32>            cl_int2;                        
    -00089         typedef detail::tvec2<detail::int64>            cl_long2;               
    -00090 
    -00091         typedef detail::tvec2<detail::uint8>            cl_uchar2;              
    -00092         typedef detail::tvec2<detail::uint16>           cl_ushort2;             
    -00093         typedef detail::tvec2<detail::uint32>           cl_uint2;               
    -00094         typedef detail::tvec2<detail::uint64>           cl_ulong2;              
    -00095 
    -00096         //typedef detail::tvec2<detail::float16>                cl_half2;       //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
    -00097         typedef detail::tvec2<detail::float32>          cl_float2;      
    -00098 
    -00099 
    -00100         typedef detail::tvec3<detail::int8>                     cl_char3;               
    -00101         typedef detail::tvec3<detail::int16>            cl_short3;              
    -00102         typedef detail::tvec3<detail::int32>            cl_int3;                        
    -00103         typedef detail::tvec3<detail::int64>            cl_long3;               
    -00104 
    -00105         typedef detail::tvec3<detail::uint8>            cl_uchar3;              
    -00106         typedef detail::tvec3<detail::uint16>           cl_ushort3;             
    -00107         typedef detail::tvec3<detail::uint32>           cl_uint3;               
    -00108         typedef detail::tvec3<detail::uint64>           cl_ulong3;              
    -00109 
    -00110         //typedef detail::tvec3<detail::float16>                cl_half3;       //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
    -00111         typedef detail::tvec3<detail::float32>          cl_float3;      
    -00112 
    -00113 
    -00114         typedef detail::tvec4<detail::int8>                     cl_char4;               
    -00115         typedef detail::tvec4<detail::int16>            cl_short4;              
    -00116         typedef detail::tvec4<detail::int32>            cl_int4;                        
    -00117         typedef detail::tvec4<detail::int64>            cl_long4;               
    -00118         typedef detail::tvec4<detail::uint8>            cl_uchar4;              
    -00119         typedef detail::tvec4<detail::uint16>           cl_ushort4;             
    -00120         typedef detail::tvec4<detail::uint32>           cl_uint4;               
    -00121         typedef detail::tvec4<detail::uint64>           cl_ulong4;              
    -00122 
    -00123         //typedef detail::tvec4<detail::float16>                cl_half4;       //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
    -00124         typedef detail::tvec4<detail::float32>          cl_float4;      
    -00125 
    -00127 }//namespace gtx
    -00128 }//namespace glm
    -00129 
    -00130 #include "ocl_type.inl"
    -00131 
    -00132 #endif//GLM_GTX_ocl_type
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_ocl_type
    +
    40 #define GLM_GTX_ocl_type GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_ocl_type extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm{
    +
    50 namespace gtx
    +
    51 {
    +
    53  // Scalar types
    +
    54 
    +
    57 
    +
    58  typedef detail::int8 cl_char;
    +
    59  typedef detail::int16 cl_short;
    +
    60  typedef detail::int32 cl_int;
    +
    61  typedef detail::int64 cl_long;
    +
    62 
    +
    63  typedef detail::uint8 cl_uchar;
    +
    64  typedef detail::uint16 cl_ushort;
    +
    65  typedef detail::uint32 cl_uint;
    +
    66  typedef detail::uint64 cl_ulong;
    +
    67 
    +
    68  typedef detail::float16 cl_half;
    +
    69  typedef detail::float32 cl_float;
    +
    70 
    +
    71 
    +
    72  typedef detail::int8 cl_char1;
    +
    73  typedef detail::int16 cl_short1;
    +
    74  typedef detail::int32 cl_int1;
    +
    75  typedef detail::int64 cl_long1;
    +
    76 
    +
    77  typedef detail::uint8 cl_uchar1;
    +
    78  typedef detail::uint16 cl_ushort1;
    +
    79  typedef detail::uint32 cl_uint1;
    +
    80  typedef detail::uint64 cl_ulong1;
    +
    81 
    +
    82  //typedef detail::float16 cl_half1; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
    +
    83  typedef detail::float32 cl_float1;
    +
    84 
    +
    85 
    +
    86  typedef detail::tvec2<detail::int8> cl_char2;
    +
    87  typedef detail::tvec2<detail::int16> cl_short2;
    +
    88  typedef detail::tvec2<detail::int32> cl_int2;
    +
    89  typedef detail::tvec2<detail::int64> cl_long2;
    +
    90 
    +
    91  typedef detail::tvec2<detail::uint8> cl_uchar2;
    +
    92  typedef detail::tvec2<detail::uint16> cl_ushort2;
    +
    93  typedef detail::tvec2<detail::uint32> cl_uint2;
    +
    94  typedef detail::tvec2<detail::uint64> cl_ulong2;
    +
    95 
    +
    96  //typedef detail::tvec2<detail::float16> cl_half2; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
    +
    97  typedef detail::tvec2<detail::float32> cl_float2;
    +
    98 
    +
    99 
    +
    100  typedef detail::tvec3<detail::int8> cl_char3;
    +
    101  typedef detail::tvec3<detail::int16> cl_short3;
    +
    102  typedef detail::tvec3<detail::int32> cl_int3;
    +
    103  typedef detail::tvec3<detail::int64> cl_long3;
    +
    104 
    +
    105  typedef detail::tvec3<detail::uint8> cl_uchar3;
    +
    106  typedef detail::tvec3<detail::uint16> cl_ushort3;
    +
    107  typedef detail::tvec3<detail::uint32> cl_uint3;
    +
    108  typedef detail::tvec3<detail::uint64> cl_ulong3;
    +
    109 
    +
    110  //typedef detail::tvec3<detail::float16> cl_half3; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
    +
    111  typedef detail::tvec3<detail::float32> cl_float3;
    +
    112 
    +
    113 
    +
    114  typedef detail::tvec4<detail::int8> cl_char4;
    +
    115  typedef detail::tvec4<detail::int16> cl_short4;
    +
    116  typedef detail::tvec4<detail::int32> cl_int4;
    +
    117  typedef detail::tvec4<detail::int64> cl_long4;
    +
    118  typedef detail::tvec4<detail::uint8> cl_uchar4;
    +
    119  typedef detail::tvec4<detail::uint16> cl_ushort4;
    +
    120  typedef detail::tvec4<detail::uint32> cl_uint4;
    +
    121  typedef detail::tvec4<detail::uint64> cl_ulong4;
    +
    122 
    +
    123  //typedef detail::tvec4<detail::float16> cl_half4; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
    +
    124  typedef detail::tvec4<detail::float32> cl_float4;
    +
    125 
    +
    127 }//namespace gtx
    +
    128 }//namespace glm
    +
    129 
    +
    130 #include "ocl_type.inl"
    +
    131 
    +
    132 #endif//GLM_GTX_ocl_type
    +
    + - diff --git a/doc/api/a00070.html b/doc/api/a00070.html index c5950fdd..b3d0132f 100644 --- a/doc/api/a00070.html +++ b/doc/api/a00070.html @@ -2,42 +2,31 @@ - + optimum_pow.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,49 +35,58 @@
  • File List
  • + +
    optimum_pow.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - - - - - - - + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType pow2 (const genType &x)
    template<typename genType >
    genType pow3 (const genType &x)
    template<typename genType >
    genType pow4 (const genType &x)
    bool powOfTwo (int num)
    detail::tvec2< bool > powOfTwo (const detail::tvec2< int > &x)
    detail::tvec3< bool > powOfTwo (const detail::tvec3< int > &x)
    detail::tvec4< bool > powOfTwo (const detail::tvec4< int > &x)
    template<typename genType >
    genType pow2 (const genType &x)
     
    template<typename genType >
    genType pow3 (const genType &x)
     
    template<typename genType >
    genType pow4 (const genType &x)
     
    bool powOfTwo (int num)
     
    detail::tvec2< bool > powOfTwo (const detail::tvec2< int > &x)
     
    detail::tvec3< bool > powOfTwo (const detail::tvec3< int > &x)
     
    detail::tvec4< bool > powOfTwo (const detail::tvec4< int > &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_optimum_pow: Optimum pow

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_optimum_pow

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file optimum_pow.hpp.

    -
    - - + + - diff --git a/doc/api/a00070_source.html b/doc/api/a00070_source.html index 76c9021a..b07bfe9c 100644 --- a/doc/api/a00070_source.html +++ b/doc/api/a00070_source.html @@ -2,42 +2,31 @@ - + optimum_pow.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,94 +35,96 @@
  • File List
  • + +
    optimum_pow.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_optimum_pow
    -00039 #define GLM_GTX_optimum_pow GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_optimum_pow extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm{
    -00049 namespace gtx
    -00050 {
    -00053 
    -00056     template <typename genType> 
    -00057         genType pow2(const genType& x);
    -00058 
    -00061     template <typename genType> 
    -00062         genType pow3(const genType& x);
    -00063 
    -00066         template <typename genType> 
    -00067         genType pow4(const genType& x);
    -00068         
    -00071     bool powOfTwo(int num);
    -00072 
    -00075     detail::tvec2<bool> powOfTwo(const detail::tvec2<int>& x);
    -00076 
    -00079     detail::tvec3<bool> powOfTwo(const detail::tvec3<int>& x);
    -00080 
    -00083     detail::tvec4<bool> powOfTwo(const detail::tvec4<int>& x);
    -00084 
    -00086 }//namespace gtx
    -00087 }//namespace glm
    -00088 
    -00089 #include "optimum_pow.inl"
    -00090 
    -00091 #endif//GLM_GTX_optimum_pow
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_optimum_pow
    +
    39 #define GLM_GTX_optimum_pow GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_optimum_pow extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm{
    +
    49 namespace gtx
    +
    50 {
    +
    53 
    +
    56  template <typename genType>
    +
    57  genType pow2(const genType& x);
    +
    58 
    +
    61  template <typename genType>
    +
    62  genType pow3(const genType& x);
    +
    63 
    +
    66  template <typename genType>
    +
    67  genType pow4(const genType& x);
    +
    68 
    +
    71  bool powOfTwo(int num);
    +
    72 
    +
    75  detail::tvec2<bool> powOfTwo(const detail::tvec2<int>& x);
    +
    76 
    +
    79  detail::tvec3<bool> powOfTwo(const detail::tvec3<int>& x);
    +
    80 
    +
    83  detail::tvec4<bool> powOfTwo(const detail::tvec4<int>& x);
    +
    84 
    +
    86 }//namespace gtx
    +
    87 }//namespace glm
    +
    88 
    +
    89 #include "optimum_pow.inl"
    +
    90 
    +
    91 #endif//GLM_GTX_optimum_pow
    +
    + - diff --git a/doc/api/a00071.html b/doc/api/a00071.html index 928d68f2..8de74a35 100644 --- a/doc/api/a00071.html +++ b/doc/api/a00071.html @@ -2,42 +2,31 @@ - + orthonormalize.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,49 @@
  • File List
  • + +
    orthonormalize.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat3x3< T > orthonormalize (const detail::tmat3x3< T > &m)
    template<typename T >
    detail::tvec3< T > orthonormalize (const detail::tvec3< T > &x, const detail::tvec3< T > &y)
    template<typename T >
    detail::tmat3x3< T > orthonormalize (const detail::tmat3x3< T > &m)
     
    template<typename T >
    detail::tvec3< T > orthonormalize (const detail::tvec3< T > &x, const detail::tvec3< T > &y)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_orthonormalize: Orthonormalize

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_orthonormalize

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    +GLM_GTX_extented_min_max (dependence)

    Definition in file orthonormalize.hpp.

    -
    - - + + - diff --git a/doc/api/a00071_source.html b/doc/api/a00071_source.html index 04af530f..d107b5e7 100644 --- a/doc/api/a00071_source.html +++ b/doc/api/a00071_source.html @@ -2,42 +2,31 @@ - + orthonormalize.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,85 +35,87 @@
  • File List
  • + +
    orthonormalize.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_orthonormalize
    -00040 #define GLM_GTX_orthonormalize GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_orthonormalize extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056         template <typename T> 
    -00057         detail::tmat3x3<T> orthonormalize(
    -00058                 const detail::tmat3x3<T>& m);
    -00059                 
    -00062         template <typename T> 
    -00063         detail::tvec3<T> orthonormalize(
    -00064                 const detail::tvec3<T>& x, 
    -00065                 const detail::tvec3<T>& y);
    -00066 
    -00068 }//namespace glm
    -00069 
    -00070 #include "orthonormalize.inl"
    -00071 
    -00072 #endif//GLM_GTX_orthonormalize
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_orthonormalize
    +
    40 #define GLM_GTX_orthonormalize GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_orthonormalize extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename T>
    +
    57  detail::tmat3x3<T> orthonormalize(
    +
    58  const detail::tmat3x3<T>& m);
    +
    59 
    +
    62  template <typename T>
    +
    63  detail::tvec3<T> orthonormalize(
    +
    64  const detail::tvec3<T>& x,
    +
    65  const detail::tvec3<T>& y);
    +
    66 
    +
    68 }//namespace glm
    +
    69 
    +
    70 #include "orthonormalize.inl"
    +
    71 
    +
    72 #endif//GLM_GTX_orthonormalize
    +
    + - diff --git a/doc/api/a00072_source.html b/doc/api/a00072_source.html index 2de0257f..666129e4 100644 --- a/doc/api/a00072_source.html +++ b/doc/api/a00072_source.html @@ -2,42 +2,31 @@ - + pages.doxy Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,21 +35,23 @@
  • File List
  • + +
    pages.doxy
    -
    +
    -
    00001 
    -
    - - - +
    1 
    +
    + - diff --git a/doc/api/a00073.html b/doc/api/a00073.html index 8b43f7d7..fc6f62d8 100644 --- a/doc/api/a00073.html +++ b/doc/api/a00073.html @@ -2,42 +2,31 @@ - + perpendicular.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,43 +35,46 @@
  • File List
  • + +
    perpendicular.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - + + +

    +

    Functions

    template<typename vecType >
    vecType perp (vecType const &x, vecType const &Normal)
    template<typename vecType >
    vecType perp (vecType const &x, vecType const &Normal)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_perpendicular: Perpendicular

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_perpendicular

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_projection: Projection (dependence)
    +GLM_GTX_projection (dependence)

    Definition in file perpendicular.hpp.

    -
    - - + + - diff --git a/doc/api/a00073_source.html b/doc/api/a00073_source.html index 44885e6f..eca1074a 100644 --- a/doc/api/a00073_source.html +++ b/doc/api/a00073_source.html @@ -2,42 +2,31 @@ - + perpendicular.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,82 +35,84 @@
  • File List
  • + +
    perpendicular.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_perpendicular
    -00040 #define GLM_GTX_perpendicular GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/projection.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_perpendicular extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename vecType> 
    -00058         vecType perp(
    -00059                 vecType const & x, 
    -00060                 vecType const & Normal);
    -00061 
    -00063 }//namespace glm
    -00064 
    -00065 #include "perpendicular.inl"
    -00066 
    -00067 #endif//GLM_GTX_perpendicular
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_perpendicular
    +
    40 #define GLM_GTX_perpendicular GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/projection.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_perpendicular extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename vecType>
    +
    58  vecType perp(
    +
    59  vecType const & x,
    +
    60  vecType const & Normal);
    +
    61 
    +
    63 }//namespace glm
    +
    64 
    +
    65 #include "perpendicular.inl"
    +
    66 
    +
    67 #endif//GLM_GTX_perpendicular
    +
    + - diff --git a/doc/api/a00074.html b/doc/api/a00074.html index 37a061ed..f922a355 100644 --- a/doc/api/a00074.html +++ b/doc/api/a00074.html @@ -2,42 +2,31 @@ - + polar_coordinates.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,43 +35,47 @@
  • File List
  • + +
    polar_coordinates.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + +

    +

    Functions

    template<typename T >
    detail::tvec3< T > euclidean (detail::tvec3< T > const &polar)
    template<typename T >
    detail::tvec3< T > polar (detail::tvec3< T > const &euclidean)
    template<typename T >
    detail::tvec3< T > euclidean (detail::tvec3< T > const &polar)
     
    template<typename T >
    detail::tvec3< T > polar (detail::tvec3< T > const &euclidean)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_polar_coordinates: Polar coordinates

    -
    Date:
    2007-03-06 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_polar_coordinates

    +
    Date
    2007-03-06 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file polar_coordinates.hpp.

    -
    - - + + - diff --git a/doc/api/a00074_source.html b/doc/api/a00074_source.html index 242664e6..ad2ef7e5 100644 --- a/doc/api/a00074_source.html +++ b/doc/api/a00074_source.html @@ -2,42 +2,31 @@ - + polar_coordinates.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,83 +35,85 @@
  • File List
  • + +
    polar_coordinates.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_polar_coordinates
    -00039 #define GLM_GTX_polar_coordinates GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_polar_coordinates extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename T> 
    -00056         detail::tvec3<T> polar(
    -00057                 detail::tvec3<T> const & euclidean);
    -00058 
    -00061         template <typename T> 
    -00062         detail::tvec3<T> euclidean(
    -00063                 detail::tvec3<T> const & polar);
    -00064 
    -00066 }//namespace glm
    -00067 
    -00068 #include "polar_coordinates.inl"
    -00069 
    -00070 #endif//GLM_GTX_polar_coordinates
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_polar_coordinates
    +
    39 #define GLM_GTX_polar_coordinates GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_polar_coordinates extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T>
    +
    56  detail::tvec3<T> polar(
    +
    57  detail::tvec3<T> const & euclidean);
    +
    58 
    +
    61  template <typename T>
    +
    62  detail::tvec3<T> euclidean(
    +
    63  detail::tvec3<T> const & polar);
    +
    64 
    +
    66 }//namespace glm
    +
    67 
    +
    68 #include "polar_coordinates.inl"
    +
    69 
    +
    70 #endif//GLM_GTX_polar_coordinates
    +
    + - diff --git a/doc/api/a00075.html b/doc/api/a00075.html index 0d087b44..3775c554 100644 --- a/doc/api/a00075.html +++ b/doc/api/a00075.html @@ -2,42 +2,31 @@ - + projection.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,41 +35,44 @@
  • File List
  • + +
    projection.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - + + +

    +

    Functions

    template<typename vecType >
    vecType proj (vecType const &x, vecType const &Normal)
    template<typename vecType >
    vecType proj (vecType const &x, vecType const &Normal)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_projection: Projection

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_projection

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file projection.hpp.

    -
    - - + + - diff --git a/doc/api/a00075_source.html b/doc/api/a00075_source.html index 797bb93b..75b45ffd 100644 --- a/doc/api/a00075_source.html +++ b/doc/api/a00075_source.html @@ -2,42 +2,31 @@ - + projection.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,80 +35,82 @@
  • File List
  • + +
    projection.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_projection
    -00039 #define GLM_GTX_projection GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_projection extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename vecType> 
    -00056         vecType proj(
    -00057                 vecType const & x, 
    -00058                 vecType const & Normal);
    -00059 
    -00061 }//namespace glm
    -00062 
    -00063 #include "projection.inl"
    -00064 
    -00065 #endif//GLM_GTX_projection
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_projection
    +
    39 #define GLM_GTX_projection GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_projection extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename vecType>
    +
    56  vecType proj(
    +
    57  vecType const & x,
    +
    58  vecType const & Normal);
    +
    59 
    +
    61 }//namespace glm
    +
    62 
    +
    63 #include "projection.inl"
    +
    64 
    +
    65 #endif//GLM_GTX_projection
    +
    + - diff --git a/doc/api/a00076.html b/doc/api/a00076.html index c92d6836..8243cecc 100644 --- a/doc/api/a00076.html +++ b/doc/api/a00076.html @@ -2,42 +2,31 @@ - + quaternion.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,81 +35,112 @@
  • File List
  • + +
    -
    quaternion.hpp File Reference
    -
    +
    gtc/quaternion.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - + + + + + + + + + + + + + +

    -Classes

    struct  tquat< T >
     Template for quaternion. More...

    +

    Typedefs

    typedef detail::tquat< double > dquat
    typedef detail::tquat< float > fquat
    typedef detail::tquat
    -< highp_float > 
    highp_quat
    typedef detail::tquat
    -< detail::half > 
    hquat
    typedef detail::tquat< lowp_float > lowp_quat
    typedef detail::tquat
    -< mediump_float > 
    mediump_quat
    typedef detail::tquat< float > quat

    +

    typedef detail::tquat< double > dquat
     
    typedef detail::tquat< float > fquat
     
    typedef detail::tquat
    +< highp_float > 
    highp_quat
     
    typedef detail::tquat
    +< detail::half > 
    hquat
     
    typedef detail::tquat< lowp_float > lowp_quat
     
    typedef detail::tquat
    +< mediump_float > 
    mediump_quat
     
    typedef detail::tquat< float > quat
     
    + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    detail::tquat< T > conjugate (detail::tquat< T > const &q)
    template<typename T >
    dot (detail::tquat< T > const &q1, detail::tquat< T > const &q2)
    template<typename T >
    detail::tquat< T > inverse (detail::tquat< T > const &q)
    template<typename T >
    length (detail::tquat< T > const &q)
    template<typename T >
    detail::tmat3x3< T > mat3_cast (detail::tquat< T > const &x)
    template<typename T >
    detail::tmat4x4< T > mat4_cast (detail::tquat< T > const &x)
    template<typename T >
    detail::tquat< T > mix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
    template<typename T >
    detail::tquat< T > normalize (detail::tquat< T > const &q)
    template<typename T >
    detail::tquat< T > quat_cast (detail::tmat3x3< T > const &x)
    template<typename T >
    detail::tquat< T > quat_cast (detail::tmat4x4< T > const &x)
    template<typename T >
    detail::tquat< T > rotate (detail::tquat< T > const &q, typename detail::tquat< T >::value_type const &angle, detail::tvec3< T > const &v)
    template<typename valType >
    valType angle (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
     
    template<typename valType >
    detail::tquat< valType > angleAxis (valType const &angle, detail::tvec3< valType > const &axis)
     
    template<typename valType >
    detail::tvec3< valType > axis (detail::tquat< valType > const &x)
     
    template<typename T >
    detail::tquat< T > conjugate (detail::tquat< T > const &q)
     
    template<typename T >
    dot (detail::tquat< T > const &q1, detail::tquat< T > const &q2)
     
    template<typename T >
    detail::tvec3< T > eulerAngles (detail::tquat< T > const &x)
     
    template<typename T >
    detail::tquat< T > inverse (detail::tquat< T > const &q)
     
    template<typename T >
    length (detail::tquat< T > const &q)
     
    template<typename T >
    detail::tmat3x3< T > mat3_cast (detail::tquat< T > const &x)
     
    template<typename T >
    detail::tmat4x4< T > mat4_cast (detail::tquat< T > const &x)
     
    template<typename T >
    detail::tquat< T > mix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
     
    template<typename T >
    detail::tquat< T > normalize (detail::tquat< T > const &q)
     
    template<typename T >
    detail::tquat< T > quat_cast (detail::tmat3x3< T > const &x)
     
    template<typename T >
    detail::tquat< T > quat_cast (detail::tmat4x4< T > const &x)
     
    template<typename T >
    detail::tquat< T > rotate (detail::tquat< T > const &q, typename detail::tquat< T >::value_type const &angle, detail::tvec3< T > const &axis)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_quaternion: Quaternion types and functions

    -
    Date:
    2009-05-21 / 2011-06-05
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_quaternion

    +
    Date
    2009-05-21 / 2011-06-05
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    +GLM_GTC_half_float (dependence)

    Definition in file gtc/quaternion.hpp.

    -
    - - + + - diff --git a/doc/api/a00076_source.html b/doc/api/a00076_source.html index f5860b19..38ea8e01 100644 --- a/doc/api/a00076_source.html +++ b/doc/api/a00076_source.html @@ -2,42 +2,31 @@ - + quaternion.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,234 +35,260 @@
  • File List
  • + +
    -
    quaternion.hpp
    -
    +
    gtc/quaternion.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTC_quaternion
    -00040 #define GLM_GTC_quaternion GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtc/half_float.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTC_quaternion extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm{
    -00051 namespace detail
    -00052 {
    -00056         template <typename T> 
    -00057         struct tquat// : public genType<T, tquat>
    -00058         {
    -00059         enum ctor{null};
    -00060         
    -00061         typedef T value_type;
    -00062         typedef std::size_t size_type;
    -00063 
    -00064         public:
    -00065                 value_type x, y, z, w;
    -00066         
    -00067         GLM_FUNC_DECL size_type length() const;
    -00068 
    -00069                 // Constructors
    -00070                 tquat();
    -00071                 explicit tquat(
    -00072                         value_type const & s, 
    -00073                         glm::detail::tvec3<T> const & v);
    -00074                 explicit tquat(
    -00075                         value_type const & w, 
    -00076                         value_type const & x, 
    -00077                         value_type const & y, 
    -00078                         value_type const & z);
    -00079 
    -00080                 // Convertions
    -00081                 //explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
    -00083                 explicit tquat(
    -00084                         tvec3<T> const & eulerAngles);
    -00085                 explicit tquat(
    -00086                         tmat3x3<T> const & m);
    -00087                 explicit tquat(
    -00088                         tmat4x4<T> const & m);
    -00089 
    -00090                 // Accesses
    -00091                 value_type & operator[](int i);
    -00092                 value_type const & operator[](int i) const;
    -00093 
    -00094                 // Operators
    -00095                 tquat<T> & operator*=(value_type const & s);
    -00096                 tquat<T> & operator/=(value_type const & s);
    -00097         };
    -00098 
    -00099         template <typename T> 
    -00100         detail::tquat<T> operator- (
    -00101                 detail::tquat<T> const & q);
    -00102 
    -00103         template <typename T> 
    -00104         detail::tquat<T> operator+ ( 
    -00105                 detail::tquat<T> const & q, 
    -00106                 detail::tquat<T> const & p); 
    -00107 
    -00108         template <typename T> 
    -00109         detail::tquat<T> operator* ( 
    -00110                 detail::tquat<T> const & q, 
    -00111                 detail::tquat<T> const & p); 
    -00112 
    -00113         template <typename T> 
    -00114         detail::tvec3<T> operator* (
    -00115                 detail::tquat<T> const & q, 
    -00116                 detail::tvec3<T> const & v);
    -00117 
    -00118         template <typename T> 
    -00119         detail::tvec3<T> operator* (
    -00120                 detail::tvec3<T> const & v,
    -00121                 detail::tquat<T> const & q);
    -00122 
    -00123         template <typename T> 
    -00124         detail::tvec4<T> operator* (
    -00125                 detail::tquat<T> const & q, 
    -00126                 detail::tvec4<T> const & v);
    -00127 
    -00128         template <typename T> 
    -00129         detail::tvec4<T> operator* (
    -00130                 detail::tvec4<T> const & v,
    -00131                 detail::tquat<T> const & q);
    -00132 
    -00133         template <typename T> 
    -00134         detail::tquat<T> operator* (
    -00135                 detail::tquat<T> const & q, 
    -00136                 typename detail::tquat<T>::value_type const & s);
    -00137 
    -00138         template <typename T> 
    -00139         detail::tquat<T> operator* (
    -00140                 typename detail::tquat<T>::value_type const & s,
    -00141                 detail::tquat<T> const & q);
    -00142 
    -00143         template <typename T> 
    -00144         detail::tquat<T> operator/ (
    -00145                 detail::tquat<T> const & q, 
    -00146                 typename detail::tquat<T>::value_type const & s);
    -00147 
    -00148 } //namespace detail
    -00149 
    -00152 
    -00156     template <typename T> 
    -00157     T length(
    -00158                 detail::tquat<T> const & q);
    -00159 
    -00163         template <typename T> 
    -00164         detail::tquat<T> normalize(
    -00165                 detail::tquat<T> const & q);
    -00166                 
    -00170         template <typename T> 
    -00171         T dot(
    -00172                 detail::tquat<T> const & q1, 
    -00173                 detail::tquat<T> const & q2);
    -00174 
    -00178         template <typename T> 
    -00179         detail::tquat<T> mix(
    -00180                 detail::tquat<T> const & x, 
    -00181                 detail::tquat<T> const & y, 
    -00182                 T const & a);
    -00183                 
    -00187     template <typename T> 
    -00188         detail::tquat<T> conjugate(
    -00189                 detail::tquat<T> const & q);
    -00190 
    -00194     template <typename T> 
    -00195         detail::tquat<T> inverse(
    -00196                 detail::tquat<T> const & q);
    -00197 
    -00201         template <typename T> 
    -00202         detail::tquat<T> rotate(
    -00203                 detail::tquat<T> const & q, 
    -00204                 typename detail::tquat<T>::value_type const & angle, 
    -00205                 detail::tvec3<T> const & v);
    -00206 
    -00210     template <typename T> 
    -00211         detail::tmat3x3<T> mat3_cast(
    -00212                 detail::tquat<T> const & x);
    -00213 
    -00217         template <typename T> 
    -00218         detail::tmat4x4<T> mat4_cast(
    -00219                 detail::tquat<T> const & x);
    -00220 
    -00224         template <typename T> 
    -00225         detail::tquat<T> quat_cast(
    -00226                 detail::tmat3x3<T> const & x);
    -00227 
    -00231         template <typename T> 
    -00232         detail::tquat<T> quat_cast(
    -00233                 detail::tmat4x4<T> const & x);
    -00234 
    -00238     typedef detail::tquat<float> quat;
    -00239 
    -00243         typedef detail::tquat<detail::half>     hquat;
    -00244 
    -00248         typedef detail::tquat<float>    fquat;
    -00249 
    -00253         typedef detail::tquat<double>   dquat;
    -00254 
    -00258         typedef detail::tquat<lowp_float>               lowp_quat;
    -00259 
    -00263         typedef detail::tquat<mediump_float>    mediump_quat;
    -00264 
    -00268         typedef detail::tquat<highp_float>              highp_quat;
    -00269 
    -00271 } //namespace glm
    -00272 
    -00273 #include "quaternion.inl"
    -00274 
    -00275 #endif//GLM_GTC_quaternion
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTC_quaternion
    +
    40 #define GLM_GTC_quaternion GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/half_float.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTC_quaternion extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm{
    +
    51 namespace detail
    +
    52 {
    +
    53  template <typename T>
    +
    54  struct tquat// : public genType<T, tquat>
    +
    55  {
    +
    56  enum ctor{null};
    +
    57 
    +
    58  typedef T value_type;
    +
    59  typedef std::size_t size_type;
    +
    60 
    +
    61  public:
    +
    62  value_type x, y, z, w;
    +
    63 
    +
    64  GLM_FUNC_DECL size_type length() const;
    +
    65 
    +
    66  // Constructors
    +
    67  tquat();
    +
    68  explicit tquat(
    +
    69  value_type const & s,
    +
    70  glm::detail::tvec3<T> const & v);
    +
    71  explicit tquat(
    +
    72  value_type const & w,
    +
    73  value_type const & x,
    +
    74  value_type const & y,
    +
    75  value_type const & z);
    +
    76 
    +
    77  // Convertions
    +
    78 
    +
    80  explicit tquat(
    +
    81  tvec3<T> const & eulerAngles);
    +
    82  explicit tquat(
    +
    83  tmat3x3<T> const & m);
    +
    84  explicit tquat(
    +
    85  tmat4x4<T> const & m);
    +
    86 
    +
    87  // Accesses
    +
    88  value_type & operator[](int i);
    +
    89  value_type const & operator[](int i) const;
    +
    90 
    +
    91  // Operators
    +
    92  tquat<T> & operator*=(value_type const & s);
    +
    93  tquat<T> & operator/=(value_type const & s);
    +
    94  };
    +
    95 
    +
    96  template <typename T>
    +
    97  detail::tquat<T> operator- (
    +
    98  detail::tquat<T> const & q);
    +
    99 
    +
    100  template <typename T>
    +
    101  detail::tquat<T> operator+ (
    +
    102  detail::tquat<T> const & q,
    +
    103  detail::tquat<T> const & p);
    +
    104 
    +
    105  template <typename T>
    +
    106  detail::tquat<T> operator* (
    +
    107  detail::tquat<T> const & q,
    +
    108  detail::tquat<T> const & p);
    +
    109 
    +
    110  template <typename T>
    +
    111  detail::tvec3<T> operator* (
    +
    112  detail::tquat<T> const & q,
    +
    113  detail::tvec3<T> const & v);
    +
    114 
    +
    115  template <typename T>
    +
    116  detail::tvec3<T> operator* (
    +
    117  detail::tvec3<T> const & v,
    +
    118  detail::tquat<T> const & q);
    +
    119 
    +
    120  template <typename T>
    +
    121  detail::tvec4<T> operator* (
    +
    122  detail::tquat<T> const & q,
    +
    123  detail::tvec4<T> const & v);
    +
    124 
    +
    125  template <typename T>
    +
    126  detail::tvec4<T> operator* (
    +
    127  detail::tvec4<T> const & v,
    +
    128  detail::tquat<T> const & q);
    +
    129 
    +
    130  template <typename T>
    +
    131  detail::tquat<T> operator* (
    +
    132  detail::tquat<T> const & q,
    +
    133  typename detail::tquat<T>::value_type const & s);
    +
    134 
    +
    135  template <typename T>
    +
    136  detail::tquat<T> operator* (
    +
    137  typename detail::tquat<T>::value_type const & s,
    +
    138  detail::tquat<T> const & q);
    +
    139 
    +
    140  template <typename T>
    +
    141  detail::tquat<T> operator/ (
    +
    142  detail::tquat<T> const & q,
    +
    143  typename detail::tquat<T>::value_type const & s);
    +
    144 
    +
    145 } //namespace detail
    +
    146 
    +
    149 
    +
    153  template <typename T>
    +
    154  T length(
    +
    155  detail::tquat<T> const & q);
    +
    156 
    +
    160  template <typename T>
    +
    161  detail::tquat<T> normalize(
    +
    162  detail::tquat<T> const & q);
    +
    163 
    +
    167  template <typename T>
    +
    168  T dot(
    +
    169  detail::tquat<T> const & q1,
    +
    170  detail::tquat<T> const & q2);
    +
    171 
    +
    175  template <typename T>
    +
    176  detail::tquat<T> mix(
    +
    177  detail::tquat<T> const & x,
    +
    178  detail::tquat<T> const & y,
    +
    179  T const & a);
    +
    180 
    +
    184  template <typename T>
    +
    185  detail::tquat<T> conjugate(
    +
    186  detail::tquat<T> const & q);
    +
    187 
    +
    191  template <typename T>
    +
    192  detail::tquat<T> inverse(
    +
    193  detail::tquat<T> const & q);
    +
    194 
    +
    202  template <typename T>
    +
    203  detail::tquat<T> rotate(
    +
    204  detail::tquat<T> const & q,
    +
    205  typename detail::tquat<T>::value_type const & angle,
    +
    206  detail::tvec3<T> const & axis);
    +
    207 
    +
    211  template <typename T>
    +
    212  detail::tvec3<T> eulerAngles(
    +
    213  detail::tquat<T> const & x);
    +
    214 
    +
    218  template <typename T>
    +
    219  detail::tmat3x3<T> mat3_cast(
    +
    220  detail::tquat<T> const & x);
    +
    221 
    +
    225  template <typename T>
    +
    226  detail::tmat4x4<T> mat4_cast(
    +
    227  detail::tquat<T> const & x);
    +
    228 
    +
    232  template <typename T>
    +
    233  detail::tquat<T> quat_cast(
    +
    234  detail::tmat3x3<T> const & x);
    +
    235 
    +
    239  template <typename T>
    +
    240  detail::tquat<T> quat_cast(
    +
    241  detail::tmat4x4<T> const & x);
    +
    242 
    +
    246  template <typename valType>
    +
    247  valType angle(
    +
    248  detail::tquat<valType> const & x);
    +
    249 
    +
    253  template <typename valType>
    +
    254  detail::tvec3<valType> axis(
    +
    255  detail::tquat<valType> const & x);
    +
    256 
    +
    265  template <typename valType>
    +
    266  detail::tquat<valType> angleAxis(
    +
    267  valType const & angle,
    +
    268  valType const & x,
    +
    269  valType const & y,
    +
    270  valType const & z);
    +
    271 
    +
    278  template <typename valType>
    +
    279  detail::tquat<valType> angleAxis(
    +
    280  valType const & angle,
    +
    281  detail::tvec3<valType> const & axis);
    +
    282 
    +
    286  typedef detail::tquat<float> quat;
    +
    287 
    +
    291  typedef detail::tquat<detail::half> hquat;
    +
    292 
    +
    296  typedef detail::tquat<float> fquat;
    +
    297 
    +
    301  typedef detail::tquat<double> dquat;
    +
    302 
    +
    306  typedef detail::tquat<lowp_float> lowp_quat;
    +
    307 
    +
    311  typedef detail::tquat<mediump_float> mediump_quat;
    +
    312 
    +
    316  typedef detail::tquat<highp_float> highp_quat;
    +
    317 
    +
    319 } //namespace glm
    +
    320 
    +
    321 #include "quaternion.inl"
    +
    322 
    +
    323 #endif//GLM_GTC_quaternion
    +
    + - diff --git a/doc/api/a00077.html b/doc/api/a00077.html index ef6f1775..f965b773 100644 --- a/doc/api/a00077.html +++ b/doc/api/a00077.html @@ -2,42 +2,31 @@ - + quaternion.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,89 +35,103 @@
  • File List
  • + +
    -
    quaternion.hpp File Reference
    -
    +
    gtx/quaternion.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    valType angle (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
    template<typename valType >
    detail::tquat< valType > angleAxis (valType const &angle, detail::tvec3< valType > const &axis)
    template<typename valType >
    detail::tvec3< valType > axis (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tvec3< valType > cross (detail::tquat< valType > const &q, detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tvec3< valType > cross (detail::tvec3< valType > const &v, detail::tquat< valType > const &q)
    template<typename valType >
    detail::tvec3< valType > eulerAngles (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tquat< valType > exp (detail::tquat< valType > const &q, valType const &exponent)
    template<typename valType >
    valType extractRealComponent (detail::tquat< valType > const &q)
    template<typename T >
    detail::tquat< T > fastMix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
    template<typename valType >
    detail::tquat< valType > intermediate (detail::tquat< valType > const &prev, detail::tquat< valType > const &curr, detail::tquat< valType > const &next)
    template<typename valType >
    detail::tquat< valType > log (detail::tquat< valType > const &q)
    template<typename valType >
    valType pitch (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tquat< valType > pow (detail::tquat< valType > const &x, valType const &y)
    template<typename valType >
    valType roll (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tvec3< valType > rotate (detail::tquat< valType > const &q, detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tvec4< valType > rotate (detail::tquat< valType > const &q, detail::tvec4< valType > const &v)
    template<typename T >
    detail::tquat< T > shortMix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
    template<typename valType >
    detail::tquat< valType > squad (detail::tquat< valType > const &q1, detail::tquat< valType > const &q2, detail::tquat< valType > const &s1, detail::tquat< valType > const &s2, valType const &h)
    template<typename valType >
    detail::tmat3x3< valType > toMat3 (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tmat4x4< valType > toMat4 (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tquat< valType > toQuat (detail::tmat3x3< valType > const &x)
    template<typename valType >
    detail::tquat< valType > toQuat (detail::tmat4x4< valType > const &x)
    template<typename valType >
    valType yaw (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tvec3< valType > cross (detail::tquat< valType > const &q, detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tvec3< valType > cross (detail::tvec3< valType > const &v, detail::tquat< valType > const &q)
     
    template<typename valType >
    detail::tvec3< valType > eulerAngles (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > exp (detail::tquat< valType > const &q, valType const &exponent)
     
    template<typename valType >
    valType extractRealComponent (detail::tquat< valType > const &q)
     
    template<typename T >
    detail::tquat< T > fastMix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
     
    template<typename valType >
    detail::tquat< valType > intermediate (detail::tquat< valType > const &prev, detail::tquat< valType > const &curr, detail::tquat< valType > const &next)
     
    template<typename valType >
    detail::tquat< valType > log (detail::tquat< valType > const &q)
     
    template<typename valType >
    valType pitch (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > pow (detail::tquat< valType > const &x, valType const &y)
     
    template<typename valType >
    valType roll (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tvec3< valType > rotate (detail::tquat< valType > const &q, detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tvec4< valType > rotate (detail::tquat< valType > const &q, detail::tvec4< valType > const &v)
     
    template<typename T >
    detail::tquat< T > shortMix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
     
    template<typename valType >
    detail::tquat< valType > squad (detail::tquat< valType > const &q1, detail::tquat< valType > const &q2, detail::tquat< valType > const &s1, detail::tquat< valType > const &s2, valType const &h)
     
    template<typename valType >
    detail::tmat3x3< valType > toMat3 (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tmat4x4< valType > toMat4 (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > toQuat (detail::tmat3x3< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > toQuat (detail::tmat4x4< valType > const &x)
     
    template<typename valType >
    valType yaw (detail::tquat< valType > const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_quaternion: Extented quaternion types and functions

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_quaternion

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    +GLM_GTX_extented_min_max (dependence)

    Definition in file gtx/quaternion.hpp.

    -
    - - + + - diff --git a/doc/api/a00077_source.html b/doc/api/a00077_source.html index 69b06ae0..43678f17 100644 --- a/doc/api/a00077_source.html +++ b/doc/api/a00077_source.html @@ -2,42 +2,31 @@ - + quaternion.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,197 +35,179 @@
  • File List
  • + +
    -
    quaternion.hpp
    -
    +
    gtx/quaternion.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_quaternion
    -00040 #define GLM_GTX_quaternion GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtc/quaternion.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_quaternion extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename valType> 
    -00058         detail::tvec3<valType> cross(
    -00059                 detail::tquat<valType> const & q, 
    -00060                 detail::tvec3<valType> const & v);
    -00061 
    -00064         template <typename valType> 
    -00065         detail::tvec3<valType> cross(
    -00066                 detail::tvec3<valType> const & v, 
    -00067                 detail::tquat<valType> const & q);
    -00068 
    -00072         template <typename valType> 
    -00073         detail::tquat<valType> squad(
    -00074                 detail::tquat<valType> const & q1, 
    -00075                 detail::tquat<valType> const & q2, 
    -00076                 detail::tquat<valType> const & s1, 
    -00077                 detail::tquat<valType> const & s2, 
    -00078                 valType const & h);
    -00079 
    -00082         template <typename valType> 
    -00083         detail::tquat<valType> intermediate(
    -00084                 detail::tquat<valType> const & prev, 
    -00085                 detail::tquat<valType> const & curr, 
    -00086                 detail::tquat<valType> const & next);
    -00087 
    -00090     template <typename valType> 
    -00091         detail::tquat<valType> exp(
    -00092                 detail::tquat<valType> const & q, 
    -00093                 valType const & exponent);
    -00094 
    -00097     template <typename valType> 
    -00098         detail::tquat<valType> log(
    -00099                 detail::tquat<valType> const & q);
    -00100 
    -00103     template <typename valType> 
    -00104         detail::tquat<valType> pow(
    -00105                 detail::tquat<valType> const & x, 
    -00106                 valType const & y);
    -00107 
    -00110         //template <typename valType> 
    -00111         //detail::tquat<valType> sqrt(
    -00112         //      detail::tquat<valType> const & q);
    -00113 
    -00116         template <typename valType> 
    -00117         detail::tvec3<valType> rotate(
    -00118                 detail::tquat<valType> const & q, 
    -00119                 detail::tvec3<valType> const & v);
    -00120 
    -00123         template <typename valType> 
    -00124         detail::tvec4<valType> rotate(
    -00125                 detail::tquat<valType> const & q, 
    -00126                 detail::tvec4<valType> const & v);
    -00127                 
    -00130         template <typename valType> 
    -00131         valType angle(
    -00132                 detail::tquat<valType> const & x);
    -00133 
    -00136         template <typename valType> 
    -00137         detail::tvec3<valType> axis(
    -00138                 detail::tquat<valType> const & x);
    -00139 
    -00142         template <typename valType> 
    -00143         detail::tquat<valType> angleAxis(
    -00144                 valType const & angle, 
    -00145                 valType const & x, 
    -00146                 valType const & y, 
    -00147                 valType const & z);
    -00148 
    -00151         template <typename valType> 
    -00152         detail::tquat<valType> angleAxis(
    -00153                 valType const & angle, 
    -00154                 detail::tvec3<valType> const & axis);
    -00155 
    -00158         template <typename valType> 
    -00159         valType extractRealComponent(
    -00160                 detail::tquat<valType> const & q);
    -00161 
    -00164         template <typename valType> 
    -00165         valType roll(
    -00166                 detail::tquat<valType> const & x);
    -00167 
    -00170     template <typename valType> 
    -00171         valType pitch(
    -00172                 detail::tquat<valType> const & x);
    -00173 
    -00176         template <typename valType> 
    -00177         valType yaw(
    -00178                 detail::tquat<valType> const & x);
    -00179                 
    -00182         template <typename valType> 
    -00183         detail::tvec3<valType> eulerAngles(
    -00184                 detail::tquat<valType> const & x);
    -00185 
    -00188     template <typename valType> 
    -00189         detail::tmat3x3<valType> toMat3(
    -00190                 detail::tquat<valType> const & x){return mat3_cast(x);}
    -00191 
    -00194         template <typename valType> 
    -00195         detail::tmat4x4<valType> toMat4(
    -00196                 detail::tquat<valType> const & x){return mat4_cast(x);}
    -00197 
    -00200         template <typename valType> 
    -00201         detail::tquat<valType> toQuat(
    -00202                 detail::tmat3x3<valType> const & x){return quat_cast(x);}
    -00203 
    -00206         template <typename valType> 
    -00207         detail::tquat<valType> toQuat(
    -00208                 detail::tmat4x4<valType> const & x){return quat_cast(x);}
    -00209 
    -00212         template <typename T>
    -00213         detail::tquat<T> shortMix(
    -00214                 detail::tquat<T> const & x, 
    -00215                 detail::tquat<T> const & y, 
    -00216                 T const & a);
    -00217 
    -00220         template <typename T>
    -00221         detail::tquat<T> fastMix(
    -00222                 detail::tquat<T> const & x, 
    -00223                 detail::tquat<T> const & y, 
    -00224                 T const & a);
    -00225 
    -00227 }//namespace glm
    -00228 
    -00229 #include "quaternion.inl"
    -00230 
    -00231 #endif//GLM_GTX_quaternion
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_quaternion
    +
    40 #define GLM_GTX_quaternion GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/quaternion.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_quaternion extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    58  template <typename valType>
    +
    59  detail::tvec3<valType> cross(
    +
    60  detail::tquat<valType> const & q,
    +
    61  detail::tvec3<valType> const & v);
    +
    62 
    +
    66  template <typename valType>
    +
    67  detail::tvec3<valType> cross(
    +
    68  detail::tvec3<valType> const & v,
    +
    69  detail::tquat<valType> const & q);
    +
    70 
    +
    75  template <typename valType>
    +
    76  detail::tquat<valType> squad(
    +
    77  detail::tquat<valType> const & q1,
    +
    78  detail::tquat<valType> const & q2,
    +
    79  detail::tquat<valType> const & s1,
    +
    80  detail::tquat<valType> const & s2,
    +
    81  valType const & h);
    +
    82 
    +
    86  template <typename valType>
    +
    87  detail::tquat<valType> intermediate(
    +
    88  detail::tquat<valType> const & prev,
    +
    89  detail::tquat<valType> const & curr,
    +
    90  detail::tquat<valType> const & next);
    +
    91 
    +
    95  template <typename valType>
    +
    96  detail::tquat<valType> exp(
    +
    97  detail::tquat<valType> const & q,
    +
    98  valType const & exponent);
    +
    99 
    +
    103  template <typename valType>
    +
    104  detail::tquat<valType> log(
    +
    105  detail::tquat<valType> const & q);
    +
    106 
    +
    110  template <typename valType>
    +
    111  detail::tquat<valType> pow(
    +
    112  detail::tquat<valType> const & x,
    +
    113  valType const & y);
    +
    114 
    +
    118  //template <typename valType>
    +
    119  //detail::tquat<valType> sqrt(
    +
    120  // detail::tquat<valType> const & q);
    +
    121 
    +
    125  template <typename valType>
    +
    126  detail::tvec3<valType> rotate(
    +
    127  detail::tquat<valType> const & q,
    +
    128  detail::tvec3<valType> const & v);
    +
    129 
    +
    133  template <typename valType>
    +
    134  detail::tvec4<valType> rotate(
    +
    135  detail::tquat<valType> const & q,
    +
    136  detail::tvec4<valType> const & v);
    +
    137 
    +
    141  template <typename valType>
    +
    142  valType extractRealComponent(
    +
    143  detail::tquat<valType> const & q);
    +
    144 
    +
    148  template <typename valType>
    +
    149  valType roll(
    +
    150  detail::tquat<valType> const & x);
    +
    151 
    +
    155  template <typename valType>
    +
    156  valType pitch(
    +
    157  detail::tquat<valType> const & x);
    +
    158 
    +
    162  template <typename valType>
    +
    163  valType yaw(
    +
    164  detail::tquat<valType> const & x);
    +
    165 
    +
    169  template <typename valType>
    +
    170  detail::tvec3<valType> eulerAngles(
    +
    171  detail::tquat<valType> const & x);
    +
    172 
    +
    176  template <typename valType>
    +
    177  detail::tmat3x3<valType> toMat3(
    +
    178  detail::tquat<valType> const & x){return mat3_cast(x);}
    +
    179 
    +
    183  template <typename valType>
    +
    184  detail::tmat4x4<valType> toMat4(
    +
    185  detail::tquat<valType> const & x){return mat4_cast(x);}
    +
    186 
    +
    190  template <typename valType>
    +
    191  detail::tquat<valType> toQuat(
    +
    192  detail::tmat3x3<valType> const & x){return quat_cast(x);}
    +
    193 
    +
    197  template <typename valType>
    +
    198  detail::tquat<valType> toQuat(
    +
    199  detail::tmat4x4<valType> const & x){return quat_cast(x);}
    +
    200 
    +
    204  template <typename T>
    +
    205  detail::tquat<T> shortMix(
    +
    206  detail::tquat<T> const & x,
    +
    207  detail::tquat<T> const & y,
    +
    208  T const & a);
    +
    209 
    +
    213  template <typename T>
    +
    214  detail::tquat<T> fastMix(
    +
    215  detail::tquat<T> const & x,
    +
    216  detail::tquat<T> const & y,
    +
    217  T const & a);
    +
    218 
    +
    220 }//namespace glm
    +
    221 
    +
    222 #include "quaternion.inl"
    +
    223 
    +
    224 #endif//GLM_GTX_quaternion
    +
    + - diff --git a/doc/api/a00078.html b/doc/api/a00078.html index ca7bf7bd..f2686fbe 100644 --- a/doc/api/a00078.html +++ b/doc/api/a00078.html @@ -2,42 +2,31 @@ - + random.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,56 +35,64 @@
  • File List
  • + +
    -
    random.hpp File Reference
    -
    +
    gtc/random.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    ballRand (T const &Radius)
    template<typename T >
    detail::tvec2< T > circularRand (T const &Radius)
    template<typename T >
    detail::tvec2< T > diskRand (T const &Radius)
    template<typename genType >
    genType gaussRand (genType const &Mean, genType const &Deviation)
    template<typename genType >
    genType linearRand (genType const &Min, genType const &Max)
    template<typename T >
    detail::tvec3< T > sphericalRand (T const &Radius)
    template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    ballRand (T const &Radius)
     
    template<typename T >
    detail::tvec2< T > circularRand (T const &Radius)
     
    template<typename T >
    detail::tvec2< T > diskRand (T const &Radius)
     
    template<typename genType >
    genType gaussRand (genType const &Mean, genType const &Deviation)
     
    template<typename genType >
    genType linearRand (genType const &Min, genType const &Max)
     
    template<typename T >
    detail::tvec3< T > sphericalRand (T const &Radius)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_random: Random number generation

    -
    Date:
    2011-09-18 / 2011-09-18
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_random

    +
    Date
    2011-09-18 / 2011-09-18
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    +GLM_GTC_half_float (dependence)
    -GLM_GTX_random: Random (extended)
    +gtx_random (extended)

    Definition in file gtc/random.hpp.

    -
    - - + + - diff --git a/doc/api/a00078_source.html b/doc/api/a00078_source.html index 769708ce..a04658d6 100644 --- a/doc/api/a00078_source.html +++ b/doc/api/a00078_source.html @@ -2,42 +2,31 @@ - + random.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,104 +35,106 @@
  • File List
  • + +
    -
    random.hpp
    -
    +
    gtc/random.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 #ifndef GLM_GTC_random
    -00041 #define GLM_GTC_random GLM_VERSION
    -00042 
    -00043 // Dependency:
    -00044 #include "../glm.hpp"
    -00045 #include "../gtc/half_float.hpp"
    -00046 
    -00047 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00048 #       pragma message("GLM: GLM_GTC_random extension included")
    -00049 #endif
    -00050 
    -00051 namespace glm
    -00052 {
    -00055         
    -00062         template <typename genType> 
    -00063         genType linearRand(
    -00064                 genType const & Min, 
    -00065                 genType const & Max);
    -00066 
    -00072         template <typename genType>
    -00073         genType gaussRand(
    -00074                 genType const & Mean, 
    -00075                 genType const & Deviation);
    -00076         
    -00081         template <typename T> 
    -00082         detail::tvec2<T> circularRand(
    -00083                 T const & Radius); 
    -00084         
    -00089         template <typename T> 
    -00090         detail::tvec3<T> sphericalRand(
    -00091                 T const & Radius); 
    -00092         
    -00097         template <typename T> 
    -00098         detail::tvec2<T> diskRand(
    -00099                 T const & Radius); 
    -00100         
    -00105         template <typename T>
    -00106         GLM_FUNC_QUALIFIER detail::tvec3<T> ballRand(
    -00107                 T const & Radius);
    -00108         
    -00110 }//namespace glm
    -00111 
    -00112 #include "random.inl"
    -00113 
    -00114 #endif//GLM_GTC_random
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 #ifndef GLM_GTC_random
    +
    41 #define GLM_GTC_random GLM_VERSION
    +
    42 
    +
    43 // Dependency:
    +
    44 #include "../glm.hpp"
    +
    45 #include "../gtc/half_float.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    48 # pragma message("GLM: GLM_GTC_random extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    62  template <typename genType>
    +
    63  genType linearRand(
    +
    64  genType const & Min,
    +
    65  genType const & Max);
    +
    66 
    +
    72  template <typename genType>
    +
    73  genType gaussRand(
    +
    74  genType const & Mean,
    +
    75  genType const & Deviation);
    +
    76 
    +
    81  template <typename T>
    +
    82  detail::tvec2<T> circularRand(
    +
    83  T const & Radius);
    +
    84 
    +
    89  template <typename T>
    +
    90  detail::tvec3<T> sphericalRand(
    +
    91  T const & Radius);
    +
    92 
    +
    97  template <typename T>
    +
    98  detail::tvec2<T> diskRand(
    +
    99  T const & Radius);
    +
    100 
    +
    105  template <typename T>
    +
    106  GLM_FUNC_QUALIFIER detail::tvec3<T> ballRand(
    +
    107  T const & Radius);
    +
    108 
    +
    110 }//namespace glm
    +
    111 
    +
    112 #include "random.inl"
    +
    113 
    +
    114 #endif//GLM_GTC_random
    +
    + - diff --git a/doc/api/a00079.html b/doc/api/a00079.html deleted file mode 100644 index f95e0f69..00000000 --- a/doc/api/a00079.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - -random.hpp File Reference - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -
    -
    random.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    -template<typename T >
    compRand1 ()
    -template<>
    float compRand1 ()
    -template<typename T >
    compRand1 (T Min, T Max)
    -template<typename T >
    detail::tvec2< T > compRand2 (T Min, T Max)
    -template<typename T >
    detail::tvec2< T > compRand2 (const detail::tvec2< T > &Min, const detail::tvec2< T > &Max)
    -template<typename T >
    detail::tvec3< T > compRand3 (T Min, T Max)
    -template<typename T >
    detail::tvec3< T > compRand3 (const detail::tvec3< T > &Min, const detail::tvec3< T > &Max)
    -template<typename T >
    detail::tvec4< T > compRand4 (T Min, T Max)
    -template<typename T >
    detail::tvec3< T > compRand4 (const detail::tvec4< T > &Min, const detail::tvec4< T > &Max)
    -template<typename T >
    gaussRand1 (T mean, T std_deviation)
    -template<typename T >
    detail::tvec2< T > gaussRand2 (T mean, T std_deviation)
    -template<typename T >
    detail::tvec2< T > gaussRand2 (const detail::tvec2< T > &mean, T std_deviation)
    -template<typename T >
    detail::tvec2< T > gaussRand2 (T mean, const detail::tvec2< T > &std_deviation)
    -template<typename T >
    detail::tvec2< T > gaussRand2 (const detail::tvec2< T > &mean, const detail::tvec2< T > &std_deviation)
    -template<typename T >
    detail::tvec3< T > gaussRand3 (T mean, T std_deviation)
    -template<typename T >
    detail::tvec3< T > gaussRand3 (const detail::tvec3< T > &mean, T std_deviation)
    -template<typename T >
    detail::tvec3< T > gaussRand3 (T mean, const detail::tvec3< T > &std_deviation)
    -template<typename T >
    detail::tvec3< T > gaussRand3 (const detail::tvec3< T > &mean, const detail::tvec3< T > &std_deviation)
    -template<typename T >
    detail::tvec4< T > gaussRand4 (T mean, T std_deviation)
    -template<typename T >
    detail::tvec4< T > gaussRand4 (const detail::tvec4< T > &mean, T std_deviation)
    -template<typename T >
    detail::tvec4< T > gaussRand4 (T mean, const detail::tvec4< T > &std_deviation)
    -template<typename T >
    detail::tvec4< T > gaussRand4 (const detail::tvec4< T > &mean, const detail::tvec4< T > &std_deviation)
    -template<typename T >
    detail::tvec2< T > normalizedRand2 ()
    -template<typename T >
    detail::tvec2< T > normalizedRand2 (T Min, T Max)
    -template<typename T >
    detail::tvec3< T > normalizedRand3 ()
    -template<typename T >
    detail::tvec3< T > normalizedRand3 (T Min, T Max)
    template<typename T >
    signedRand1 ()
    -template<>
    float signedRand1 ()
    -template<typename T >
    detail::tvec2< T > signedRand2 ()
    -template<typename T >
    detail::tvec3< T > signedRand3 ()
    -template<typename T >
    detail::tvec4< T > signedRand4 ()
    -template<typename T >
    detail::tvec2< T > vecRand2 ()
    -template<typename T >
    detail::tvec2< T > vecRand2 (T MinRadius, T MaxRadius)
    -template<typename T >
    detail::tvec3< T > vecRand3 ()
    -template<typename T >
    detail::tvec3< T > vecRand3 (T MinRadius, T MaxRadius)
    -template<typename T >
    detail::tvec4< T > vecRand4 ()
    -template<typename T >
    detail::tvec4< T > vecRand4 (T MinRadius, T MaxRadius)
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_random: Random

    -
    Date:
    2006-01-16 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    - -

    Definition in file gtx/random.hpp.

    -
    - - - - - - diff --git a/doc/api/a00079_source.html b/doc/api/a00079_source.html index 2da5065c..ab502088 100644 --- a/doc/api/a00079_source.html +++ b/doc/api/a00079_source.html @@ -2,42 +2,31 @@ - + random.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,122 +35,51 @@
  • File List
  • + +
    -
    random.hpp
    -
    +
    gtx/random.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_random
    -00040 #define GLM_GTX_random GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtc/random.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_random extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057     template <typename T> T signedRand1();
    -00058         
    -00059         template <> float signedRand1(); 
    -00060     template <> double signedRand1(); 
    -00061     template <typename T> detail::tvec2<T> signedRand2(); 
    -00062     template <typename T> detail::tvec3<T> signedRand3(); 
    -00063     template <typename T> detail::tvec4<T> signedRand4(); 
    -00064     
    -00065         template <typename T> detail::tvec2<T> normalizedRand2(); 
    -00066         template <typename T> detail::tvec2<T> normalizedRand2(T Min, T Max); 
    -00067         template <typename T> detail::tvec3<T> normalizedRand3(); 
    -00068         template <typename T> detail::tvec3<T> normalizedRand3(T Min, T Max); 
    -00069 
    -00070     template <typename T> T compRand1(); 
    -00071         template <> float compRand1(); 
    -00072     template <> double compRand1(); 
    -00073     template <typename T> T compRand1(T Min, T Max); 
    -00074     template <typename T> detail::tvec2<T> compRand2(T Min, T Max); 
    -00075     template <typename T> detail::tvec3<T> compRand3(T Min, T Max); 
    -00076     template <typename T> detail::tvec4<T> compRand4(T Min, T Max); 
    -00077     template <typename T> detail::tvec2<T> compRand2(const detail::tvec2<T>& Min, const detail::tvec2<T>& Max); 
    -00078     template <typename T> detail::tvec3<T> compRand3(const detail::tvec3<T>& Min, const detail::tvec3<T>& Max); 
    -00079     template <typename T> detail::tvec3<T> compRand4(const detail::tvec4<T>& Min, const detail::tvec4<T>& Max); 
    -00080 
    -00081     template <typename T> detail::tvec2<T> vecRand2(); 
    -00082     template <typename T> detail::tvec2<T> vecRand2(T MinRadius, T MaxRadius); 
    -00083     template <typename T> detail::tvec3<T> vecRand3(); 
    -00084     template <typename T> detail::tvec3<T> vecRand3(T MinRadius, T MaxRadius); 
    -00085     template <typename T> detail::tvec4<T> vecRand4(); 
    -00086     template <typename T> detail::tvec4<T> vecRand4(T MinRadius, T MaxRadius); 
    -00087 
    -00088     template <typename T> T gaussRand1(T mean, T std_deviation); 
    -00089     template <typename T> detail::tvec2<T> gaussRand2(T mean, T std_deviation); 
    -00090     template <typename T> detail::tvec3<T> gaussRand3(T mean, T std_deviation); 
    -00091     template <typename T> detail::tvec4<T> gaussRand4(T mean, T std_deviation); 
    -00092     template <typename T> detail::tvec2<T> gaussRand2(const detail::tvec2<T>& mean, T std_deviation); 
    -00093     template <typename T> detail::tvec3<T> gaussRand3(const detail::tvec3<T>& mean, T std_deviation); 
    -00094     template <typename T> detail::tvec4<T> gaussRand4(const detail::tvec4<T>& mean, T std_deviation); 
    -00095     template <typename T> detail::tvec2<T> gaussRand2(T  mean, const detail::tvec2<T>& std_deviation); 
    -00096     template <typename T> detail::tvec3<T> gaussRand3(T  mean, const detail::tvec3<T>& std_deviation); 
    -00097     template <typename T> detail::tvec4<T> gaussRand4(T  mean, const detail::tvec4<T>& std_deviation); 
    -00098     template <typename T> detail::tvec2<T> gaussRand2(const detail::tvec2<T>& mean, const detail::tvec2<T>& std_deviation); 
    -00099     template <typename T> detail::tvec3<T> gaussRand3(const detail::tvec3<T>& mean, const detail::tvec3<T>& std_deviation); 
    -00100     template <typename T> detail::tvec4<T> gaussRand4(const detail::tvec4<T>& mean, const detail::tvec4<T>& std_deviation); 
    -00101 
    -00103 }//namespace glm
    -00104 
    -00105 #include "random.inl"
    -00106 
    -00107 #endif//GLM_GTX_random
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 #if(defined(GLM_MESSAGES))
    +
    25 # pragma message("GLM: GLM_GTX_random extension is deprecated, include GLM_GTC_random instead")
    +
    26 #endif
    +
    27 
    +
    28 // Promoted:
    +
    29 #include "../gtc/random.hpp"
    +
    + - diff --git a/doc/api/a00080.html b/doc/api/a00080.html index efa4d5ca..2817b7ba 100644 --- a/doc/api/a00080.html +++ b/doc/api/a00080.html @@ -2,42 +2,31 @@ - + raw_data.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,43 +35,49 @@
  • File List
  • + +
    raw_data.hpp File Reference
    -
    +

    Go to the source code of this file.

    - - - - - + + + + + + + +

    +

    Typedefs

    typedef uint8 byte
    typedef uint32 dword
    typedef uint64 qword
    typedef uint16 word
    typedef uint8 byte
     
    typedef uint32 dword
     
    typedef uint64 qword
     
    typedef uint16 word
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_raw_data: Raw data

    -
    Date:
    2008-11-19 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_raw_data

    +
    Date
    2008-11-19 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)

    Definition in file raw_data.hpp.

    -
    - - + + - diff --git a/doc/api/a00080_source.html b/doc/api/a00080_source.html index 311f2ae5..3be806c9 100644 --- a/doc/api/a00080_source.html +++ b/doc/api/a00080_source.html @@ -2,42 +2,31 @@ - + raw_data.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,84 +35,86 @@
  • File List
  • + +
    raw_data.hpp
    -
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_raw_data
    -00039 #define GLM_GTX_raw_data GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 #include "../gtc/type_precision.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_raw_data extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056         typedef uint8           byte;
    -00057 
    -00060         typedef uint16          word;
    -00061 
    -00064         typedef uint32          dword;
    -00065 
    -00068         typedef uint64          qword;
    -00069 
    -00071 }// namespace glm
    -00072 
    -00073 #include "raw_data.inl"
    -00074 
    -00075 #endif//GLM_GTX_raw_data
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_raw_data
    +
    39 #define GLM_GTX_raw_data GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtc/type_precision.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_raw_data extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  typedef uint8 byte;
    +
    57 
    +
    60  typedef uint16 word;
    +
    61 
    +
    64  typedef uint32 dword;
    +
    65 
    +
    68  typedef uint64 qword;
    +
    69 
    +
    71 }// namespace glm
    +
    72 
    +
    73 #include "raw_data.inl"
    +
    74 
    +
    75 #endif//GLM_GTX_raw_data
    +
    + - diff --git a/doc/api/a00081.html b/doc/api/a00081.html index 2d50a571..26cae354 100644 --- a/doc/api/a00081.html +++ b/doc/api/a00081.html @@ -2,42 +2,31 @@ - + reciprocal.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,63 +35,77 @@
  • File List
  • + +
    -
    reciprocal.hpp File Reference
    -
    +
    gtc/reciprocal.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType acot (genType const &x)
    template<typename genType >
    genType acoth (genType const &x)
    template<typename genType >
    genType acsc (genType const &x)
    template<typename genType >
    genType acsch (genType const &x)
    template<typename genType >
    genType asec (genType const &x)
    template<typename genType >
    genType asech (genType const &x)
    template<typename genType >
    genType cot (genType const &angle)
    template<typename genType >
    genType coth (genType const &angle)
    template<typename genType >
    genType csc (genType const &angle)
    template<typename genType >
    genType csch (genType const &angle)
    template<typename genType >
    genType sec (genType const &angle)
    template<typename genType >
    genType sech (genType const &angle)
    template<typename genType >
    genType acot (genType const &x)
     
    template<typename genType >
    genType acoth (genType const &x)
     
    template<typename genType >
    genType acsc (genType const &x)
     
    template<typename genType >
    genType acsch (genType const &x)
     
    template<typename genType >
    genType asec (genType const &x)
     
    template<typename genType >
    genType asech (genType const &x)
     
    template<typename genType >
    genType cot (genType const &angle)
     
    template<typename genType >
    genType coth (genType const &angle)
     
    template<typename genType >
    genType csc (genType const &angle)
     
    template<typename genType >
    genType csch (genType const &angle)
     
    template<typename genType >
    genType sec (genType const &angle)
     
    template<typename genType >
    genType sech (genType const &angle)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_reciprocal: Reciprocal

    -
    Date:
    2008-10-09 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file reciprocal.hpp.

    -
    - +

    GLM_GTC_reciprocal

    +
    Date
    2008-10-09 / 2012-01-25
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file gtc/reciprocal.hpp.

    + + - diff --git a/doc/api/a00081_source.html b/doc/api/a00081_source.html index 5f48b831..b912e2ef 100644 --- a/doc/api/a00081_source.html +++ b/doc/api/a00081_source.html @@ -2,42 +2,31 @@ - + reciprocal.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,111 +35,113 @@
  • File List
  • + +
    -
    reciprocal.hpp
    -
    +
    gtc/reciprocal.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_reciprocal
    -00039 #define GLM_GTX_reciprocal GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_reciprocal extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00056         template <typename genType> 
    -00057         genType sec(genType const & angle);
    -00058 
    -00062         template <typename genType> 
    -00063         genType csc(genType const & angle);
    -00064                 
    -00068         template <typename genType> 
    -00069         genType cot(genType const & angle);
    -00070 
    -00073         template <typename genType> 
    -00074         genType asec(genType const & x);
    -00075 
    -00078         template <typename genType> 
    -00079         genType acsc(genType const & x);
    -00080                 
    -00083         template <typename genType> 
    -00084         genType acot(genType const & x);
    -00085 
    -00088         template <typename genType> 
    -00089         genType sech(genType const & angle);
    -00090 
    -00093         template <typename genType> 
    -00094         genType csch(genType const & angle);
    -00095                 
    -00098         template <typename genType> 
    -00099         genType coth(genType const & angle);
    -00100 
    -00103         template <typename genType> 
    -00104         genType asech(genType const & x);
    -00105 
    -00108         template <typename genType> 
    -00109         genType acsch(genType const & x);
    -00110                 
    -00113         template <typename genType> 
    -00114         genType acoth(genType const & x);
    -00115 
    -00117 }//namespace glm
    -00118 
    -00119 #include "reciprocal.inl"
    -00120 
    -00121 #endif//GLM_GTX_reciprocal
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTC_reciprocal
    +
    39 #define GLM_GTC_reciprocal GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTC_reciprocal extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    57  template <typename genType>
    +
    58  genType sec(genType const & angle);
    +
    59 
    +
    64  template <typename genType>
    +
    65  genType csc(genType const & angle);
    +
    66 
    +
    71  template <typename genType>
    +
    72  genType cot(genType const & angle);
    +
    73 
    +
    77  template <typename genType>
    +
    78  genType asec(genType const & x);
    +
    79 
    +
    83  template <typename genType>
    +
    84  genType acsc(genType const & x);
    +
    85 
    +
    89  template <typename genType>
    +
    90  genType acot(genType const & x);
    +
    91 
    +
    95  template <typename genType>
    +
    96  genType sech(genType const & angle);
    +
    97 
    +
    101  template <typename genType>
    +
    102  genType csch(genType const & angle);
    +
    103 
    +
    107  template <typename genType>
    +
    108  genType coth(genType const & angle);
    +
    109 
    +
    113  template <typename genType>
    +
    114  genType asech(genType const & x);
    +
    115 
    +
    119  template <typename genType>
    +
    120  genType acsch(genType const & x);
    +
    121 
    +
    125  template <typename genType>
    +
    126  genType acoth(genType const & x);
    +
    127 
    +
    129 }//namespace glm
    +
    130 
    +
    131 #include "reciprocal.inl"
    +
    132 
    +
    133 #endif//GLM_GTC_reciprocal
    +
    + - diff --git a/doc/api/a00082.html b/doc/api/a00082.html deleted file mode 100644 index 19e17412..00000000 --- a/doc/api/a00082.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - -rotate_vector.hpp File Reference - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -
    -
    rotate_vector.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename T >
    detail::tmat4x4< T > orientation (detail::tvec3< T > const &Normal, detail::tvec3< T > const &Up)
    template<typename T >
    detail::tvec2< T > rotate (detail::tvec2< T > const &v, T const &angle)
    template<typename T >
    detail::tvec3< T > rotate (detail::tvec3< T > const &v, T const &angle, detail::tvec3< T > const &normal)
    template<typename T >
    detail::tvec4< T > rotate (detail::tvec4< T > const &v, T const &angle, detail::tvec3< T > const &normal)
    template<typename T >
    detail::tvec3< T > rotateX (detail::tvec3< T > const &v, T const &angle)
    template<typename T >
    detail::tvec4< T > rotateX (detail::tvec4< T > const &v, T const &angle)
    template<typename T >
    detail::tvec3< T > rotateY (detail::tvec3< T > const &v, T const &angle)
    template<typename T >
    detail::tvec4< T > rotateY (detail::tvec4< T > const &v, T const &angle)
    template<typename T >
    detail::tvec3< T > rotateZ (detail::tvec3< T > const &v, T const &angle)
    template<typename T >
    detail::tvec4< T > rotateZ (detail::tvec4< T > const &v, T const &angle)
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_rotate_vector: Rotate vector

    -
    Date:
    2006-11-02 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTX_transform: Extented transformation matrices (dependence)
    - -

    Definition in file rotate_vector.hpp.

    -
    - - - - - - diff --git a/doc/api/a00082_source.html b/doc/api/a00082_source.html index 5632fd53..164cb981 100644 --- a/doc/api/a00082_source.html +++ b/doc/api/a00082_source.html @@ -2,42 +2,31 @@ - -rotate_vector.hpp Source File + +reciprocal.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,129 +35,48 @@
  • File List
  • + +
    -
    rotate_vector.hpp
    -
    +
    gtx/reciprocal.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_rotate_vector
    -00040 #define GLM_GTX_rotate_vector GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/transform.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_rotate_vector extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename T> 
    -00058         detail::tvec2<T> rotate(
    -00059         detail::tvec2<T> const & v, 
    -00060                 T const & angle);
    -00061                 
    -00064         template <typename T> 
    -00065         detail::tvec3<T> rotate(
    -00066         detail::tvec3<T> const & v, 
    -00067                 T const & angle, 
    -00068         detail::tvec3<T> const & normal);
    -00069                 
    -00072         template <typename T> 
    -00073         detail::tvec4<T> rotate(
    -00074         detail::tvec4<T> const & v, 
    -00075         T const & angle, 
    -00076                 detail::tvec3<T> const & normal);
    -00077                 
    -00080         template <typename T> 
    -00081         detail::tvec3<T> rotateX(
    -00082         detail::tvec3<T> const & v, 
    -00083                 T const & angle);
    -00084 
    -00087         template <typename T> 
    -00088         detail::tvec3<T> rotateY(
    -00089                 detail::tvec3<T> const & v, 
    -00090                 T const & angle);
    -00091                 
    -00094         template <typename T> 
    -00095         detail::tvec3<T> rotateZ(
    -00096         detail::tvec3<T> const & v, 
    -00097                 T const & angle);
    -00098                 
    -00101         template <typename T> 
    -00102         detail::tvec4<T> rotateX(
    -00103         detail::tvec4<T> const & v, 
    -00104                 T const & angle);
    -00105                 
    -00108         template <typename T> 
    -00109         detail::tvec4<T> rotateY(
    -00110         detail::tvec4<T> const & v, 
    -00111                 T const & angle);
    -00112                 
    -00115         template <typename T> 
    -00116         detail::tvec4<T> rotateZ(
    -00117         detail::tvec4<T> const & v, 
    -00118                 T const & angle);
    -00119                 
    -00122         template <typename T> 
    -00123         detail::tmat4x4<T> orientation(
    -00124         detail::tvec3<T> const & Normal, 
    -00125         detail::tvec3<T> const & Up);
    -00126 
    -00128 }//namespace glm
    -00129 
    -00130 #include "rotate_vector.inl"
    -00131 
    -00132 #endif//GLM_GTX_rotate_vector
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 #if(defined(GLM_MESSAGES))
    +
    25 # pragma message("GLM: GLM_GTX_reciprocal extension is deprecated, include GLM_GTC_reciprocal instead")
    +
    26 #endif
    +
    + - diff --git a/doc/api/a00083.html b/doc/api/a00083.html index 99888971..ffbe34ca 100644 --- a/doc/api/a00083.html +++ b/doc/api/a00083.html @@ -2,42 +2,31 @@ - -setup.hpp File Reference + +rotate_vector.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,73 @@
  • File List
  • + +
    +
    -
    setup.hpp File Reference
    -
    +
    rotate_vector.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    detail::tmat4x4< T > orientation (detail::tvec3< T > const &Normal, detail::tvec3< T > const &Up)
     
    template<typename T >
    detail::tvec2< T > rotate (detail::tvec2< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec3< T > rotate (detail::tvec3< T > const &v, T const &angle, detail::tvec3< T > const &normal)
     
    template<typename T >
    detail::tvec4< T > rotate (detail::tvec4< T > const &v, T const &angle, detail::tvec3< T > const &normal)
     
    template<typename T >
    detail::tvec3< T > rotateX (detail::tvec3< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec4< T > rotateX (detail::tvec4< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec3< T > rotateY (detail::tvec3< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec4< T > rotateY (detail::tvec4< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec3< T > rotateZ (detail::tvec3< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec4< T > rotateZ (detail::tvec4< T > const &v, T const &angle)
     
    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2006-11-13 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file setup.hpp.

    -
    - +

    GLM_GTX_rotate_vector

    +
    Date
    2006-11-02 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTX_transform (dependence)
    +

    Definition in file rotate_vector.hpp.

    + + - diff --git a/doc/api/a00083_source.html b/doc/api/a00083_source.html index 7ec012c3..d6e9e52d 100644 --- a/doc/api/a00083_source.html +++ b/doc/api/a00083_source.html @@ -2,42 +2,31 @@ - -setup.hpp Source File + +rotate_vector.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,666 +35,131 @@
  • File List
  • + +
    -
    setup.hpp
    -
    +
    rotate_vector.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_setup
    -00030 #define glm_setup
    -00031 
    -00033 // Version
    -00034 
    -00035 #define GLM_VERSION                                     93
    -00036 #define GLM_VERSION_MAJOR                       0
    -00037 #define GLM_VERSION_MINOR                       9
    -00038 #define GLM_VERSION_PATCH                       3
    -00039 #define GLM_VERSION_REVISION            1
    -00040 
    -00042 // Platform
    -00043 
    -00044 #define GLM_PLATFORM_UNKNOWN            0x00000000
    -00045 #define GLM_PLATFORM_WINDOWS            0x00010000
    -00046 #define GLM_PLATFORM_LINUX                      0x00020000
    -00047 #define GLM_PLATFORM_APPLE                      0x00040000
    -00048 //#define GLM_PLATFORM_IOS                      0x00080000
    -00049 #define GLM_PLATFORM_ANDROID            0x00100000
    -00050 #define GLM_PLATFORM_CHROME_NACL        0x00200000
    -00051 #define GLM_PLATFORM_UNIX                       0x00400000
    -00052 
    -00053 #ifdef GLM_FORCE_PLATFORM_UNKNOWN
    -00054 #       define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
    -00055 #elif defined(__APPLE__)
    -00056 #   define GLM_PLATFORM GLM_PLATFORM_APPLE
    -00057 #elif defined(_WIN32)
    -00058 #       define GLM_PLATFORM GLM_PLATFORM_WINDOWS
    -00059 #elif defined(__native_client__)
    -00060 #       define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL
    -00061 #elif defined(ANDROID)
    -00062 #   define GLM_PLATFORM GLM_PLATFORM_ANDROID
    -00063 #elif defined(__linux)
    -00064 #   define GLM_PLATFORM GLM_PLATFORM_LINUX
    -00065 #elif defined(__unix)
    -00066 #   define GLM_PLATFORM GLM_PLATFORM_UNIX
    -00067 #else
    -00068 #       define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
    -00069 #endif//
    -00070 
    -00071 // Report platform detection
    -00072 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_PLATFORM_DISPLAYED))
    -00073 #       define GLM_MESSAGE_PLATFORM_DISPLAYED
    -00074 #       if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
    -00075 #               pragma message("GLM: Windows platform detected")
    -00076 //#     elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
    -00077 //#             pragma message("GLM: iOS platform detected")
    -00078 #       elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
    -00079 #               pragma message("GLM: Apple platform detected")
    -00080 #       elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
    -00081 #               pragma message("GLM: Linux platform detected")
    -00082 #       elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
    -00083 #               pragma message("GLM: UNIX platform detected")
    -00084 #       elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
    -00085 #               pragma message("GLM: Android platform detected")
    -00086 #       elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
    -00087 #               pragma message("GLM: Chrone Native Client detected")
    -00088 #       elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
    -00089 #               pragma message("GLM: platform unknown")
    -00090 #       else
    -00091 #               pragma message("GLM: platform not detected")
    -00092 #       endif
    -00093 #endif//GLM_MESSAGE
    -00094 
    -00096 // Compiler
    -00097 
    -00098 // User defines: GLM_FORCE_COMPILER_UNKNOWN
    -00099 // TODO ? __llvm__ 
    -00100 
    -00101 #define GLM_COMPILER_UNKNOWN            0x00000000
    -00102 
    -00103 // Visual C++ defines
    -00104 #define GLM_COMPILER_VC                         0x01000000
    -00105 #define GLM_COMPILER_VC2                        0x01000010
    -00106 #define GLM_COMPILER_VC4                        0x01000020
    -00107 #define GLM_COMPILER_VC5                        0x01000030
    -00108 #define GLM_COMPILER_VC6                        0x01000040
    -00109 #define GLM_COMPILER_VC2002                     0x01000050
    -00110 #define GLM_COMPILER_VC2003                     0x01000060
    -00111 #define GLM_COMPILER_VC2005                     0x01000070
    -00112 #define GLM_COMPILER_VC2008                     0x01000080
    -00113 #define GLM_COMPILER_VC2010                     0x01000090
    -00114 #define GLM_COMPILER_VC2011                     0x010000A0
    -00115 
    -00116 // GCC defines
    -00117 #define GLM_COMPILER_GCC            0x02000000
    -00118 #define GLM_COMPILER_GCC_LLVM       0x02000001
    -00119 #define GLM_COMPILER_GCC_CLANG      0x02000002
    -00120 #define GLM_COMPILER_GCC30                      0x02000010
    -00121 #define GLM_COMPILER_GCC31                      0x02000020
    -00122 #define GLM_COMPILER_GCC32                      0x02000030
    -00123 #define GLM_COMPILER_GCC33                      0x02000040
    -00124 #define GLM_COMPILER_GCC34                      0x02000050
    -00125 #define GLM_COMPILER_GCC35                      0x02000060
    -00126 #define GLM_COMPILER_GCC40                      0x02000070
    -00127 #define GLM_COMPILER_GCC41                      0x02000080
    -00128 #define GLM_COMPILER_GCC42                      0x02000090
    -00129 #define GLM_COMPILER_GCC43                      0x020000A0
    -00130 #define GLM_COMPILER_GCC44                      0x020000B0
    -00131 #define GLM_COMPILER_GCC45                      0x020000C0
    -00132 #define GLM_COMPILER_GCC46                      0x020000D0
    -00133 #define GLM_COMPILER_GCC47                      0x020000E0
    -00134 #define GLM_COMPILER_GCC48                      0x020000F0
    -00135 #define GLM_COMPILER_GCC49                      0x02000100
    -00136 #define GLM_COMPILER_GCC50                      0x02000200
    -00137 
    -00138 // G++ command line to display defined
    -00139 // echo "" | g++ -E -dM -x c++ - | sort
    -00140 
    -00141 // Borland C++ defines. How to identify BC?
    -00142 #define GLM_COMPILER_BC                         0x04000000
    -00143 #define GLM_COMPILER_BCB4                       0x04000100
    -00144 #define GLM_COMPILER_BCB5                       0x04000200
    -00145 #define GLM_COMPILER_BCB6                       0x04000300
    -00146 //#define GLM_COMPILER_BCBX                     0x04000400 // What's the version value?
    -00147 #define GLM_COMPILER_BCB2009            0x04000500
    -00148 
    -00149 // CodeWarrior
    -00150 #define GLM_COMPILER_CODEWARRIOR        0x08000000
    -00151 
    -00152 // CUDA
    -00153 #define GLM_COMPILER_CUDA           0x10000000
    -00154 #define GLM_COMPILER_CUDA30                     0x10000010
    -00155 #define GLM_COMPILER_CUDA31                     0x10000020
    -00156 #define GLM_COMPILER_CUDA32                     0x10000030
    -00157 #define GLM_COMPILER_CUDA40                     0x10000040
    -00158 #define GLM_COMPILER_CUDA41                     0x10000050
    -00159 #define GLM_COMPILER_CUDA42                     0x10000060
    -00160 
    -00161 // Clang
    -00162 #define GLM_COMPILER_CLANG          0x20000000
    -00163 #define GLM_COMPILER_CLANG26            0x20000010
    -00164 #define GLM_COMPILER_CLANG27            0x20000020
    -00165 #define GLM_COMPILER_CLANG28            0x20000030
    -00166 #define GLM_COMPILER_CLANG29            0x20000040
    -00167 #define GLM_COMPILER_CLANG30            0x20000050
    -00168 #define GLM_COMPILER_CLANG31            0x20000060
    -00169 #define GLM_COMPILER_CLANG32            0x20000070
    -00170 #define GLM_COMPILER_CLANG33            0x20000080
    -00171 
    -00172 // LLVM GCC
    -00173 #define GLM_COMPILER_LLVM_GCC           0x40000000
    -00174 
    -00175 // Intel
    -00176 #define GLM_COMPILER_INTEL          0x80000000
    -00177 #define GLM_COMPILER_INTEL9                     0x80000010
    -00178 #define GLM_COMPILER_INTEL10_0          0x80000020
    -00179 #define GLM_COMPILER_INTEL10_1          0x80000030
    -00180 #define GLM_COMPILER_INTEL11_0          0x80000040
    -00181 #define GLM_COMPILER_INTEL11_1          0x80000050
    -00182 #define GLM_COMPILER_INTEL12_0          0x80000060
    -00183 #define GLM_COMPILER_INTEL12_1          0x80000070
    -00184 #define GLM_COMPILER_INTEL13_0          0x80000080
    -00185 
    -00186 // Build model
    -00187 #define GLM_MODEL_32                            0x00000010
    -00188 #define GLM_MODEL_64                            0x00000020
    -00189 
    -00190 // Force generic C++ compiler
    -00191 #ifdef GLM_FORCE_COMPILER_UNKNOWN
    -00192 #       define GLM_COMPILER GLM_COMPILER_UNKNOWN
    -00193 
    -00194 #elif defined(__INTEL_COMPILER)
    -00195 #       if __INTEL_COMPILER == 900
    -00196 #               define GLM_COMPILER GLM_COMPILER_INTEL9
    -00197 #       elif __INTEL_COMPILER == 1000
    -00198 #               define GLM_COMPILER GLM_COMPILER_INTEL10_0
    -00199 #       elif __INTEL_COMPILER == 1010
    -00200 #               define GLM_COMPILER GLM_COMPILER_INTEL10_1
    -00201 #       elif __INTEL_COMPILER == 1100
    -00202 #               define GLM_COMPILER GLM_COMPILER_INTEL11_0
    -00203 #       elif __INTEL_COMPILER == 1110
    -00204 #               define GLM_COMPILER GLM_COMPILER_INTEL11_1
    -00205 #       elif __INTEL_COMPILER == 1200
    -00206 #               define GLM_COMPILER GLM_COMPILER_INTEL12_0
    -00207 #       elif __INTEL_COMPILER == 1210
    -00208 #               define GLM_COMPILER GLM_COMPILER_INTEL12_1
    -00209 #       elif __INTEL_COMPILER == 1300
    -00210 #               define GLM_COMPILER GLM_COMPILER_INTEL13_0
    -00211 #       else
    -00212 #               define GLM_COMPILER GLM_COMPILER_INTEL
    -00213 #       endif
    -00214 
    -00215 // CUDA
    -00216 #elif defined(__CUDACC__)
    -00217 #       define GLM_COMPILER GLM_COMPILER_CUDA
    -00218 /*
    -00219 #       if CUDA_VERSION < 3000
    -00220 #               error "GLM requires CUDA 3.0 or higher"
    -00221 #       elif CUDA_VERSION == 3000
    -00222 #               define GLM_COMPILER GLM_COMPILER_CUDA30 
    -00223 #       elif CUDA_VERSION == 3010
    -00224 #               define GLM_COMPILER GLM_COMPILER_CUDA31 
    -00225 #       elif CUDA_VERSION == 3020
    -00226 #               define GLM_COMPILER GLM_COMPILER_CUDA32 
    -00227 #       elif CUDA_VERSION == 4000
    -00228 #               define GLM_COMPILER GLM_COMPILER_CUDA40 
    -00229 #       elif CUDA_VERSION == 4010
    -00230 #               define GLM_COMPILER GLM_COMPILER_CUDA41 
    -00231 #       elif CUDA_VERSION == 4020
    -00232 #               define GLM_COMPILER GLM_COMPILER_CUDA42
    -00233 #       else
    -00234 #               define GLM_COMPILER GLM_COMPILER_CUDA
    -00235 #       endif
    -00236 */
    -00237 
    -00238 // Visual C++
    -00239 #elif defined(_MSC_VER)
    -00240 #       if _MSC_VER == 900
    -00241 #               define GLM_COMPILER GLM_COMPILER_VC2
    -00242 #       elif _MSC_VER == 1000
    -00243 #               define GLM_COMPILER GLM_COMPILER_VC4
    -00244 #       elif _MSC_VER == 1100
    -00245 #               define GLM_COMPILER GLM_COMPILER_VC5
    -00246 #       elif _MSC_VER == 1200
    -00247 #               define GLM_COMPILER GLM_COMPILER_VC6
    -00248 #       elif _MSC_VER == 1300
    -00249 #               define GLM_COMPILER GLM_COMPILER_VC2002
    -00250 #       elif _MSC_VER == 1310
    -00251 #               define GLM_COMPILER GLM_COMPILER_VC2003
    -00252 #       elif _MSC_VER == 1400
    -00253 #               define GLM_COMPILER GLM_COMPILER_VC2005
    -00254 #       elif _MSC_VER == 1500
    -00255 #               define GLM_COMPILER GLM_COMPILER_VC2008
    -00256 #       elif _MSC_VER == 1600
    -00257 #               define GLM_COMPILER GLM_COMPILER_VC2010
    -00258 #       elif _MSC_VER == 1700
    -00259 #               define GLM_COMPILER GLM_COMPILER_VC2011
    -00260 #       else//_MSC_VER
    -00261 #               define GLM_COMPILER GLM_COMPILER_VC
    -00262 #       endif//_MSC_VER
    -00263 
    -00264 // Clang
    -00265 #elif defined(__clang__)
    -00266 #       if(__clang_major__ == 2) && (__clang_minor__ == 6)
    -00267 #               define GLM_COMPILER GLM_COMPILER_CLANG26
    -00268 #       elif(__clang_major__ == 2) && (__clang_minor__ == 7)
    -00269 #               define GLM_COMPILER GLM_COMPILER_CLANG27
    -00270 #       elif(__clang_major__ == 2) && (__clang_minor__ == 8)
    -00271 #               define GLM_COMPILER GLM_COMPILER_CLANG28
    -00272 #       elif(__clang_major__ == 2) && (__clang_minor__ == 9)
    -00273 #               define GLM_COMPILER GLM_COMPILER_CLANG29
    -00274 #       elif(__clang_major__ == 3) && (__clang_minor__ == 0)
    -00275 #               define GLM_COMPILER GLM_COMPILER_CLANG30
    -00276 #       elif(__clang_major__ == 3) && (__clang_minor__ == 1)
    -00277 #               define GLM_COMPILER GLM_COMPILER_CLANG31
    -00278 #       elif(__clang_major__ == 3) && (__clang_minor__ == 2)
    -00279 #               define GLM_COMPILER GLM_COMPILER_CLANG32
    -00280 #       elif(__clang_major__ == 3) && (__clang_minor__ == 3)
    -00281 #               define GLM_COMPILER GLM_COMPILER_CLANG33
    -00282 #       else
    -00283 #               define GLM_COMPILER GLM_COMPILER_CLANG
    -00284 #   endif
    -00285 
    -00286 // G++ 
    -00287 #elif(defined(__GNUC__) || defined(__MINGW32__))// || defined(__llvm__) || defined(__clang__)
    -00288 #   if defined (__llvm__)
    -00289 #       define GLM_COMPILER_GCC_EXTRA GLM_COMPILER_GCC_LLVM
    -00290 #   elif defined (__clang__)
    -00291 #       define GLM_COMPILER_GCC_EXTRA GLM_COMPILER_GCC_CLANG
    -00292 #   else
    -00293 #       define GLM_COMPILER_GCC_EXTRA 0
    -00294 #   endif
    -00295 #
    -00296 #       if   (__GNUC__ == 3) && (__GNUC_MINOR__ == 2)
    -00297 #               define GLM_COMPILER GLM_COMPILER_GCC32
    -00298 #       elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 3)
    -00299 #               define GLM_COMPILER GLM_COMPILER_GCC33
    -00300 #       elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 4)
    -00301 #               define GLM_COMPILER GLM_COMPILER_GCC34
    -00302 #       elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 5)
    -00303 #               define GLM_COMPILER GLM_COMPILER_GCC35
    -00304 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 0)
    -00305 #               define GLM_COMPILER (GLM_COMPILER_GCC40 | GLM_COMPILER_GCC_EXTRA)
    -00306 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 1)
    -00307 #               define GLM_COMPILER (GLM_COMPILER_GCC41 | GLM_COMPILER_GCC_EXTRA)
    -00308 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
    -00309 #               define GLM_COMPILER (GLM_COMPILER_GCC42 | GLM_COMPILER_GCC_EXTRA)
    -00310 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
    -00311 #               define GLM_COMPILER (GLM_COMPILER_GCC43 | GLM_COMPILER_GCC_EXTRA)
    -00312 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4)
    -00313 #               define GLM_COMPILER (GLM_COMPILER_GCC44 | GLM_COMPILER_GCC_EXTRA)
    -00314 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 5)
    -00315 #               define GLM_COMPILER (GLM_COMPILER_GCC45 | GLM_COMPILER_GCC_EXTRA)
    -00316 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
    -00317 #               define GLM_COMPILER (GLM_COMPILER_GCC46 | GLM_COMPILER_GCC_EXTRA)
    -00318 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 7)
    -00319 #               define GLM_COMPILER (GLM_COMPILER_GCC47 | GLM_COMPILER_GCC_EXTRA)
    -00320 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
    -00321 #               define GLM_COMPILER (GLM_COMPILER_GCC48 | GLM_COMPILER_GCC_EXTRA)
    -00322 #       elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 9)
    -00323 #               define GLM_COMPILER (GLM_COMPILER_GCC49 | GLM_COMPILER_GCC_EXTRA)
    -00324 #       elif (__GNUC__ == 5) && (__GNUC_MINOR__ == 0)
    -00325 #               define GLM_COMPILER (GLM_COMPILER_GCC50 | GLM_COMPILER_GCC_EXTRA)
    -00326 #       else
    -00327 #               define GLM_COMPILER (GLM_COMPILER_GCC | GLM_COMPILER_GCC_EXTRA)
    -00328 #       endif
    -00329 
    -00330 // Borland C++
    -00331 #elif defined(_BORLANDC_)
    -00332 #       if defined(VER125)
    -00333 #               define GLM_COMPILER GLM_COMPILER_BCB4
    -00334 #       elif defined(VER130)
    -00335 #               define GLM_COMPILER GLM_COMPILER_BCB5
    -00336 #       elif defined(VER140)
    -00337 #               define GLM_COMPILER GLM_COMPILER_BCB6
    -00338 #       elif defined(VER200)
    -00339 #               define GLM_COMPILER GLM_COMPILER_BCB2009
    -00340 #       else
    -00341 #               define GLM_COMPILER GLM_COMPILER_BC
    -00342 #       endif
    -00343 
    -00344 // Codewarrior
    -00345 #elif defined(__MWERKS__)
    -00346 #       define GLM_COMPILER GLM_COMPILER_CODEWARRIOR
    -00347 
    -00348 #else
    -00349 #       define GLM_COMPILER GLM_COMPILER_UNKNOWN
    -00350 #endif
    -00351 
    -00352 #ifndef GLM_COMPILER
    -00353 #error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message."
    -00354 #endif//GLM_COMPILER
    -00355 
    -00356 // Report compiler detection
    -00357 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPILER_DISPLAYED))
    -00358 #       define GLM_MESSAGE_COMPILER_DISPLAYED
    -00359 #       if(GLM_COMPILER & GLM_COMPILER_CUDA)
    -00360 #               pragma message("GLM: CUDA compiler detected")
    -00361 #       elif(GLM_COMPILER & GLM_COMPILER_VC)
    -00362 #               pragma message("GLM: Visual C++ compiler detected")
    -00363 #       elif(GLM_COMPILER & GLM_COMPILER_CLANG)
    -00364 #               pragma message("GLM: Clang compiler detected")
    -00365 #       elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
    -00366 #               pragma message("GLM: LLVM GCC compiler detected")
    -00367 #       elif(GLM_COMPILER & GLM_COMPILER_GCC)
    -00368 #       if(GLM_COMPILER == GLM_COMPILER_GCC_LLVM)
    -00369 #           pragma message("GLM: LLVM GCC compiler detected")
    -00370 #       elif(GLM_COMPILER == GLM_COMPILER_GCC_CLANG)
    -00371 #           pragma message("GLM: CLANG compiler detected")
    -00372 #       else
    -00373 #           pragma message("GLM: GCC compiler detected")
    -00374 #       endif
    -00375 #       elif(GLM_COMPILER & GLM_COMPILER_BC)
    -00376 #               pragma message("GLM: Borland compiler detected but not supported")
    -00377 #       elif(GLM_COMPILER & GLM_COMPILER_CODEWARRIOR)
    -00378 #               pragma message("GLM: Codewarrior compiler detected but not supported")
    -00379 #       else
    -00380 #               pragma message("GLM: Compiler not detected")
    -00381 #       endif
    -00382 #endif//GLM_MESSAGE
    -00383 
    -00385 // Build model //
    -00386 
    -00387 #if((defined(__WORDSIZE) && (__WORDSIZE == 64)) || defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__))
    -00388 #               define GLM_MODEL        GLM_MODEL_64
    -00389 #elif(defined(__i386__) || defined(__ppc__))
    -00390 #       define GLM_MODEL        GLM_MODEL_32
    -00391 #else
    -00392 #       define GLM_MODEL        GLM_MODEL_32
    -00393 #endif//
    -00394 
    -00395 #if(!defined(GLM_MODEL) && GLM_COMPILER != 0)
    -00396 #error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
    -00397 #endif//GLM_MODEL
    -00398 
    -00399 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_MODEL_DISPLAYED))
    -00400 #       define GLM_MESSAGE_MODEL_DISPLAYED
    -00401 #       if(GLM_MODEL == GLM_MODEL_64)
    -00402 #               pragma message("GLM: 64 bits model")
    -00403 #       elif(GLM_MODEL == GLM_MODEL_32)
    -00404 #               pragma message("GLM: 32 bits model")
    -00405 #       endif//GLM_MODEL
    -00406 #endif//GLM_MESSAGE
    -00407 
    -00409 // C++ Version //
    -00410 
    -00411 // User defines: GLM_FORCE_CXX98
    -00412 
    -00413 #define GLM_LANG_CXX                    (0 << 0)
    -00414 #define GLM_LANG_CXX98                  ((1 << 1) | GLM_LANG_CXX)
    -00415 #define GLM_LANG_CXX03                  ((1 << 2) | GLM_LANG_CXX98)
    -00416 #define GLM_LANG_CXX0X                  ((1 << 3) | GLM_LANG_CXX03)
    -00417 #define GLM_LANG_CXX11                  ((1 << 4) | GLM_LANG_CXX0X)
    -00418 #define GLM_LANG_CXXMS                  (1 << 5)
    -00419 #define GLM_LANG_CXXGNU                 (1 << 6)
    -00420 
    -00421 #if(defined(GLM_FORCE_CXX11))
    -00422 #       define GLM_LANG GLM_LANG_CXX11
    -00423 #elif(defined(GLM_FORCE_CXX03))
    -00424 #       define GLM_LANG GLM_LANG_CXX03
    -00425 #elif(defined(GLM_FORCE_CXX98))
    -00426 #       define GLM_LANG GLM_LANG_CXX98
    -00427 #else
    -00428 //  -std=c++0x or -std=gnu++0x
    -00429 #       if(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && defined(__GXX_EXPERIMENTAL_CXX0X__)) 
    -00430 #               define GLM_LANG GLM_LANG_CXX0X
    -00431 #       elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && defined(_MSC_EXTENSIONS))
    -00432 #               define GLM_LANG GLM_LANG_CXXMS
    -00433 #       elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && !defined(_MSC_EXTENSIONS))
    -00434 #               if(GLM_COMPILER >= GLM_COMPILER_VC2010)
    -00435 #                       define GLM_LANG GLM_LANG_CXX0X
    -00436 #               else
    -00437 #                       define GLM_LANG GLM_LANG_CXX98
    -00438 #               endif//(GLM_COMPILER == GLM_COMPILER_VC2010)
    -00439 #       elif((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) //&& defined(__STRICT_ANSI__))
    -00440 #               define GLM_LANG GLM_LANG_CXX98
    -00441 #       elif((GLM_COMPILER & GLM_COMPILER_CLANG) == GLM_COMPILER_CLANG) 
    -00442 #               define GLM_LANG GLM_LANG_CXX98
    -00443 #       else
    -00444 #               define GLM_LANG GLM_LANG_CXX
    -00445 #       endif
    -00446 #endif
    -00447 
    -00448 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED))
    -00449 #       define GLM_MESSAGE_LANG_DISPLAYED
    -00450 #       if(GLM_LANG == GLM_LANG_CXX98)
    -00451 #               pragma message("GLM: C++98")
    -00452 #       elif(GLM_LANG == GLM_LANG_CXX03)
    -00453 #               pragma message("GLM: C++03")
    -00454 #       elif(GLM_LANG == GLM_LANG_CXX0X)
    -00455 #               pragma message("GLM: C++0x")
    -00456 #       elif(GLM_LANG == GLM_LANG_CXX11)
    -00457 #               pragma message("GLM: C++11")
    -00458 #       elif(GLM_LANG == GLM_LANG_CXXGNU)
    -00459 #               pragma message("GLM: C++ with GNU language extensions")
    -00460 #       elif(GLM_LANG == GLM_LANG_CXXMS)
    -00461 #               pragma message("GLM: C++ with VC language extensions")
    -00462 #   else
    -00463 #       pragma message("GLM: C++ language undetected")
    -00464 #       endif//GLM_MODEL
    -00465 #endif//GLM_MESSAGE
    -00466 
    -00468 // Platform 
    -00469 
    -00470 // User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_AVX
    -00471 
    -00472 #define GLM_ARCH_PURE           0x0000 //(0x0000)
    -00473 #define GLM_ARCH_SSE2           0x0001 //(0x0001)
    -00474 #define GLM_ARCH_SSE3           0x0003 //(0x0002 | GLM_ARCH_SSE2)
    -00475 #define GLM_ARCH_AVX            0x0007 //(0x0004 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -00476 
    -00477 #if(defined(GLM_FORCE_PURE))
    -00478 #       define GLM_ARCH GLM_ARCH_PURE
    -00479 #elif(defined(GLM_FORCE_AVX))
    -00480 #       define GLM_ARCH GLM_ARCH_AVX
    -00481 #elif(defined(GLM_FORCE_SSE3))
    -00482 #       define GLM_ARCH GLM_ARCH_SSE3
    -00483 #elif(defined(GLM_FORCE_SSE2))
    -00484 #       define GLM_ARCH GLM_ARCH_SSE2
    -00485 #elif((GLM_COMPILER & GLM_COMPILER_VC) && (defined(_M_IX86) || defined(_M_X64)))
    -00486 #       if(defined(_M_CEE_PURE))
    -00487 #               define GLM_ARCH GLM_ARCH_PURE
    -00488 #       elif(GLM_COMPILER >= GLM_COMPILER_VC2010)
    -00489 #               if(_MSC_FULL_VER >= 160031118) //160031118: VC2010 SP1 beta full version
    -00490 #                       define GLM_ARCH GLM_ARCH_AVX //GLM_ARCH_AVX (Require SP1)
    -00491 #               else
    -00492 #                       define GLM_ARCH GLM_ARCH_SSE3
    -00493 #               endif
    -00494 #       elif(GLM_COMPILER >= GLM_COMPILER_VC2008) 
    -00495 #               define GLM_ARCH GLM_ARCH_SSE3
    -00496 #       elif(GLM_COMPILER >= GLM_COMPILER_VC2005)
    -00497 #               define GLM_ARCH GLM_ARCH_SSE2
    -00498 #       else
    -00499 #               define GLM_ARCH GLM_ARCH_PURE
    -00500 #       endif
    -00501 #elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
    -00502 #       if(defined(__AVX__))
    -00503 #               define GLM_ARCH GLM_ARCH_AVX
    -00504 #       elif(defined(__SSE3__))
    -00505 #               define GLM_ARCH GLM_ARCH_SSE3
    -00506 #       elif(defined(__SSE2__))
    -00507 #               define GLM_ARCH GLM_ARCH_SSE2
    -00508 #       else
    -00509 #               define GLM_ARCH GLM_ARCH_PURE
    -00510 #       endif
    -00511 #elif((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__)))
    -00512 #       if(defined(__AVX__))
    -00513 #               define GLM_ARCH GLM_ARCH_AVX
    -00514 #       elif(defined(__SSE3__))
    -00515 #               define GLM_ARCH GLM_ARCH_SSE3
    -00516 #       elif(defined(__SSE2__))
    -00517 #               define GLM_ARCH GLM_ARCH_SSE2
    -00518 #       else
    -00519 #               define GLM_ARCH GLM_ARCH_PURE
    -00520 #       endif
    -00521 #else
    -00522 #       define GLM_ARCH GLM_ARCH_PURE
    -00523 #endif
    -00524 
    -00525 #if(GLM_ARCH != GLM_ARCH_PURE)
    -00526 #if((GLM_ARCH & GLM_ARCH_AVX) == GLM_ARCH_AVX)
    -00527 #       include <immintrin.h>
    -00528 #endif//GLM_ARCH
    -00529 #if((GLM_ARCH & GLM_ARCH_SSE3) == GLM_ARCH_SSE3)
    -00530 #       include <pmmintrin.h>
    -00531 #endif//GLM_ARCH
    -00532 #if((GLM_ARCH & GLM_ARCH_SSE2) == GLM_ARCH_SSE2)
    -00533 #       include <emmintrin.h>
    -00534 #endif//GLM_ARCH
    -00535 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    -00536 
    -00537 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_ARCH_DISPLAYED))
    -00538 #       define GLM_MESSAGE_ARCH_DISPLAYED
    -00539 #       if(GLM_ARCH == GLM_ARCH_PURE)
    -00540 #               pragma message("GLM: Platform independent")
    -00541 #       elif(GLM_ARCH == GLM_ARCH_SSE2)
    -00542 #               pragma message("GLM: SSE2 instruction set")
    -00543 #       elif(GLM_ARCH == GLM_ARCH_SSE3)
    -00544 #               pragma message("GLM: SSE3 instruction set")
    -00545 #       elif(GLM_ARCH == GLM_ARCH_AVX)
    -00546 #               pragma message("GLM: AVX instruction set")
    -00547 #       endif//GLM_ARCH
    -00548 #endif//GLM_MESSAGE
    -00549 
    -00551 // Support check macros
    -00552 
    -00553 #define GLM_SUPPORT_ANONYMOUS_UNION() \
    -00554         ((GLM_LANG & GLM_LANG_CXX98) == GLM_LANG_CXX98)
    -00555 
    -00556 #define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() \
    -00557         (((GLM_LANG & GLM_LANG_CXX11) == GLM_LANG_CXX11) || ((GLM_LANG & GLM_LANG_CXXMS) == GLM_LANG_CXXMS) || ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_LANG == GLM_LANG_CXX0X)))
    -00558 
    -00559 #define GLM_SUPPORT_SWIZZLE_OPERATOR() \
    -00560         (/*defined(GLM_SWIZZLE) && */GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE())
    -00561 
    -00562 #define GLM_SUPPORT_SWIZZLE_FUNCTION() defined(GLM_SWIZZLE)
    -00563 
    -00565 // Components
    -00566 
    -00567 //#define GLM_FORCE_ONLY_XYZW
    -00568 #define GLM_COMPONENT_ONLY_XYZW                         0 // To disable multiple vector component names access.
    -00569 #define GLM_COMPONENT_CXX98                                     1 //  
    -00570 #define GLM_COMPONENT_CXX11                                     2 // To use anonymous union to provide multiple component names access for class valType. Visual C++ only.
    -00571 
    -00572 #if(GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() && !defined(GLM_FORCE_ONLY_XYZW))
    -00573 #       define GLM_COMPONENT GLM_COMPONENT_CXX11
    -00574 #elif(GLM_SUPPORT_ANONYMOUS_UNION() && !defined(GLM_FORCE_ONLY_XYZW))
    -00575 #       define GLM_COMPONENT GLM_COMPONENT_CXX98
    -00576 #else
    -00577 #       define GLM_COMPONENT GLM_COMPONENT_ONLY_XYZW
    -00578 #endif
    -00579 
    -00580 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPONENT_DISPLAYED))
    -00581 #       define GLM_MESSAGE_COMPONENT_DISPLAYED
    -00582 #       if(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    -00583 #               pragma message("GLM: x,y,z,w; r,g,b,a; s,t,p,q component names except of half based vector types")
    -00584 #       elif(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    -00585 #               pragma message("GLM: x,y,z,w component names for all vector types")
    -00586 #       elif(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    -00587 #               pragma message("GLM: x,y,z,w; r,g,b,a; s,t,p,q component names for all vector types")
    -00588 #       else
    -00589 #               error "GLM: GLM_COMPONENT value unknown"
    -00590 #       endif//GLM_MESSAGE_COMPONENT_DISPLAYED
    -00591 #endif//GLM_MESSAGE
    -00592 
    -00594 // Static assert
    -00595 
    -00596 #if(GLM_LANG == GLM_LANG_CXX0X)
    -00597 #       define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
    -00598 #elif(defined(BOOST_STATIC_ASSERT))
    -00599 #       define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)
    -00600 #elif(GLM_COMPILER & GLM_COMPILER_VC)
    -00601 #       define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
    -00602 #else
    -00603 #       define GLM_STATIC_ASSERT(x, message)
    -00604 #       define GLM_STATIC_ASSERT_NULL
    -00605 #endif//GLM_LANG
    -00606 
    -00608 // Qualifiers 
    -00609 
    -00610 // User defines: GLM_FORCE_INLINE GLM_FORCE_CUDA
    -00611 
    -00612 #if(defined(GLM_FORCE_CUDA) || (GLM_COMPILER & GLM_COMPILER_CUDA))
    -00613 #   define GLM_CUDA_FUNC_DEF __device__ __host__ 
    -00614 #       define GLM_CUDA_FUNC_DECL __device__ __host__ 
    -00615 #else
    -00616 #   define GLM_CUDA_FUNC_DEF
    -00617 #       define GLM_CUDA_FUNC_DECL
    -00618 #endif
    -00619 
    -00620 #if GLM_COMPILER & GLM_COMPILER_GCC
    -00621 #define GLM_VAR_USED __attribute__ ((unused))
    -00622 #else
    -00623 #define GLM_VAR_USED
    -00624 #endif
    -00625 
    -00626 #if(defined(GLM_FORCE_INLINE))
    -00627 #   if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
    -00628 #       define GLM_INLINE __forceinline
    -00629 #   elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC34))
    -00630 #       define GLM_INLINE __attribute__((always_inline))
    -00631 #   else
    -00632 #       define GLM_INLINE inline
    -00633 #   endif//GLM_COMPILER
    -00634 #else
    -00635 #   define GLM_INLINE inline
    -00636 #endif//defined(GLM_FORCE_INLINE)
    -00637 
    -00638 #define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
    -00639 #define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
    -00640 
    -00642 // Swizzle operators
    -00643 
    -00644 // User defines: GLM_SWIZZLE
    -00645 
    -00646 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED))
    -00647 #       define GLM_MESSAGE_SWIZZLE_DISPLAYED
    -00648 #       if(GLM_SUPPORT_SWIZZLE_OPERATOR())
    -00649 #               pragma message("GLM: Swizzling operators enabled")
    -00650 #       elif(GLM_SUPPORT_SWIZZLE_FUNCTION())
    -00651 #               pragma message("GLM: Swizzling operators supported through swizzling functions")
    -00652 #       else
    -00653 #               pragma message("GLM: Swizzling operators disabled")
    -00654 #       endif
    -00655 #endif//GLM_MESSAGE
    -00656 
    -00657 #endif//glm_setup
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_rotate_vector
    +
    40 #define GLM_GTX_rotate_vector GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/transform.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_rotate_vector extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename T>
    +
    58  detail::tvec2<T> rotate(
    +
    59  detail::tvec2<T> const & v,
    +
    60  T const & angle);
    +
    61 
    +
    64  template <typename T>
    +
    65  detail::tvec3<T> rotate(
    +
    66  detail::tvec3<T> const & v,
    +
    67  T const & angle,
    +
    68  detail::tvec3<T> const & normal);
    +
    69 
    +
    72  template <typename T>
    +
    73  detail::tvec4<T> rotate(
    +
    74  detail::tvec4<T> const & v,
    +
    75  T const & angle,
    +
    76  detail::tvec3<T> const & normal);
    +
    77 
    +
    80  template <typename T>
    +
    81  detail::tvec3<T> rotateX(
    +
    82  detail::tvec3<T> const & v,
    +
    83  T const & angle);
    +
    84 
    +
    87  template <typename T>
    +
    88  detail::tvec3<T> rotateY(
    +
    89  detail::tvec3<T> const & v,
    +
    90  T const & angle);
    +
    91 
    +
    94  template <typename T>
    +
    95  detail::tvec3<T> rotateZ(
    +
    96  detail::tvec3<T> const & v,
    +
    97  T const & angle);
    +
    98 
    +
    101  template <typename T>
    +
    102  detail::tvec4<T> rotateX(
    +
    103  detail::tvec4<T> const & v,
    +
    104  T const & angle);
    +
    105 
    +
    108  template <typename T>
    +
    109  detail::tvec4<T> rotateY(
    +
    110  detail::tvec4<T> const & v,
    +
    111  T const & angle);
    +
    112 
    +
    115  template <typename T>
    +
    116  detail::tvec4<T> rotateZ(
    +
    117  detail::tvec4<T> const & v,
    +
    118  T const & angle);
    +
    119 
    +
    122  template <typename T>
    +
    123  detail::tmat4x4<T> orientation(
    +
    124  detail::tvec3<T> const & Normal,
    +
    125  detail::tvec3<T> const & Up);
    +
    126 
    +
    128 }//namespace glm
    +
    129 
    +
    130 #include "rotate_vector.inl"
    +
    131 
    +
    132 #endif//GLM_GTX_rotate_vector
    +
    + - diff --git a/doc/api/a00085.html b/doc/api/a00084.html similarity index 61% rename from doc/api/a00085.html rename to doc/api/a00084.html index ce87149c..0d07249c 100644 --- a/doc/api/a00085.html +++ b/doc/api/a00084.html @@ -2,42 +2,31 @@ - -simd_vec4.hpp File Reference + +setup.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,33 +35,34 @@
  • File List
  • + +
    -
    simd_vec4.hpp File Reference
    -
    +
    setup.hpp File Reference
    +
    -

    Go to the source code of this file.

    -

    Detailed Description

    +

    Go to the source code of this file.

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_simd_vec4: SIMD vec4 type and functions

    -
    Date:
    2009-05-07 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file simd_vec4.hpp.

    -
    - +

    GLM Core

    +
    Date
    2006-11-13 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file setup.hpp.

    + + - diff --git a/doc/api/a00084_source.html b/doc/api/a00084_source.html index f32d6a46..ee2abb59 100644 --- a/doc/api/a00084_source.html +++ b/doc/api/a00084_source.html @@ -2,42 +2,31 @@ - -simd_mat4.hpp Source File + +setup.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,203 +35,699 @@
  • File List
  • + +
    -
    simd_mat4.hpp
    -
    +
    setup.hpp
    +
    -
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_simd_mat4
    -00039 #define GLM_GTX_simd_mat4 GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(GLM_ARCH != GLM_ARCH_PURE)
    -00045 
    -00046 #if(GLM_ARCH & GLM_ARCH_SSE2)
    -00047 #       include "../core/intrinsic_matrix.hpp"
    -00048 #       include "../gtx/simd_vec4.hpp"
    -00049 #else
    -00050 #       error "GLM: GLM_GTX_simd_mat4 requires compiler support of SSE2 through intrinsics"
    -00051 #endif
    -00052 
    -00053 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00054 #       pragma message("GLM: GLM_GTX_simd_mat4 extension included")
    -00055 #endif
    -00056 
    -00057 namespace glm{
    -00058 namespace detail
    -00059 {
    -00062         GLM_ALIGNED_STRUCT(16) fmat4x4SIMD
    -00063         {
    -00064                 enum ctor{null};
    -00065 
    -00066                 typedef float value_type;
    -00067                 typedef fvec4SIMD col_type;
    -00068                 typedef fvec4SIMD row_type;
    -00069                 typedef std::size_t size_type;
    -00070                 static size_type value_size();
    -00071                 static size_type col_size();
    -00072                 static size_type row_size();
    -00073                 static bool is_matrix();
    -00074 
    -00075                 fvec4SIMD Data[4];
    -00076 
    -00078                 // Constructors
    -00079 
    -00080                 fmat4x4SIMD();
    -00081                 explicit fmat4x4SIMD(float const & s);
    -00082                 explicit fmat4x4SIMD(
    -00083                         float const & x0, float const & y0, float const & z0, float const & w0,
    -00084                         float const & x1, float const & y1, float const & z1, float const & w1,
    -00085                         float const & x2, float const & y2, float const & z2, float const & w2,
    -00086                         float const & x3, float const & y3, float const & z3, float const & w3);
    -00087                 explicit fmat4x4SIMD(
    -00088                         fvec4SIMD const & v0,
    -00089                         fvec4SIMD const & v1,
    -00090                         fvec4SIMD const & v2,
    -00091                         fvec4SIMD const & v3);
    -00092                 explicit fmat4x4SIMD(
    -00093                         tmat4x4<float> const & m);
    -00094 
    -00095                 // Conversions
    -00096                 //template <typename U> 
    -00097                 //explicit tmat4x4(tmat4x4<U> const & m);
    -00098 
    -00099                 //explicit tmat4x4(tmat2x2<T> const & x);
    -00100                 //explicit tmat4x4(tmat3x3<T> const & x);
    -00101                 //explicit tmat4x4(tmat2x3<T> const & x);
    -00102                 //explicit tmat4x4(tmat3x2<T> const & x);
    -00103                 //explicit tmat4x4(tmat2x4<T> const & x);
    -00104                 //explicit tmat4x4(tmat4x2<T> const & x);
    -00105                 //explicit tmat4x4(tmat3x4<T> const & x);
    -00106                 //explicit tmat4x4(tmat4x3<T> const & x);
    -00107 
    -00108                 // Accesses
    -00109                 fvec4SIMD & operator[](size_type i);
    -00110                 fvec4SIMD const & operator[](size_type i) const;
    -00111 
    -00112                 // Unary updatable operators
    -00113                 fmat4x4SIMD & operator= (fmat4x4SIMD const & m);
    -00114                 fmat4x4SIMD & operator+= (float const & s);
    -00115                 fmat4x4SIMD & operator+= (fmat4x4SIMD const & m);
    -00116                 fmat4x4SIMD & operator-= (float const & s);
    -00117                 fmat4x4SIMD & operator-= (fmat4x4SIMD const & m);
    -00118                 fmat4x4SIMD & operator*= (float const & s);
    -00119                 fmat4x4SIMD & operator*= (fmat4x4SIMD const & m);
    -00120                 fmat4x4SIMD & operator/= (float const & s);
    -00121                 fmat4x4SIMD & operator/= (fmat4x4SIMD const & m);
    -00122                 fmat4x4SIMD & operator++ ();
    -00123                 fmat4x4SIMD & operator-- ();
    -00124         };
    -00125 
    -00126         // Binary operators
    -00127         fmat4x4SIMD operator+ (fmat4x4SIMD const & m, float const & s);
    -00128         fmat4x4SIMD operator+ (float const & s, fmat4x4SIMD const & m);
    -00129         fmat4x4SIMD operator+ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    -00130             
    -00131         fmat4x4SIMD operator- (fmat4x4SIMD const & m, float const & s);
    -00132         fmat4x4SIMD operator- (float const & s, fmat4x4SIMD const & m);
    -00133         fmat4x4SIMD operator- (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    -00134 
    -00135         fmat4x4SIMD operator* (fmat4x4SIMD const & m, float const & s);
    -00136         fmat4x4SIMD operator* (float const & s, fmat4x4SIMD const & m);
    -00137 
    -00138         fvec4SIMD operator* (fmat4x4SIMD const & m, fvec4SIMD const & v);
    -00139         fvec4SIMD operator* (fvec4SIMD const & v, fmat4x4SIMD const & m);
    -00140 
    -00141         fmat4x4SIMD operator* (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    -00142 
    -00143         fmat4x4SIMD operator/ (fmat4x4SIMD const & m, float const & s);
    -00144         fmat4x4SIMD operator/ (float const & s, fmat4x4SIMD const & m);
    -00145 
    -00146         fvec4SIMD operator/ (fmat4x4SIMD const & m, fvec4SIMD const & v);
    -00147         fvec4SIMD operator/ (fvec4SIMD const & v, fmat4x4SIMD const & m);
    -00148 
    -00149         fmat4x4SIMD operator/ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    -00150 
    -00151         // Unary constant operators
    -00152         fmat4x4SIMD const operator-  (fmat4x4SIMD const & m);
    -00153         fmat4x4SIMD const operator-- (fmat4x4SIMD const & m, int);
    -00154         fmat4x4SIMD const operator++ (fmat4x4SIMD const & m, int);
    -00155 }//namespace detail
    -00156 
    -00157         typedef detail::fmat4x4SIMD simdMat4;
    -00158 
    -00161 
    -00164         detail::tmat4x4<float> mat4_cast(
    -00165                 detail::fmat4x4SIMD const & x);
    -00166 
    -00170         detail::fmat4x4SIMD matrixCompMult(
    -00171                 detail::fmat4x4SIMD const & x,
    -00172                 detail::fmat4x4SIMD const & y);
    -00173 
    -00178         detail::fmat4x4SIMD outerProduct(
    -00179                 detail::fvec4SIMD const & c,
    -00180                 detail::fvec4SIMD const & r);
    -00181 
    -00184         detail::fmat4x4SIMD transpose(
    -00185                 detail::fmat4x4SIMD const & x);
    -00186 
    -00189         float determinant(
    -00190                 detail::fmat4x4SIMD const & m);
    -00191 
    -00194         detail::fmat4x4SIMD inverse(
    -00195                 detail::fmat4x4SIMD const & m);
    -00196 
    -00198 }// namespace glm
    -00199 
    -00200 #include "simd_mat4.inl"
    -00201 
    -00202 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    -00203 
    -00204 #endif//GLM_GTX_simd_mat4
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_setup
    +
    30 #define glm_setup
    +
    31 
    +
    33 // Version
    +
    34 
    +
    35 #define GLM_VERSION 94
    +
    36 #define GLM_VERSION_MAJOR 0
    +
    37 #define GLM_VERSION_MINOR 9
    +
    38 #define GLM_VERSION_PATCH 4
    +
    39 #define GLM_VERSION_REVISION 0
    +
    40 
    +
    42 // Platform
    +
    43 
    +
    44 #define GLM_PLATFORM_UNKNOWN 0x00000000
    +
    45 #define GLM_PLATFORM_WINDOWS 0x00010000
    +
    46 #define GLM_PLATFORM_LINUX 0x00020000
    +
    47 #define GLM_PLATFORM_APPLE 0x00040000
    +
    48 //#define GLM_PLATFORM_IOS 0x00080000
    +
    49 #define GLM_PLATFORM_ANDROID 0x00100000
    +
    50 #define GLM_PLATFORM_CHROME_NACL 0x00200000
    +
    51 #define GLM_PLATFORM_UNIX 0x00400000
    +
    52 #define GLM_PLATFORM_QNXNTO 0x00800000
    +
    53 
    +
    54 #ifdef GLM_FORCE_PLATFORM_UNKNOWN
    +
    55 # define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
    +
    56 #elif defined(__QNXNTO__)
    +
    57 # define GLM_PLATFORM GLM_PLATFORM_QNXNTO
    +
    58 #elif defined(__APPLE__)
    +
    59 # define GLM_PLATFORM GLM_PLATFORM_APPLE
    +
    60 #elif defined(_WIN32)
    +
    61 # define GLM_PLATFORM GLM_PLATFORM_WINDOWS
    +
    62 #elif defined(__native_client__)
    +
    63 # define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL
    +
    64 #elif defined(__ANDROID__)
    +
    65 # define GLM_PLATFORM GLM_PLATFORM_ANDROID
    +
    66 #elif defined(__linux)
    +
    67 # define GLM_PLATFORM GLM_PLATFORM_LINUX
    +
    68 #elif defined(__unix)
    +
    69 # define GLM_PLATFORM GLM_PLATFORM_UNIX
    +
    70 #else
    +
    71 # define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
    +
    72 #endif//
    +
    73 
    +
    74 // Report platform detection
    +
    75 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_PLATFORM_DISPLAYED))
    +
    76 # define GLM_MESSAGE_PLATFORM_DISPLAYED
    +
    77 # if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
    +
    78 # pragma message("GLM: Windows platform detected")
    +
    79 //# elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
    +
    80 //# pragma message("GLM: iOS platform detected")
    +
    81 # elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
    +
    82 # pragma message("GLM: Apple platform detected")
    +
    83 # elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
    +
    84 # pragma message("GLM: Linux platform detected")
    +
    85 # elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
    +
    86 # pragma message("GLM: UNIX platform detected")
    +
    87 # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
    +
    88 # pragma message("GLM: Android platform detected")
    +
    89 # elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
    +
    90 # pragma message("GLM: Chrone Native Client detected")
    +
    91 # elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
    +
    92 # pragma message("GLM: platform unknown")
    +
    93 # else
    +
    94 # pragma message("GLM: platform not detected")
    +
    95 # endif
    +
    96 #endif//GLM_MESSAGE
    +
    97 
    +
    99 // Compiler
    +
    100 
    +
    101 // User defines: GLM_FORCE_COMPILER_UNKNOWN
    +
    102 // TODO ? __llvm__
    +
    103 
    +
    104 #define GLM_COMPILER_UNKNOWN 0x00000000
    +
    105 
    +
    106 // Visual C++ defines
    +
    107 #define GLM_COMPILER_VC 0x01000000
    +
    108 #define GLM_COMPILER_VC2 0x01000010
    +
    109 #define GLM_COMPILER_VC4 0x01000020
    +
    110 #define GLM_COMPILER_VC5 0x01000030
    +
    111 #define GLM_COMPILER_VC6 0x01000040
    +
    112 #define GLM_COMPILER_VC2002 0x01000050
    +
    113 #define GLM_COMPILER_VC2003 0x01000060
    +
    114 #define GLM_COMPILER_VC2005 0x01000070
    +
    115 #define GLM_COMPILER_VC2008 0x01000080
    +
    116 #define GLM_COMPILER_VC2010 0x01000090
    +
    117 #define GLM_COMPILER_VC2012 0x010000A0
    +
    118 
    +
    119 // GCC defines
    +
    120 #define GLM_COMPILER_GCC 0x02000000
    +
    121 #define GLM_COMPILER_GCC_LLVM 0x02000001
    +
    122 #define GLM_COMPILER_GCC_CLANG 0x02000002
    +
    123 #define GLM_COMPILER_GCC30 0x02000010
    +
    124 #define GLM_COMPILER_GCC31 0x02000020
    +
    125 #define GLM_COMPILER_GCC32 0x02000030
    +
    126 #define GLM_COMPILER_GCC33 0x02000040
    +
    127 #define GLM_COMPILER_GCC34 0x02000050
    +
    128 #define GLM_COMPILER_GCC35 0x02000060
    +
    129 #define GLM_COMPILER_GCC40 0x02000070
    +
    130 #define GLM_COMPILER_GCC41 0x02000080
    +
    131 #define GLM_COMPILER_GCC42 0x02000090
    +
    132 #define GLM_COMPILER_GCC43 0x020000A0
    +
    133 #define GLM_COMPILER_GCC44 0x020000B0
    +
    134 #define GLM_COMPILER_GCC45 0x020000C0
    +
    135 #define GLM_COMPILER_GCC46 0x020000D0
    +
    136 #define GLM_COMPILER_GCC47 0x020000E0
    +
    137 #define GLM_COMPILER_GCC48 0x020000F0
    +
    138 #define GLM_COMPILER_GCC49 0x02000100
    +
    139 #define GLM_COMPILER_GCC50 0x02000200
    +
    140 
    +
    141 // G++ command line to display defined
    +
    142 // echo "" | g++ -E -dM -x c++ - | sort
    +
    143 
    +
    144 // Borland C++ defines. How to identify BC?
    +
    145 #define GLM_COMPILER_BC 0x04000000
    +
    146 #define GLM_COMPILER_BCB4 0x04000100
    +
    147 #define GLM_COMPILER_BCB5 0x04000200
    +
    148 #define GLM_COMPILER_BCB6 0x04000300
    +
    149 //#define GLM_COMPILER_BCBX 0x04000400 // What's the version value?
    +
    150 #define GLM_COMPILER_BCB2009 0x04000500
    +
    151 
    +
    152 // CodeWarrior
    +
    153 #define GLM_COMPILER_CODEWARRIOR 0x08000000
    +
    154 
    +
    155 // CUDA
    +
    156 #define GLM_COMPILER_CUDA 0x10000000
    +
    157 #define GLM_COMPILER_CUDA30 0x10000010
    +
    158 #define GLM_COMPILER_CUDA31 0x10000020
    +
    159 #define GLM_COMPILER_CUDA32 0x10000030
    +
    160 #define GLM_COMPILER_CUDA40 0x10000040
    +
    161 #define GLM_COMPILER_CUDA41 0x10000050
    +
    162 #define GLM_COMPILER_CUDA42 0x10000060
    +
    163 
    +
    164 // Clang
    +
    165 #define GLM_COMPILER_CLANG 0x20000000
    +
    166 #define GLM_COMPILER_CLANG26 0x20000010
    +
    167 #define GLM_COMPILER_CLANG27 0x20000020
    +
    168 #define GLM_COMPILER_CLANG28 0x20000030
    +
    169 #define GLM_COMPILER_CLANG29 0x20000040
    +
    170 #define GLM_COMPILER_CLANG30 0x20000050
    +
    171 #define GLM_COMPILER_CLANG31 0x20000060
    +
    172 #define GLM_COMPILER_CLANG32 0x20000070
    +
    173 #define GLM_COMPILER_CLANG33 0x20000080
    +
    174 #define GLM_COMPILER_CLANG40 0x20000090
    +
    175 #define GLM_COMPILER_CLANG41 0x200000A0
    +
    176 #define GLM_COMPILER_CLANG42 0x200000B0
    +
    177 #define GLM_COMPILER_CLANG43 0x200000C0
    +
    178 
    +
    179 // LLVM GCC
    +
    180 #define GLM_COMPILER_LLVM_GCC 0x40000000
    +
    181 
    +
    182 // Intel
    +
    183 #define GLM_COMPILER_INTEL 0x80000000
    +
    184 #define GLM_COMPILER_INTEL9 0x80000010
    +
    185 #define GLM_COMPILER_INTEL10_0 0x80000020
    +
    186 #define GLM_COMPILER_INTEL10_1 0x80000030
    +
    187 #define GLM_COMPILER_INTEL11_0 0x80000040
    +
    188 #define GLM_COMPILER_INTEL11_1 0x80000050
    +
    189 #define GLM_COMPILER_INTEL12_0 0x80000060
    +
    190 #define GLM_COMPILER_INTEL12_1 0x80000070
    +
    191 #define GLM_COMPILER_INTEL13_0 0x80000080
    +
    192 
    +
    193 // Build model
    +
    194 #define GLM_MODEL_32 0x00000010
    +
    195 #define GLM_MODEL_64 0x00000020
    +
    196 
    +
    197 // Force generic C++ compiler
    +
    198 #ifdef GLM_FORCE_COMPILER_UNKNOWN
    +
    199 # define GLM_COMPILER GLM_COMPILER_UNKNOWN
    +
    200 
    +
    201 #elif defined(__INTEL_COMPILER)
    +
    202 # if __INTEL_COMPILER == 900
    +
    203 # define GLM_COMPILER GLM_COMPILER_INTEL9
    +
    204 # elif __INTEL_COMPILER == 1000
    +
    205 # define GLM_COMPILER GLM_COMPILER_INTEL10_0
    +
    206 # elif __INTEL_COMPILER == 1010
    +
    207 # define GLM_COMPILER GLM_COMPILER_INTEL10_1
    +
    208 # elif __INTEL_COMPILER == 1100
    +
    209 # define GLM_COMPILER GLM_COMPILER_INTEL11_0
    +
    210 # elif __INTEL_COMPILER == 1110
    +
    211 # define GLM_COMPILER GLM_COMPILER_INTEL11_1
    +
    212 # elif __INTEL_COMPILER == 1200
    +
    213 # define GLM_COMPILER GLM_COMPILER_INTEL12_0
    +
    214 # elif __INTEL_COMPILER == 1210
    +
    215 # define GLM_COMPILER GLM_COMPILER_INTEL12_1
    +
    216 # elif __INTEL_COMPILER == 1300
    +
    217 # define GLM_COMPILER GLM_COMPILER_INTEL13_0
    +
    218 # else
    +
    219 # define GLM_COMPILER GLM_COMPILER_INTEL
    +
    220 # endif
    +
    221 
    +
    222 // CUDA
    +
    223 #elif defined(__CUDACC__)
    +
    224 # define GLM_COMPILER GLM_COMPILER_CUDA
    +
    225 /*
    +
    226 # if CUDA_VERSION < 3000
    +
    227 # error "GLM requires CUDA 3.0 or higher"
    +
    228 # elif CUDA_VERSION == 3000
    +
    229 # define GLM_COMPILER GLM_COMPILER_CUDA30
    +
    230 # elif CUDA_VERSION == 3010
    +
    231 # define GLM_COMPILER GLM_COMPILER_CUDA31
    +
    232 # elif CUDA_VERSION == 3020
    +
    233 # define GLM_COMPILER GLM_COMPILER_CUDA32
    +
    234 # elif CUDA_VERSION == 4000
    +
    235 # define GLM_COMPILER GLM_COMPILER_CUDA40
    +
    236 # elif CUDA_VERSION == 4010
    +
    237 # define GLM_COMPILER GLM_COMPILER_CUDA41
    +
    238 # elif CUDA_VERSION == 4020
    +
    239 # define GLM_COMPILER GLM_COMPILER_CUDA42
    +
    240 # else
    +
    241 # define GLM_COMPILER GLM_COMPILER_CUDA
    +
    242 # endif
    +
    243 */
    +
    244 
    +
    245 // Visual C++
    +
    246 #elif defined(_MSC_VER)
    +
    247 # if _MSC_VER == 900
    +
    248 # define GLM_COMPILER GLM_COMPILER_VC2
    +
    249 # elif _MSC_VER == 1000
    +
    250 # define GLM_COMPILER GLM_COMPILER_VC4
    +
    251 # elif _MSC_VER == 1100
    +
    252 # define GLM_COMPILER GLM_COMPILER_VC5
    +
    253 # elif _MSC_VER == 1200
    +
    254 # define GLM_COMPILER GLM_COMPILER_VC6
    +
    255 # elif _MSC_VER == 1300
    +
    256 # define GLM_COMPILER GLM_COMPILER_VC2002
    +
    257 # elif _MSC_VER == 1310
    +
    258 # define GLM_COMPILER GLM_COMPILER_VC2003
    +
    259 # elif _MSC_VER == 1400
    +
    260 # define GLM_COMPILER GLM_COMPILER_VC2005
    +
    261 # elif _MSC_VER == 1500
    +
    262 # define GLM_COMPILER GLM_COMPILER_VC2008
    +
    263 # elif _MSC_VER == 1600
    +
    264 # define GLM_COMPILER GLM_COMPILER_VC2010
    +
    265 # elif _MSC_VER == 1700
    +
    266 # define GLM_COMPILER GLM_COMPILER_VC2012
    +
    267 # else//_MSC_VER
    +
    268 # define GLM_COMPILER GLM_COMPILER_VC
    +
    269 # endif//_MSC_VER
    +
    270 
    +
    271 // Clang
    +
    272 #elif defined(__clang__)
    +
    273 # if(__clang_major__ == 2) && (__clang_minor__ == 6)
    +
    274 # define GLM_COMPILER GLM_COMPILER_CLANG26
    +
    275 # elif(__clang_major__ == 2) && (__clang_minor__ == 7)
    +
    276 # define GLM_COMPILER GLM_COMPILER_CLANG27
    +
    277 # elif(__clang_major__ == 2) && (__clang_minor__ == 8)
    +
    278 # define GLM_COMPILER GLM_COMPILER_CLANG28
    +
    279 # elif(__clang_major__ == 2) && (__clang_minor__ == 9)
    +
    280 # define GLM_COMPILER GLM_COMPILER_CLANG29
    +
    281 # elif(__clang_major__ == 3) && (__clang_minor__ == 0)
    +
    282 # define GLM_COMPILER GLM_COMPILER_CLANG30
    +
    283 # elif(__clang_major__ == 3) && (__clang_minor__ == 1)
    +
    284 # define GLM_COMPILER GLM_COMPILER_CLANG31
    +
    285 # elif(__clang_major__ == 3) && (__clang_minor__ == 2)
    +
    286 # define GLM_COMPILER GLM_COMPILER_CLANG32
    +
    287 # elif(__clang_major__ == 3) && (__clang_minor__ == 3)
    +
    288 # define GLM_COMPILER GLM_COMPILER_CLANG33
    +
    289 # elif(__clang_major__ == 4) && (__clang_minor__ == 0)
    +
    290 # define GLM_COMPILER GLM_COMPILER_CLANG40
    +
    291 # elif(__clang_major__ == 4) && (__clang_minor__ == 1)
    +
    292 # define GLM_COMPILER GLM_COMPILER_CLANG41
    +
    293 # elif(__clang_major__ == 4) && (__clang_minor__ == 2)
    +
    294 # define GLM_COMPILER GLM_COMPILER_CLANG42
    +
    295 # elif(__clang_major__ == 4) && (__clang_minor__ == 3)
    +
    296 # define GLM_COMPILER GLM_COMPILER_CLANG43
    +
    297 # else
    +
    298 # define GLM_COMPILER GLM_COMPILER_CLANG
    +
    299 # endif
    +
    300 
    +
    301 // G++
    +
    302 #elif(defined(__GNUC__) || defined(__MINGW32__))// || defined(__llvm__) || defined(__clang__)
    +
    303 # if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2)
    +
    304 # define GLM_COMPILER GLM_COMPILER_GCC32
    +
    305 # elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 3)
    +
    306 # define GLM_COMPILER GLM_COMPILER_GCC33
    +
    307 # elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 4)
    +
    308 # define GLM_COMPILER GLM_COMPILER_GCC34
    +
    309 # elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 5)
    +
    310 # define GLM_COMPILER GLM_COMPILER_GCC35
    +
    311 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 0)
    +
    312 # define GLM_COMPILER (GLM_COMPILER_GCC40)
    +
    313 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 1)
    +
    314 # define GLM_COMPILER (GLM_COMPILER_GCC41)
    +
    315 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
    +
    316 # define GLM_COMPILER (GLM_COMPILER_GCC42)
    +
    317 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
    +
    318 # define GLM_COMPILER (GLM_COMPILER_GCC43)
    +
    319 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4)
    +
    320 # define GLM_COMPILER (GLM_COMPILER_GCC44)
    +
    321 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 5)
    +
    322 # define GLM_COMPILER (GLM_COMPILER_GCC45)
    +
    323 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
    +
    324 # define GLM_COMPILER (GLM_COMPILER_GCC46)
    +
    325 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 7)
    +
    326 # define GLM_COMPILER (GLM_COMPILER_GCC47)
    +
    327 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
    +
    328 # define GLM_COMPILER (GLM_COMPILER_GCC48)
    +
    329 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 9)
    +
    330 # define GLM_COMPILER (GLM_COMPILER_GCC49)
    +
    331 # elif (__GNUC__ == 5) && (__GNUC_MINOR__ == 0)
    +
    332 # define GLM_COMPILER (GLM_COMPILER_GCC50)
    +
    333 # else
    +
    334 # define GLM_COMPILER (GLM_COMPILER_GCC)
    +
    335 # endif
    +
    336 
    +
    337 // Borland C++
    +
    338 #elif defined(_BORLANDC_)
    +
    339 # if defined(VER125)
    +
    340 # define GLM_COMPILER GLM_COMPILER_BCB4
    +
    341 # elif defined(VER130)
    +
    342 # define GLM_COMPILER GLM_COMPILER_BCB5
    +
    343 # elif defined(VER140)
    +
    344 # define GLM_COMPILER GLM_COMPILER_BCB6
    +
    345 # elif defined(VER200)
    +
    346 # define GLM_COMPILER GLM_COMPILER_BCB2009
    +
    347 # else
    +
    348 # define GLM_COMPILER GLM_COMPILER_BC
    +
    349 # endif
    +
    350 
    +
    351 // Codewarrior
    +
    352 #elif defined(__MWERKS__)
    +
    353 # define GLM_COMPILER GLM_COMPILER_CODEWARRIOR
    +
    354 
    +
    355 #else
    +
    356 # define GLM_COMPILER GLM_COMPILER_UNKNOWN
    +
    357 #endif
    +
    358 
    +
    359 #ifndef GLM_COMPILER
    +
    360 #error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message."
    +
    361 #endif//GLM_COMPILER
    +
    362 
    +
    363 // Report compiler detection
    +
    364 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPILER_DISPLAYED))
    +
    365 # define GLM_MESSAGE_COMPILER_DISPLAYED
    +
    366 # if(GLM_COMPILER & GLM_COMPILER_CUDA)
    +
    367 # pragma message("GLM: CUDA compiler detected")
    +
    368 # elif(GLM_COMPILER & GLM_COMPILER_VC)
    +
    369 # pragma message("GLM: Visual C++ compiler detected")
    +
    370 # elif(GLM_COMPILER & GLM_COMPILER_CLANG)
    +
    371 # pragma message("GLM: Clang compiler detected")
    +
    372 # elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
    +
    373 # pragma message("GLM: LLVM GCC compiler detected")
    +
    374 # elif(GLM_COMPILER & GLM_COMPILER_GCC)
    +
    375 # if(GLM_COMPILER == GLM_COMPILER_GCC_LLVM)
    +
    376 # pragma message("GLM: LLVM GCC compiler detected")
    +
    377 # elif(GLM_COMPILER == GLM_COMPILER_GCC_CLANG)
    +
    378 # pragma message("GLM: CLANG compiler detected")
    +
    379 # else
    +
    380 # pragma message("GLM: GCC compiler detected")
    +
    381 # endif
    +
    382 # elif(GLM_COMPILER & GLM_COMPILER_BC)
    +
    383 # pragma message("GLM: Borland compiler detected but not supported")
    +
    384 # elif(GLM_COMPILER & GLM_COMPILER_CODEWARRIOR)
    +
    385 # pragma message("GLM: Codewarrior compiler detected but not supported")
    +
    386 # else
    +
    387 # pragma message("GLM: Compiler not detected")
    +
    388 # endif
    +
    389 #endif//GLM_MESSAGE
    +
    390 
    +
    392 // Build model //
    +
    393 
    +
    394 #if(defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__))
    +
    395 # define GLM_MODEL GLM_MODEL_64
    +
    396 #elif(defined(__i386__) || defined(__ppc__))
    +
    397 # define GLM_MODEL GLM_MODEL_32
    +
    398 #else
    +
    399 # define GLM_MODEL GLM_MODEL_32
    +
    400 #endif//
    +
    401 
    +
    402 #if(!defined(GLM_MODEL) && GLM_COMPILER != 0)
    +
    403 # error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
    +
    404 #endif//GLM_MODEL
    +
    405 
    +
    406 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_MODEL_DISPLAYED))
    +
    407 # define GLM_MESSAGE_MODEL_DISPLAYED
    +
    408 # if(GLM_MODEL == GLM_MODEL_64)
    +
    409 # pragma message("GLM: 64 bits model")
    +
    410 # elif(GLM_MODEL == GLM_MODEL_32)
    +
    411 # pragma message("GLM: 32 bits model")
    +
    412 # endif//GLM_MODEL
    +
    413 #endif//GLM_MESSAGE
    +
    414 
    +
    416 // C++ Version //
    +
    417 
    +
    418 // User defines: GLM_FORCE_CXX98
    +
    419 
    +
    420 #define GLM_LANG_CXX (0 << 0)
    +
    421 #define GLM_LANG_CXX98 ((1 << 1) | GLM_LANG_CXX)
    +
    422 #define GLM_LANG_CXX03 ((1 << 2) | GLM_LANG_CXX98)
    +
    423 #define GLM_LANG_CXX0X ((1 << 3) | GLM_LANG_CXX03)
    +
    424 #define GLM_LANG_CXX11 ((1 << 4) | GLM_LANG_CXX0X)
    +
    425 #define GLM_LANG_CXXMS (1 << 5)
    +
    426 #define GLM_LANG_CXXGNU (1 << 6)
    +
    427 
    +
    428 #if(defined(GLM_FORCE_CXX11))
    +
    429 # define GLM_LANG GLM_LANG_CXX11
    +
    430 #elif(defined(GLM_FORCE_CXX03))
    +
    431 # define GLM_LANG GLM_LANG_CXX03
    +
    432 #elif(defined(GLM_FORCE_CXX98))
    +
    433 # define GLM_LANG GLM_LANG_CXX98
    +
    434 #else
    +
    435 // -std=c++0x or -std=gnu++0x
    +
    436 # if(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && defined(__GXX_EXPERIMENTAL_CXX0X__))
    +
    437 # define GLM_LANG GLM_LANG_CXX0X
    +
    438 # elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && defined(_MSC_EXTENSIONS))
    +
    439 # define GLM_LANG GLM_LANG_CXXMS
    +
    440 # elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && !defined(_MSC_EXTENSIONS))
    +
    441 # if(GLM_COMPILER >= GLM_COMPILER_VC2010)
    +
    442 # define GLM_LANG GLM_LANG_CXX0X
    +
    443 # else
    +
    444 # define GLM_LANG GLM_LANG_CXX98
    +
    445 # endif//(GLM_COMPILER == GLM_COMPILER_VC2010)
    +
    446 # elif((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) //&& defined(__STRICT_ANSI__))
    +
    447 # define GLM_LANG GLM_LANG_CXX98
    +
    448 # elif((GLM_COMPILER & GLM_COMPILER_CLANG) == GLM_COMPILER_CLANG)
    +
    449 # define GLM_LANG GLM_LANG_CXX98
    +
    450 # else
    +
    451 # define GLM_LANG GLM_LANG_CXX
    +
    452 # endif
    +
    453 #endif
    +
    454 
    +
    455 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED))
    +
    456 # define GLM_MESSAGE_LANG_DISPLAYED
    +
    457 # if(GLM_LANG == GLM_LANG_CXX98)
    +
    458 # pragma message("GLM: C++98")
    +
    459 # elif(GLM_LANG == GLM_LANG_CXX03)
    +
    460 # pragma message("GLM: C++03")
    +
    461 # elif(GLM_LANG == GLM_LANG_CXX0X)
    +
    462 # pragma message("GLM: C++0x")
    +
    463 # elif(GLM_LANG == GLM_LANG_CXX11)
    +
    464 # pragma message("GLM: C++11")
    +
    465 # elif(GLM_LANG == GLM_LANG_CXXGNU)
    +
    466 # pragma message("GLM: C++ with GNU language extensions")
    +
    467 # elif(GLM_LANG == GLM_LANG_CXXMS)
    +
    468 # pragma message("GLM: C++ with VC language extensions")
    +
    469 # else
    +
    470 # pragma message("GLM: C++ language undetected")
    +
    471 # endif//GLM_MODEL
    +
    472 #endif//GLM_MESSAGE
    +
    473 
    +
    475 // Platform
    +
    476 
    +
    477 // User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_AVX
    +
    478 
    +
    479 #define GLM_ARCH_PURE 0x0000
    +
    480 #define GLM_ARCH_SSE2 0x0001
    +
    481 #define GLM_ARCH_SSE3 0x0002// | GLM_ARCH_SSE2
    +
    482 #define GLM_ARCH_SSE4 0x0004// | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
    +
    483 #define GLM_ARCH_AVX 0x0008// | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
    +
    484 #define GLM_ARCH_AVX2 0x0010// | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
    +
    485 
    +
    486 #if(defined(GLM_FORCE_PURE))
    +
    487 # define GLM_ARCH GLM_ARCH_PURE
    +
    488 #elif(defined(GLM_FORCE_AVX2))
    +
    489 # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    490 #elif(defined(GLM_FORCE_AVX))
    +
    491 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    492 #elif(defined(GLM_FORCE_SSE4))
    +
    493 # define GLM_ARCH (GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    494 #elif(defined(GLM_FORCE_SSE3))
    +
    495 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    496 #elif(defined(GLM_FORCE_SSE2))
    +
    497 # define GLM_ARCH (GLM_ARCH_SSE2)
    +
    498 #elif((GLM_COMPILER & GLM_COMPILER_VC) && (defined(_M_IX86) || defined(_M_X64)))
    +
    499 # if(defined(_M_CEE_PURE))
    +
    500 # define GLM_ARCH GLM_ARCH_PURE
    +
    501 /* TODO: Explore auto detection of instruction set support
    +
    502 # elif(defined(_M_IX86_FP))
    +
    503 # if(_M_IX86_FP >= 3)
    +
    504 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    505 # elif(_M_IX86_FP >= 2)
    +
    506 # define GLM_ARCH (GLM_ARCH_SSE2)
    +
    507 # else
    +
    508 # define GLM_ARCH GLM_ARCH_PURE
    +
    509 # endif
    +
    510 */
    +
    511 # elif(GLM_COMPILER >= GLM_COMPILER_VC2012)
    +
    512 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    513 # elif(GLM_COMPILER >= GLM_COMPILER_VC2010)
    +
    514 # if(_MSC_FULL_VER >= 160031118) //160031118: VC2010 SP1 beta full version
    +
    515 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)//GLM_ARCH_AVX (Require SP1)
    +
    516 # else
    +
    517 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    518 # endif
    +
    519 # elif(GLM_COMPILER >= GLM_COMPILER_VC2008)
    +
    520 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    521 # elif(GLM_COMPILER >= GLM_COMPILER_VC2005)
    +
    522 # define GLM_ARCH GLM_ARCH_SSE2
    +
    523 # else
    +
    524 # define GLM_ARCH GLM_ARCH_PURE
    +
    525 # endif
    +
    526 #elif((GLM_PLATFORM & GLM_PLATFORM_APPLE) && (GLM_COMPILER & GLM_COMPILER_GCC))
    +
    527 # define GLM_ARCH GLM_ARCH_PURE
    +
    528 #elif(((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__))) || (GLM_COMPILER & GLM_COMPILER_LLVM_GCC))
    +
    529 # define GLM_ARCH (GLM_ARCH_PURE \
    +
    530 | (defined(__AVX2__) ? GLM_ARCH_AVX2 : 0) \
    +
    531 | (defined(__AVX__) ? GLM_ARCH_AVX : 0) \
    +
    532 | (defined(__SSE4__) ? GLM_ARCH_SSE4 : 0) \
    +
    533 | (defined(__SSE3__) ? GLM_ARCH_SSE3 : 0) \
    +
    534 | (defined(__SSE2__) ? GLM_ARCH_SSE2 : 0))
    +
    535 #else
    +
    536 # define GLM_ARCH GLM_ARCH_PURE
    +
    537 #endif
    +
    538 
    +
    539 //#if(GLM_ARCH != GLM_ARCH_PURE)
    +
    540 #if(GLM_ARCH & GLM_ARCH_AVX2)
    +
    541 # include <immintrin.h>
    +
    542 #endif//GLM_ARCH
    +
    543 #if(GLM_ARCH & GLM_ARCH_AVX)
    +
    544 # include <immintrin.h>
    +
    545 #endif//GLM_ARCH
    +
    546 #if(GLM_ARCH & GLM_ARCH_SSE4)
    +
    547 # include <smmintrin.h>
    +
    548 #endif//GLM_ARCH
    +
    549 #if(GLM_ARCH & GLM_ARCH_SSE3)
    +
    550 # include <pmmintrin.h>
    +
    551 #endif//GLM_ARCH
    +
    552 #if(GLM_ARCH & GLM_ARCH_SSE2)
    +
    553 # include <emmintrin.h>
    +
    554 #endif//GLM_ARCH
    +
    555 //#endif//(GLM_ARCH != GLM_ARCH_PURE)
    +
    556 
    +
    557 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_ARCH_DISPLAYED))
    +
    558 # define GLM_MESSAGE_ARCH_DISPLAYED
    +
    559 # if(GLM_ARCH == GLM_ARCH_PURE)
    +
    560 # pragma message("GLM: Platform independent")
    +
    561 # elif(GLM_ARCH & GLM_ARCH_SSE2)
    +
    562 # pragma message("GLM: SSE2 instruction set")
    +
    563 # elif(GLM_ARCH & GLM_ARCH_SSE3)
    +
    564 # pragma message("GLM: SSE3 instruction set")
    +
    565 # elif(GLM_ARCH & GLM_ARCH_SSE4)
    +
    566 # pragma message("GLM: SSE4 instruction set")
    +
    567 # elif(GLM_ARCH & GLM_ARCH_AVX)
    +
    568 # pragma message("GLM: AVX instruction set")
    +
    569 # elif(GLM_ARCH & GLM_ARCH_AVX2)
    +
    570 # pragma message("GLM: AVX2 instruction set")
    +
    571 # endif//GLM_ARCH
    +
    572 #endif//GLM_MESSAGE
    +
    573 
    +
    575 // Support check macros
    +
    576 
    +
    577 #define GLM_SUPPORT_ANONYMOUS_UNION() \
    +
    578  ((GLM_LANG & GLM_LANG_CXX98) == GLM_LANG_CXX98)
    +
    579 
    +
    580 //#define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() <backslash>
    +
    581 // (((GLM_LANG & GLM_LANG_CXX11) == GLM_LANG_CXX11) || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_LANG & GLM_LANG_CXXMS) == GLM_LANG_CXXMS) || ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_LANG == GLM_LANG_CXX0X)))
    +
    582 
    +
    583 #define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() \
    +
    584  (((GLM_LANG & GLM_LANG_CXX11) == GLM_LANG_CXX11) || ((GLM_COMPILER & GLM_COMPILER_VC) && ((GLM_LANG & GLM_LANG_CXXMS) == GLM_LANG_CXXMS)) || ((GLM_LANG == GLM_LANG_CXX0X) == GLM_LANG_CXX0X))
    +
    585 
    +
    586 #define GLM_SUPPORT_SWIZZLE_OPERATOR() \
    +
    587  (/*defined(GLM_SWIZZLE) && */GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE())
    +
    588 
    +
    589 #define GLM_SUPPORT_SWIZZLE_FUNCTION() defined(GLM_SWIZZLE)
    +
    590 
    +
    592 // Components
    +
    593 
    +
    594 //#define GLM_FORCE_ONLY_XYZW
    +
    595 #define GLM_COMPONENT_ONLY_XYZW 0 // To disable multiple vector component names access.
    +
    596 #define GLM_COMPONENT_CXX98 1 //
    +
    597 #define GLM_COMPONENT_CXX11 2 // To use anonymous union to provide multiple component names access for class valType. Visual C++ only.
    +
    598 
    +
    599 #if(GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() && !defined(GLM_FORCE_ONLY_XYZW))
    +
    600 # define GLM_COMPONENT GLM_COMPONENT_CXX11
    +
    601 #elif(GLM_SUPPORT_ANONYMOUS_UNION() && !defined(GLM_FORCE_ONLY_XYZW))
    +
    602 # define GLM_COMPONENT GLM_COMPONENT_CXX98
    +
    603 #else
    +
    604 # define GLM_COMPONENT GLM_COMPONENT_ONLY_XYZW
    +
    605 #endif
    +
    606 
    +
    607 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPONENT_DISPLAYED))
    +
    608 # define GLM_MESSAGE_COMPONENT_DISPLAYED
    +
    609 # if(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    +
    610 # pragma message("GLM: x,y,z,w; r,g,b,a; s,t,p,q component names except of half based vector types")
    +
    611 # elif(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    +
    612 # pragma message("GLM: x,y,z,w component names for all vector types")
    +
    613 # elif(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    +
    614 # pragma message("GLM: x,y,z,w; r,g,b,a; s,t,p,q component names for all vector types")
    +
    615 # else
    +
    616 # error "GLM: GLM_COMPONENT value unknown"
    +
    617 # endif//GLM_MESSAGE_COMPONENT_DISPLAYED
    +
    618 #endif//GLM_MESSAGE
    +
    619 
    +
    621 // Radians
    +
    622 
    +
    623 //#define GLM_FORCE_RADIANS
    +
    624 
    +
    626 // Static assert
    +
    627 
    +
    628 #if(GLM_LANG == GLM_LANG_CXX0X)
    +
    629 # define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
    +
    630 #elif(defined(BOOST_STATIC_ASSERT))
    +
    631 # define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)
    +
    632 #elif(GLM_COMPILER & GLM_COMPILER_VC)
    +
    633 # define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
    +
    634 #else
    +
    635 # define GLM_STATIC_ASSERT(x, message)
    +
    636 # define GLM_STATIC_ASSERT_NULL
    +
    637 #endif//GLM_LANG
    +
    638 
    +
    640 // Qualifiers
    +
    641 
    +
    642 // User defines: GLM_FORCE_INLINE GLM_FORCE_CUDA
    +
    643 
    +
    644 #if(defined(GLM_FORCE_CUDA) || (GLM_COMPILER & GLM_COMPILER_CUDA))
    +
    645 # define GLM_CUDA_FUNC_DEF __device__ __host__
    +
    646 # define GLM_CUDA_FUNC_DECL __device__ __host__
    +
    647 #else
    +
    648 # define GLM_CUDA_FUNC_DEF
    +
    649 # define GLM_CUDA_FUNC_DECL
    +
    650 #endif
    +
    651 
    +
    652 #if GLM_COMPILER & GLM_COMPILER_GCC
    +
    653 #define GLM_VAR_USED __attribute__ ((unused))
    +
    654 #else
    +
    655 #define GLM_VAR_USED
    +
    656 #endif
    +
    657 
    +
    658 #if(defined(GLM_FORCE_INLINE))
    +
    659 # if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
    +
    660 # define GLM_INLINE __forceinline
    +
    661 # elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC34))
    +
    662 # define GLM_INLINE __attribute__((always_inline))
    +
    663 # else
    +
    664 # define GLM_INLINE inline
    +
    665 # endif//GLM_COMPILER
    +
    666 #else
    +
    667 # define GLM_INLINE inline
    +
    668 #endif//defined(GLM_FORCE_INLINE)
    +
    669 
    +
    670 #define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
    +
    671 #define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
    +
    672 
    +
    674 // Swizzle operators
    +
    675 
    +
    676 // User defines: GLM_SWIZZLE
    +
    677 
    +
    678 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED))
    +
    679 # define GLM_MESSAGE_SWIZZLE_DISPLAYED
    +
    680 # if(GLM_SUPPORT_SWIZZLE_OPERATOR())
    +
    681 # pragma message("GLM: Swizzling operators enabled")
    +
    682 # elif(GLM_SUPPORT_SWIZZLE_FUNCTION())
    +
    683 # pragma message("GLM: Swizzling operators supported through swizzling functions")
    +
    684 # else
    +
    685 # pragma message("GLM: Swizzling operators disabled")
    +
    686 # endif
    +
    687 #endif//GLM_MESSAGE
    +
    688 
    +
    689 #endif//glm_setup
    +
    + - diff --git a/doc/api/a00085_source.html b/doc/api/a00085_source.html index 758d679d..0bc867cb 100644 --- a/doc/api/a00085_source.html +++ b/doc/api/a00085_source.html @@ -2,42 +2,31 @@ - -simd_vec4.hpp Source File + +simd_mat4.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,332 +35,205 @@
  • File List
  • + +
    -
    simd_vec4.hpp
    -
    +
    simd_mat4.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_simd_vec4
    -00039 #define GLM_GTX_simd_vec4 GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(GLM_ARCH != GLM_ARCH_PURE)
    -00045 
    -00046 #if(GLM_ARCH & GLM_ARCH_SSE2)
    -00047 #       include "../core/intrinsic_common.hpp"
    -00048 #       include "../core/intrinsic_geometric.hpp"
    -00049 #else
    -00050 #       error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
    -00051 #endif
    -00052 
    -00053 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00054 #       pragma message("GLM: GLM_GTX_simd_vec4 extension included")
    -00055 #endif
    -00056 
    -00057 namespace glm{
    -00058 namespace detail
    -00059 {
    -00062         GLM_ALIGNED_STRUCT(16) fvec4SIMD
    -00063         {
    -00064                 enum ctor{null};
    -00065                 typedef __m128 value_type;
    -00066                 typedef std::size_t size_type;
    -00067                 static size_type value_size();
    -00068 
    -00069                 typedef fvec4SIMD type;
    -00070                 typedef tvec4<bool> bool_type;
    -00071 
    -00072                 __m128 Data;
    -00073 
    -00075                 // Implicit basic constructors
    -00076 
    -00077                 fvec4SIMD();
    -00078                 fvec4SIMD(__m128 const & Data);
    -00079                 fvec4SIMD(fvec4SIMD const & v);
    -00080 
    -00082                 // Explicit basic constructors
    -00083 
    -00084                 explicit fvec4SIMD(
    -00085                         ctor);
    -00086                 explicit fvec4SIMD(
    -00087                         float const & s);
    -00088                 explicit fvec4SIMD(
    -00089                         float const & x, 
    -00090                         float const & y, 
    -00091                         float const & z, 
    -00092                         float const & w);
    -00093                 explicit fvec4SIMD(
    -00094                         tvec4<float> const & v);
    -00095 
    -00098 
    -00099                 fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
    -00100                 fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
    -00101                 fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
    -00102                 fvec4SIMD(vec3 const & v, float const & s);
    -00103                 fvec4SIMD(float const & s, vec3 const & v);
    -00104                 fvec4SIMD(vec2 const & v1, vec2 const & v2);
    -00105                 //fvec4SIMD(ivec4SIMD const & v);
    -00106 
    -00108                 // Unary arithmetic operators
    -00109 
    -00110                 fvec4SIMD& operator= (fvec4SIMD const & v);
    -00111                 fvec4SIMD& operator+=(fvec4SIMD const & v);
    -00112                 fvec4SIMD& operator-=(fvec4SIMD const & v);
    -00113                 fvec4SIMD& operator*=(fvec4SIMD const & v);
    -00114                 fvec4SIMD& operator/=(fvec4SIMD const & v);
    -00115 
    -00116                 fvec4SIMD& operator+=(float const & s);
    -00117                 fvec4SIMD& operator-=(float const & s);
    -00118                 fvec4SIMD& operator*=(float const & s);
    -00119                 fvec4SIMD& operator/=(float const & s);
    -00120 
    -00121                 fvec4SIMD& operator++();
    -00122                 fvec4SIMD& operator--();
    -00123 
    -00125                 // Swizzle operators
    -00126 
    -00127                 template <comp X, comp Y, comp Z, comp W>
    -00128                 fvec4SIMD& swizzle();
    -00129                 template <comp X, comp Y, comp Z, comp W>
    -00130                 fvec4SIMD swizzle() const;
    -00131                 template <comp X, comp Y, comp Z>
    -00132                 fvec4SIMD swizzle() const;
    -00133                 template <comp X, comp Y>
    -00134                 fvec4SIMD swizzle() const;
    -00135                 template <comp X>
    -00136                 fvec4SIMD swizzle() const;
    -00137         };
    -00138 }//namespace detail
    -00139 
    -00140         typedef glm::detail::fvec4SIMD simdVec4;
    -00141 
    -00144 
    -00147         detail::tvec4<float> vec4_cast(
    -00148                 detail::fvec4SIMD const & x);
    -00149 
    -00152         detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
    -00153 
    -00156         detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
    -00157 
    -00160         detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
    -00161 
    -00165         detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
    -00166 
    -00173         detail::fvec4SIMD round(detail::fvec4SIMD const & x);
    -00174 
    -00179         //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
    -00180 
    -00184         detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
    -00185 
    -00188         detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
    -00189 
    -00193         detail::fvec4SIMD mod(
    -00194                 detail::fvec4SIMD const & x, 
    -00195                 detail::fvec4SIMD const & y);
    -00196 
    -00200         detail::fvec4SIMD mod(
    -00201                 detail::fvec4SIMD const & x, 
    -00202                 float const & y);
    -00203 
    -00209         //detail::fvec4SIMD modf(
    -00210         //      detail::fvec4SIMD const & x, 
    -00211         //      detail::fvec4SIMD & i);
    -00212 
    -00215         detail::fvec4SIMD min(
    -00216                 detail::fvec4SIMD const & x, 
    -00217                 detail::fvec4SIMD const & y);
    -00218 
    -00219         detail::fvec4SIMD min(
    -00220                 detail::fvec4SIMD const & x, 
    -00221                 float const & y);
    -00222 
    -00225         detail::fvec4SIMD max(
    -00226                 detail::fvec4SIMD const & x, 
    -00227                 detail::fvec4SIMD const & y);
    -00228 
    -00229         detail::fvec4SIMD max(
    -00230                 detail::fvec4SIMD const & x, 
    -00231                 float const & y);
    -00232 
    -00236         detail::fvec4SIMD clamp(
    -00237                 detail::fvec4SIMD const & x, 
    -00238                 detail::fvec4SIMD const & minVal, 
    -00239                 detail::fvec4SIMD const & maxVal); 
    -00240 
    -00241         detail::fvec4SIMD clamp(
    -00242                 detail::fvec4SIMD const & x, 
    -00243                 float const & minVal, 
    -00244                 float const & maxVal); 
    -00245 
    -00269         // \todo Test when 'a' is a boolean.
    -00271         detail::fvec4SIMD mix(
    -00272                 detail::fvec4SIMD const & x, 
    -00273                 detail::fvec4SIMD const & y, 
    -00274                 detail::fvec4SIMD const & a);
    -00275 
    -00278         detail::fvec4SIMD step(
    -00279                 detail::fvec4SIMD const & edge, 
    -00280                 detail::fvec4SIMD const & x);
    -00281 
    -00282         detail::fvec4SIMD step(
    -00283                 float const & edge, 
    -00284                 detail::fvec4SIMD const & x);
    -00285 
    -00296         detail::fvec4SIMD smoothstep(
    -00297                 detail::fvec4SIMD const & edge0, 
    -00298                 detail::fvec4SIMD const & edge1, 
    -00299                 detail::fvec4SIMD const & x);
    -00300 
    -00301         detail::fvec4SIMD smoothstep(
    -00302                 float const & edge0, 
    -00303                 float const & edge1, 
    -00304                 detail::fvec4SIMD const & x);
    -00305 
    -00312         //bvec4 isnan(detail::fvec4SIMD const & x);
    -00313 
    -00320         //bvec4 isinf(detail::fvec4SIMD const & x);
    -00321 
    -00326         //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
    -00327 
    -00334         //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
    -00335 
    -00338         detail::fvec4SIMD fma(
    -00339                 detail::fvec4SIMD const & a, 
    -00340                 detail::fvec4SIMD const & b, 
    -00341                 detail::fvec4SIMD const & c);
    -00342 
    -00352         //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
    -00353 
    -00360         //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
    -00361 
    -00364         float length(
    -00365                 detail::fvec4SIMD const & x);
    -00366 
    -00370         float fastLength(
    -00371                 detail::fvec4SIMD const & x);
    -00372 
    -00376         float niceLength(
    -00377                 detail::fvec4SIMD const & x);
    -00378 
    -00381         detail::fvec4SIMD length4(
    -00382                 detail::fvec4SIMD const & x);
    -00383 
    -00387         detail::fvec4SIMD fastLength4(
    -00388                 detail::fvec4SIMD const & x);
    -00389 
    -00393         detail::fvec4SIMD niceLength4(
    -00394                 detail::fvec4SIMD const & x);
    -00395 
    -00398         float distance(
    -00399                 detail::fvec4SIMD const & p0,
    -00400                 detail::fvec4SIMD const & p1);
    -00401 
    -00404         detail::fvec4SIMD distance4(
    -00405                 detail::fvec4SIMD const & p0,
    -00406                 detail::fvec4SIMD const & p1);
    -00407 
    -00410         float simdDot(
    -00411                 detail::fvec4SIMD const & x,
    -00412                 detail::fvec4SIMD const & y);
    -00413 
    -00416         detail::fvec4SIMD dot4(
    -00417                 detail::fvec4SIMD const & x,
    -00418                 detail::fvec4SIMD const & y);
    -00419 
    -00422         detail::fvec4SIMD cross(
    -00423                 detail::fvec4SIMD const & x,
    -00424                 detail::fvec4SIMD const & y);
    -00425 
    -00428         detail::fvec4SIMD normalize(
    -00429                 detail::fvec4SIMD const & x);
    -00430 
    -00434         detail::fvec4SIMD fastNormalize(
    -00435                 detail::fvec4SIMD const & x);
    -00436 
    -00439         detail::fvec4SIMD simdFaceforward(
    -00440                 detail::fvec4SIMD const & N,
    -00441                 detail::fvec4SIMD const & I,
    -00442                 detail::fvec4SIMD const & Nref);
    -00443 
    -00447         detail::fvec4SIMD reflect(
    -00448                 detail::fvec4SIMD const & I,
    -00449                 detail::fvec4SIMD const & N);
    -00450 
    -00455         detail::fvec4SIMD refract(
    -00456                 detail::fvec4SIMD const & I,
    -00457                 detail::fvec4SIMD const & N,
    -00458                 float const & eta);
    -00459 
    -00462         detail::fvec4SIMD sqrt(
    -00463                 detail::fvec4SIMD const & x);
    -00464 
    -00468         detail::fvec4SIMD niceSqrt(
    -00469                 detail::fvec4SIMD const & x);
    -00470 
    -00474         detail::fvec4SIMD fastSqrt(
    -00475                 detail::fvec4SIMD const & x);
    -00476 
    -00479         detail::fvec4SIMD inversesqrt(
    -00480                 detail::fvec4SIMD const & x);
    -00481 
    -00485         detail::fvec4SIMD fastInversesqrt(
    -00486                 detail::fvec4SIMD const & x);
    -00487 
    -00489 }//namespace glm
    -00490 
    -00491 #include "simd_vec4.inl"
    -00492 
    -00493 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    -00494 
    -00495 #endif//GLM_GTX_simd_vec4
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_simd_mat4
    +
    39 #define GLM_GTX_simd_mat4 GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(GLM_ARCH != GLM_ARCH_PURE)
    +
    45 
    +
    46 #if(GLM_ARCH & GLM_ARCH_SSE2)
    +
    47 # include "../core/intrinsic_matrix.hpp"
    +
    48 # include "../gtx/simd_vec4.hpp"
    +
    49 #else
    +
    50 # error "GLM: GLM_GTX_simd_mat4 requires compiler support of SSE2 through intrinsics"
    +
    51 #endif
    +
    52 
    +
    53 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    54 # pragma message("GLM: GLM_GTX_simd_mat4 extension included")
    +
    55 #endif
    +
    56 
    +
    57 namespace glm{
    +
    58 namespace detail
    +
    59 {
    +
    62  GLM_ALIGNED_STRUCT(16) fmat4x4SIMD
    +
    63  {
    +
    64  enum ctor{null};
    +
    65 
    +
    66  typedef float value_type;
    +
    67  typedef fvec4SIMD col_type;
    +
    68  typedef fvec4SIMD row_type;
    +
    69  typedef std::size_t size_type;
    +
    70  static size_type value_size();
    +
    71  static size_type col_size();
    +
    72  static size_type row_size();
    +
    73  static bool is_matrix();
    +
    74 
    +
    75  fvec4SIMD Data[4];
    +
    76 
    +
    78  // Constructors
    +
    79 
    +
    80  fmat4x4SIMD();
    +
    81  explicit fmat4x4SIMD(float const & s);
    +
    82  explicit fmat4x4SIMD(
    +
    83  float const & x0, float const & y0, float const & z0, float const & w0,
    +
    84  float const & x1, float const & y1, float const & z1, float const & w1,
    +
    85  float const & x2, float const & y2, float const & z2, float const & w2,
    +
    86  float const & x3, float const & y3, float const & z3, float const & w3);
    +
    87  explicit fmat4x4SIMD(
    +
    88  fvec4SIMD const & v0,
    +
    89  fvec4SIMD const & v1,
    +
    90  fvec4SIMD const & v2,
    +
    91  fvec4SIMD const & v3);
    +
    92  explicit fmat4x4SIMD(
    +
    93  tmat4x4<float> const & m);
    +
    94 
    +
    95  // Conversions
    +
    96  //template <typename U>
    +
    97  //explicit tmat4x4(tmat4x4<U> const & m);
    +
    98 
    +
    99  //explicit tmat4x4(tmat2x2<T> const & x);
    +
    100  //explicit tmat4x4(tmat3x3<T> const & x);
    +
    101  //explicit tmat4x4(tmat2x3<T> const & x);
    +
    102  //explicit tmat4x4(tmat3x2<T> const & x);
    +
    103  //explicit tmat4x4(tmat2x4<T> const & x);
    +
    104  //explicit tmat4x4(tmat4x2<T> const & x);
    +
    105  //explicit tmat4x4(tmat3x4<T> const & x);
    +
    106  //explicit tmat4x4(tmat4x3<T> const & x);
    +
    107 
    +
    108  // Accesses
    +
    109  fvec4SIMD & operator[](size_type i);
    +
    110  fvec4SIMD const & operator[](size_type i) const;
    +
    111 
    +
    112  // Unary updatable operators
    +
    113  fmat4x4SIMD & operator= (fmat4x4SIMD const & m);
    +
    114  fmat4x4SIMD & operator+= (float const & s);
    +
    115  fmat4x4SIMD & operator+= (fmat4x4SIMD const & m);
    +
    116  fmat4x4SIMD & operator-= (float const & s);
    +
    117  fmat4x4SIMD & operator-= (fmat4x4SIMD const & m);
    +
    118  fmat4x4SIMD & operator*= (float const & s);
    +
    119  fmat4x4SIMD & operator*= (fmat4x4SIMD const & m);
    +
    120  fmat4x4SIMD & operator/= (float const & s);
    +
    121  fmat4x4SIMD & operator/= (fmat4x4SIMD const & m);
    +
    122  fmat4x4SIMD & operator++ ();
    +
    123  fmat4x4SIMD & operator-- ();
    +
    124  };
    +
    125 
    +
    126  // Binary operators
    +
    127  fmat4x4SIMD operator+ (fmat4x4SIMD const & m, float const & s);
    +
    128  fmat4x4SIMD operator+ (float const & s, fmat4x4SIMD const & m);
    +
    129  fmat4x4SIMD operator+ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    +
    130 
    +
    131  fmat4x4SIMD operator- (fmat4x4SIMD const & m, float const & s);
    +
    132  fmat4x4SIMD operator- (float const & s, fmat4x4SIMD const & m);
    +
    133  fmat4x4SIMD operator- (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    +
    134 
    +
    135  fmat4x4SIMD operator* (fmat4x4SIMD const & m, float const & s);
    +
    136  fmat4x4SIMD operator* (float const & s, fmat4x4SIMD const & m);
    +
    137 
    +
    138  fvec4SIMD operator* (fmat4x4SIMD const & m, fvec4SIMD const & v);
    +
    139  fvec4SIMD operator* (fvec4SIMD const & v, fmat4x4SIMD const & m);
    +
    140 
    +
    141  fmat4x4SIMD operator* (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    +
    142 
    +
    143  fmat4x4SIMD operator/ (fmat4x4SIMD const & m, float const & s);
    +
    144  fmat4x4SIMD operator/ (float const & s, fmat4x4SIMD const & m);
    +
    145 
    +
    146  fvec4SIMD operator/ (fmat4x4SIMD const & m, fvec4SIMD const & v);
    +
    147  fvec4SIMD operator/ (fvec4SIMD const & v, fmat4x4SIMD const & m);
    +
    148 
    +
    149  fmat4x4SIMD operator/ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    +
    150 
    +
    151  // Unary constant operators
    +
    152  fmat4x4SIMD const operator- (fmat4x4SIMD const & m);
    +
    153  fmat4x4SIMD const operator-- (fmat4x4SIMD const & m, int);
    +
    154  fmat4x4SIMD const operator++ (fmat4x4SIMD const & m, int);
    +
    155 }//namespace detail
    +
    156 
    +
    157  typedef detail::fmat4x4SIMD simdMat4;
    +
    158 
    +
    161 
    +
    164  detail::tmat4x4<float> mat4_cast(
    +
    165  detail::fmat4x4SIMD const & x);
    +
    166 
    +
    170  detail::fmat4x4SIMD matrixCompMult(
    +
    171  detail::fmat4x4SIMD const & x,
    +
    172  detail::fmat4x4SIMD const & y);
    +
    173 
    +
    178  detail::fmat4x4SIMD outerProduct(
    +
    179  detail::fvec4SIMD const & c,
    +
    180  detail::fvec4SIMD const & r);
    +
    181 
    +
    184  detail::fmat4x4SIMD transpose(
    +
    185  detail::fmat4x4SIMD const & x);
    +
    186 
    +
    189  float determinant(
    +
    190  detail::fmat4x4SIMD const & m);
    +
    191 
    +
    194  detail::fmat4x4SIMD inverse(
    +
    195  detail::fmat4x4SIMD const & m);
    +
    196 
    +
    198 }// namespace glm
    +
    199 
    +
    200 #include "simd_mat4.inl"
    +
    201 
    +
    202 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    +
    203 
    +
    204 #endif//GLM_GTX_simd_mat4
    +
    + - diff --git a/doc/api/a00086.html b/doc/api/a00086.html index eec81682..20d012d1 100644 --- a/doc/api/a00086.html +++ b/doc/api/a00086.html @@ -2,42 +2,31 @@ - -spline.hpp File Reference + +simd_vec4.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,35 @@
  • File List
  • + +
    -
    -
    spline.hpp File Reference
    -
    +
    simd_vec4.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - -

    -Functions

    template<typename genType >
    genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
    template<typename genType >
    genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
    template<typename genType >
    genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_spline: Spline

    -
    Date:
    2007-01-25 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file spline.hpp.

    -
    - +

    GLM_GTX_simd_vec4

    +
    Date
    2009-05-07 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file simd_vec4.hpp.

    + + - diff --git a/doc/api/a00086_source.html b/doc/api/a00086_source.html index 13f30f73..bb5d0c5b 100644 --- a/doc/api/a00086_source.html +++ b/doc/api/a00086_source.html @@ -2,42 +2,31 @@ - -spline.hpp Source File + +simd_vec4.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,101 +35,334 @@
  • File List
  • + +
    -
    spline.hpp
    -
    +
    simd_vec4.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_spline
    -00039 #define GLM_GTX_spline GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 #include "../gtx/optimum_pow.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_spline extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056         template <typename genType> 
    -00057         genType catmullRom(
    -00058                 genType const & v1, 
    -00059                 genType const & v2, 
    -00060                 genType const & v3, 
    -00061                 genType const & v4, 
    -00062                 typename genType::value_type const & s);
    -00063                 
    -00066     template <typename genType> 
    -00067         genType hermite(
    -00068                 genType const & v1, 
    -00069                 genType const & t1, 
    -00070                 genType const & v2, 
    -00071                 genType const & t2, 
    -00072                 typename genType::value_type const & s);
    -00073                 
    -00076         template <typename genType> 
    -00077         genType cubic(
    -00078                 genType const & v1, 
    -00079                 genType const & v2, 
    -00080                 genType const & v3, 
    -00081                 genType const & v4, 
    -00082                 typename genType::value_type const & s);
    -00083 
    -00085 }//namespace glm
    -00086 
    -00087 #include "spline.inl"
    -00088 
    -00089 #endif//GLM_GTX_spline
    -00090 
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_simd_vec4
    +
    39 #define GLM_GTX_simd_vec4 GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(GLM_ARCH != GLM_ARCH_PURE)
    +
    45 
    +
    46 #if(GLM_ARCH & GLM_ARCH_SSE2)
    +
    47 # include "../core/intrinsic_common.hpp"
    +
    48 # include "../core/intrinsic_geometric.hpp"
    +
    49 #else
    +
    50 # error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
    +
    51 #endif
    +
    52 
    +
    53 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    54 # pragma message("GLM: GLM_GTX_simd_vec4 extension included")
    +
    55 #endif
    +
    56 
    +
    57 namespace glm{
    +
    58 namespace detail
    +
    59 {
    +
    62  GLM_ALIGNED_STRUCT(16) fvec4SIMD
    +
    63  {
    +
    64  enum ctor{null};
    +
    65  typedef __m128 value_type;
    +
    66  typedef std::size_t size_type;
    +
    67  static size_type value_size();
    +
    68 
    +
    69  typedef fvec4SIMD type;
    +
    70  typedef tvec4<bool> bool_type;
    +
    71 
    +
    72  __m128 Data;
    +
    73 
    +
    75  // Implicit basic constructors
    +
    76 
    +
    77  fvec4SIMD();
    +
    78  fvec4SIMD(__m128 const & Data);
    +
    79  fvec4SIMD(fvec4SIMD const & v);
    +
    80 
    +
    82  // Explicit basic constructors
    +
    83 
    +
    84  explicit fvec4SIMD(
    +
    85  ctor);
    +
    86  explicit fvec4SIMD(
    +
    87  float const & s);
    +
    88  explicit fvec4SIMD(
    +
    89  float const & x,
    +
    90  float const & y,
    +
    91  float const & z,
    +
    92  float const & w);
    +
    93  explicit fvec4SIMD(
    +
    94  tvec4<float> const & v);
    +
    95 
    +
    98 
    +
    99  fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
    +
    100  fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
    +
    101  fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
    +
    102  fvec4SIMD(vec3 const & v, float const & s);
    +
    103  fvec4SIMD(float const & s, vec3 const & v);
    +
    104  fvec4SIMD(vec2 const & v1, vec2 const & v2);
    +
    105  //fvec4SIMD(ivec4SIMD const & v);
    +
    106 
    +
    108  // Unary arithmetic operators
    +
    109 
    +
    110  fvec4SIMD& operator= (fvec4SIMD const & v);
    +
    111  fvec4SIMD& operator+=(fvec4SIMD const & v);
    +
    112  fvec4SIMD& operator-=(fvec4SIMD const & v);
    +
    113  fvec4SIMD& operator*=(fvec4SIMD const & v);
    +
    114  fvec4SIMD& operator/=(fvec4SIMD const & v);
    +
    115 
    +
    116  fvec4SIMD& operator+=(float const & s);
    +
    117  fvec4SIMD& operator-=(float const & s);
    +
    118  fvec4SIMD& operator*=(float const & s);
    +
    119  fvec4SIMD& operator/=(float const & s);
    +
    120 
    +
    121  fvec4SIMD& operator++();
    +
    122  fvec4SIMD& operator--();
    +
    123 
    +
    125  // Swizzle operators
    +
    126 
    +
    127  template <comp X, comp Y, comp Z, comp W>
    +
    128  fvec4SIMD& swizzle();
    +
    129  template <comp X, comp Y, comp Z, comp W>
    +
    130  fvec4SIMD swizzle() const;
    +
    131  template <comp X, comp Y, comp Z>
    +
    132  fvec4SIMD swizzle() const;
    +
    133  template <comp X, comp Y>
    +
    134  fvec4SIMD swizzle() const;
    +
    135  template <comp X>
    +
    136  fvec4SIMD swizzle() const;
    +
    137  };
    +
    138 }//namespace detail
    +
    139 
    +
    140  typedef glm::detail::fvec4SIMD simdVec4;
    +
    141 
    +
    144 
    +
    147  detail::tvec4<float> vec4_cast(
    +
    148  detail::fvec4SIMD const & x);
    +
    149 
    +
    152  detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
    +
    153 
    +
    156  detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
    +
    157 
    +
    160  detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
    +
    161 
    +
    165  detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
    +
    166 
    +
    173  detail::fvec4SIMD round(detail::fvec4SIMD const & x);
    +
    174 
    +
    179  //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
    +
    180 
    +
    184  detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
    +
    185 
    +
    188  detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
    +
    189 
    +
    193  detail::fvec4SIMD mod(
    +
    194  detail::fvec4SIMD const & x,
    +
    195  detail::fvec4SIMD const & y);
    +
    196 
    +
    200  detail::fvec4SIMD mod(
    +
    201  detail::fvec4SIMD const & x,
    +
    202  float const & y);
    +
    203 
    +
    209  //detail::fvec4SIMD modf(
    +
    210  // detail::fvec4SIMD const & x,
    +
    211  // detail::fvec4SIMD & i);
    +
    212 
    +
    215  detail::fvec4SIMD min(
    +
    216  detail::fvec4SIMD const & x,
    +
    217  detail::fvec4SIMD const & y);
    +
    218 
    +
    219  detail::fvec4SIMD min(
    +
    220  detail::fvec4SIMD const & x,
    +
    221  float const & y);
    +
    222 
    +
    225  detail::fvec4SIMD max(
    +
    226  detail::fvec4SIMD const & x,
    +
    227  detail::fvec4SIMD const & y);
    +
    228 
    +
    229  detail::fvec4SIMD max(
    +
    230  detail::fvec4SIMD const & x,
    +
    231  float const & y);
    +
    232 
    +
    236  detail::fvec4SIMD clamp(
    +
    237  detail::fvec4SIMD const & x,
    +
    238  detail::fvec4SIMD const & minVal,
    +
    239  detail::fvec4SIMD const & maxVal);
    +
    240 
    +
    241  detail::fvec4SIMD clamp(
    +
    242  detail::fvec4SIMD const & x,
    +
    243  float const & minVal,
    +
    244  float const & maxVal);
    +
    245 
    +
    269  // \todo Test when 'a' is a boolean.
    +
    271  detail::fvec4SIMD mix(
    +
    272  detail::fvec4SIMD const & x,
    +
    273  detail::fvec4SIMD const & y,
    +
    274  detail::fvec4SIMD const & a);
    +
    275 
    +
    278  detail::fvec4SIMD step(
    +
    279  detail::fvec4SIMD const & edge,
    +
    280  detail::fvec4SIMD const & x);
    +
    281 
    +
    282  detail::fvec4SIMD step(
    +
    283  float const & edge,
    +
    284  detail::fvec4SIMD const & x);
    +
    285 
    +
    296  detail::fvec4SIMD smoothstep(
    +
    297  detail::fvec4SIMD const & edge0,
    +
    298  detail::fvec4SIMD const & edge1,
    +
    299  detail::fvec4SIMD const & x);
    +
    300 
    +
    301  detail::fvec4SIMD smoothstep(
    +
    302  float const & edge0,
    +
    303  float const & edge1,
    +
    304  detail::fvec4SIMD const & x);
    +
    305 
    +
    312  //bvec4 isnan(detail::fvec4SIMD const & x);
    +
    313 
    +
    320  //bvec4 isinf(detail::fvec4SIMD const & x);
    +
    321 
    +
    326  //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
    +
    327 
    +
    334  //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
    +
    335 
    +
    338  detail::fvec4SIMD fma(
    +
    339  detail::fvec4SIMD const & a,
    +
    340  detail::fvec4SIMD const & b,
    +
    341  detail::fvec4SIMD const & c);
    +
    342 
    +
    352  //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
    +
    353 
    +
    360  //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
    +
    361 
    +
    364  float length(
    +
    365  detail::fvec4SIMD const & x);
    +
    366 
    +
    370  float fastLength(
    +
    371  detail::fvec4SIMD const & x);
    +
    372 
    +
    376  float niceLength(
    +
    377  detail::fvec4SIMD const & x);
    +
    378 
    +
    381  detail::fvec4SIMD length4(
    +
    382  detail::fvec4SIMD const & x);
    +
    383 
    +
    387  detail::fvec4SIMD fastLength4(
    +
    388  detail::fvec4SIMD const & x);
    +
    389 
    +
    393  detail::fvec4SIMD niceLength4(
    +
    394  detail::fvec4SIMD const & x);
    +
    395 
    +
    398  float distance(
    +
    399  detail::fvec4SIMD const & p0,
    +
    400  detail::fvec4SIMD const & p1);
    +
    401 
    +
    404  detail::fvec4SIMD distance4(
    +
    405  detail::fvec4SIMD const & p0,
    +
    406  detail::fvec4SIMD const & p1);
    +
    407 
    +
    410  float simdDot(
    +
    411  detail::fvec4SIMD const & x,
    +
    412  detail::fvec4SIMD const & y);
    +
    413 
    +
    416  detail::fvec4SIMD dot4(
    +
    417  detail::fvec4SIMD const & x,
    +
    418  detail::fvec4SIMD const & y);
    +
    419 
    +
    422  detail::fvec4SIMD cross(
    +
    423  detail::fvec4SIMD const & x,
    +
    424  detail::fvec4SIMD const & y);
    +
    425 
    +
    428  detail::fvec4SIMD normalize(
    +
    429  detail::fvec4SIMD const & x);
    +
    430 
    +
    434  detail::fvec4SIMD fastNormalize(
    +
    435  detail::fvec4SIMD const & x);
    +
    436 
    +
    439  detail::fvec4SIMD simdFaceforward(
    +
    440  detail::fvec4SIMD const & N,
    +
    441  detail::fvec4SIMD const & I,
    +
    442  detail::fvec4SIMD const & Nref);
    +
    443 
    +
    447  detail::fvec4SIMD reflect(
    +
    448  detail::fvec4SIMD const & I,
    +
    449  detail::fvec4SIMD const & N);
    +
    450 
    +
    455  detail::fvec4SIMD refract(
    +
    456  detail::fvec4SIMD const & I,
    +
    457  detail::fvec4SIMD const & N,
    +
    458  float const & eta);
    +
    459 
    +
    462  detail::fvec4SIMD sqrt(
    +
    463  detail::fvec4SIMD const & x);
    +
    464 
    +
    468  detail::fvec4SIMD niceSqrt(
    +
    469  detail::fvec4SIMD const & x);
    +
    470 
    +
    474  detail::fvec4SIMD fastSqrt(
    +
    475  detail::fvec4SIMD const & x);
    +
    476 
    +
    479  detail::fvec4SIMD inversesqrt(
    +
    480  detail::fvec4SIMD const & x);
    +
    481 
    +
    485  detail::fvec4SIMD fastInversesqrt(
    +
    486  detail::fvec4SIMD const & x);
    +
    487 
    +
    489 }//namespace glm
    +
    490 
    +
    491 #include "simd_vec4.inl"
    +
    492 
    +
    493 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    +
    494 
    +
    495 #endif//GLM_GTX_simd_vec4
    +
    + - diff --git a/doc/api/a00087.html b/doc/api/a00087.html index 1f2c243b..6f36d8f9 100644 --- a/doc/api/a00087.html +++ b/doc/api/a00087.html @@ -2,42 +2,31 @@ - -std_based_type.hpp File Reference + +spline.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,53 +35,50 @@
  • File List
  • + +
    +Functions
    -
    std_based_type.hpp File Reference
    - +
    spline.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - + + + + + + + + + +

    -Typedefs

    typedef detail::tvec2
    -< std::size_t > 
    size2
    typedef detail::tvec2
    -< std::size_t > 
    size2_t
    typedef detail::tvec3
    -< std::size_t > 
    size3
    typedef detail::tvec3
    -< std::size_t > 
    size3_t
    typedef detail::tvec4
    -< std::size_t > 
    size4
    typedef detail::tvec4
    -< std::size_t > 
    size4_t

    +Functions

    template<typename genType >
    genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_std_based_type: Add types based on STL

    -
    Date:
    2008-06-08 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTX_extented_min_max: Extended min max (dependence)
    - -

    Definition in file std_based_type.hpp.

    -
    - +

    GLM_GTX_spline

    +
    Date
    2007-01-25 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file spline.hpp.

    + + - diff --git a/doc/api/a00087_source.html b/doc/api/a00087_source.html index 2760263b..86788ae0 100644 --- a/doc/api/a00087_source.html +++ b/doc/api/a00087_source.html @@ -2,42 +2,31 @@ - -std_based_type.hpp Source File + +spline.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,88 +35,103 @@
  • File List
  • + +
    -
    std_based_type.hpp
    -
    +
    spline.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_std_based_type
    -00039 #define GLM_GTX_std_based_type GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 #include <cstdlib>
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_std_based_type extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053         
    -00056         typedef detail::tvec2<std::size_t>              size2;
    -00057         
    -00060         typedef detail::tvec3<std::size_t>              size3;
    -00061 
    -00064         typedef detail::tvec4<std::size_t>              size4;
    -00065 
    -00068         typedef detail::tvec2<std::size_t>              size2_t;
    -00069         
    -00072         typedef detail::tvec3<std::size_t>              size3_t;
    -00073         
    -00076         typedef detail::tvec4<std::size_t>              size4_t;
    -00077 
    -00079 }//namespace glm
    -00080 
    -00081 #include "std_based_type.inl"
    -00082 
    -00083 #endif//GLM_GTX_std_based_type
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_spline
    +
    39 #define GLM_GTX_spline GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtx/optimum_pow.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_spline extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename genType>
    +
    57  genType catmullRom(
    +
    58  genType const & v1,
    +
    59  genType const & v2,
    +
    60  genType const & v3,
    +
    61  genType const & v4,
    +
    62  typename genType::value_type const & s);
    +
    63 
    +
    66  template <typename genType>
    +
    67  genType hermite(
    +
    68  genType const & v1,
    +
    69  genType const & t1,
    +
    70  genType const & v2,
    +
    71  genType const & t2,
    +
    72  typename genType::value_type const & s);
    +
    73 
    +
    76  template <typename genType>
    +
    77  genType cubic(
    +
    78  genType const & v1,
    +
    79  genType const & v2,
    +
    80  genType const & v3,
    +
    81  genType const & v4,
    +
    82  typename genType::value_type const & s);
    +
    83 
    +
    85 }//namespace glm
    +
    86 
    +
    87 #include "spline.inl"
    +
    88 
    +
    89 #endif//GLM_GTX_spline
    +
    90 
    +
    + - diff --git a/doc/api/a00088.html b/doc/api/a00088.html index d8446e0d..9e845639 100644 --- a/doc/api/a00088.html +++ b/doc/api/a00088.html @@ -2,42 +2,31 @@ - -string_cast.hpp File Reference + +std_based_type.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,47 +35,61 @@
  • File List
  • + +
    +Typedefs
    -
    string_cast.hpp File Reference
    - +
    std_based_type.hpp File Reference
    +

    Go to the source code of this file.

    - - - + + + + + + + + + + + + +

    -Functions

    template<typename genType >
    std::string to_string (genType const &x)

    +Typedefs

    typedef detail::tvec2
    +< std::size_t > 
    size2
     
    typedef detail::tvec2
    +< std::size_t > 
    size2_t
     
    typedef detail::tvec3
    +< std::size_t > 
    size3
     
    typedef detail::tvec3
    +< std::size_t > 
    size3_t
     
    typedef detail::tvec4
    +< std::size_t > 
    size4
     
    typedef detail::tvec4
    +< std::size_t > 
    size4_t
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_string_cast: String cast

    -
    Date:
    2008-04-26 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_std_based_type

    +
    Date
    2008-06-08 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    -
    -GLM_GTX_integer: Extended integer functions (dependence)
    -
    -GLM_GTX_quaternion: Extented quaternion types and functions (dependence)
    - -

    Definition in file string_cast.hpp.

    -
    - +GLM_GTX_extented_min_max (dependence) +

    Definition in file std_based_type.hpp.

    + + - diff --git a/doc/api/a00088_source.html b/doc/api/a00088_source.html index b52420c7..45757de4 100644 --- a/doc/api/a00088_source.html +++ b/doc/api/a00088_source.html @@ -2,42 +2,31 @@ - -string_cast.hpp Source File + +std_based_type.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,85 +35,90 @@
  • File List
  • + +
    -
    string_cast.hpp
    -
    +
    std_based_type.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 #ifndef GLM_GTX_string_cast
    -00042 #define GLM_GTX_string_cast GLM_VERSION
    -00043 
    -00044 // Dependency:
    -00045 #include "../glm.hpp"
    -00046 #include "../gtc/half_float.hpp"
    -00047 #include "../gtx/integer.hpp"
    -00048 #include "../gtx/quaternion.hpp"
    -00049 #include <string>
    -00050 
    -00051 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00052 #       pragma message("GLM: GLM_GTX_string_cast extension included")
    -00053 #endif
    -00054 
    -00055 namespace glm
    -00056 {
    -00059 
    -00062         template <typename genType> 
    -00063         std::string to_string(genType const & x);
    -00064 
    -00066 }//namespace glm
    -00067 
    -00068 #include "string_cast.inl"
    -00069 
    -00070 #endif//GLM_GTX_string_cast
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_std_based_type
    +
    39 #define GLM_GTX_std_based_type GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include <cstdlib>
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTX_std_based_type extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  typedef detail::tvec2<std::size_t> size2;
    +
    57 
    +
    60  typedef detail::tvec3<std::size_t> size3;
    +
    61 
    +
    64  typedef detail::tvec4<std::size_t> size4;
    +
    65 
    +
    68  typedef detail::tvec2<std::size_t> size2_t;
    +
    69 
    +
    72  typedef detail::tvec3<std::size_t> size3_t;
    +
    73 
    +
    76  typedef detail::tvec4<std::size_t> size4_t;
    +
    77 
    +
    79 }//namespace glm
    +
    80 
    +
    81 #include "std_based_type.inl"
    +
    82 
    +
    83 #endif//GLM_GTX_std_based_type
    +
    + - diff --git a/doc/api/a00089.html b/doc/api/a00089.html index 094ef115..58f0a0ac 100644 --- a/doc/api/a00089.html +++ b/doc/api/a00089.html @@ -2,42 +2,31 @@ - -swizzle.hpp File Reference + +string_cast.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,41 +35,50 @@
  • File List
  • + +
    -
    swizzle.hpp File Reference
    -
    +
    string_cast.hpp File Reference
    +

    Go to the source code of this file.

    - - - + + +

    +

    Functions

    template<typename T , template< typename > class vecType>
    detail::tvec2< T > const & swizzle (vecType< T > const &v, comp x, comp y)
    template<typename genType >
    std::string to_string (genType const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_swizzle: Swizzle 'operator' implementation

    -
    Date:
    2010-02-20 / 2011-06-05
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file swizzle.hpp.

    -
    - +

    GLM_GTX_string_cast

    +
    Date
    2008-04-26 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTC_half_float (dependence)
    +
    +GLM_GTX_integer (dependence)
    +
    +GLM_GTX_quaternion (dependence)
    +

    Definition in file string_cast.hpp.

    + + - diff --git a/doc/api/a00089_source.html b/doc/api/a00089_source.html index 86aa1a54..6d3cb496 100644 --- a/doc/api/a00089_source.html +++ b/doc/api/a00089_source.html @@ -2,42 +2,31 @@ - -swizzle.hpp Source File + +string_cast.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,393 +35,87 @@
  • File List
  • + +
    -
    swizzle.hpp
    -
    +
    string_cast.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTC_swizzle
    -00039 #define GLM_GTC_swizzle GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 #include "../gtc/type_precision.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTC_swizzle extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053         
    -00054 
    -00055         template <typename T, template <typename> class vecType>
    -00056         T const & swizzle(      
    -00057                 vecType<T> const & v,
    -00058                 comp x);
    -00059 
    -00067         template <typename T, template <typename> class vecType>
    -00068         detail::tvec2<T> const & swizzle(
    -00069                 vecType<T> const & v,
    -00070                 comp x, comp y);
    -00071 
    -00072         template <typename T, template <typename> class vecType>
    -00073         detail::tvec3<T> const & swizzle(
    -00074                 vecType<T> const & v,
    -00075                 comp x, comp y, comp z);
    -00076 
    -00077         template <typename T, template <typename> class vecType>
    -00078         detail::tvec4<T> const & swizzle(
    -00079                 vecType<T> const & v,
    -00080                 comp x, comp y, comp z, comp w);
    -00081 
    -00082         template <typename T, template <typename> class vecType>
    -00083         T & swizzle(
    -00084                 vecType<T> & v,
    -00085                 comp x);
    -00086 
    -00087         template <typename T, template <typename> class vecType>
    -00088         detail::tref2<T> swizzle(
    -00089                 vecType<T> & v,
    -00090                 comp x, comp y);
    -00091 
    -00092         template <typename T, template <typename> class vecType>
    -00093         detail::tref3<T> swizzle(
    -00094                 vecType<T> & v,
    -00095                 comp x, comp y, comp z);
    -00096 
    -00097         template <typename T, template <typename> class vecType>
    -00098         detail::tref4<T> swizzle(
    -00099                 vecType<T> & v,
    -00100                 comp x, comp y, comp z, comp w);
    -00101 
    -00102 #       define static_swizzle1_const(TYPE, SIZE)                                                        \
    -00103                 template <comp x>                                                                               \
    -00104                 GLM_FUNC_QUALIFIER TYPE swizzle(detail::tvec##SIZE<TYPE> const & v)     \
    -00105                 {return v[x];}                                                                                  
    -00106                                                                                                                                 
    -00107 #       define static_swizzle1_ref(TYPE, SIZE)                                                                  \
    -00108                 template <comp x>                                                                                                       \
    -00109                 GLM_FUNC_QUALIFIER TYPE& swizzle(detail::tvec##SIZE<TYPE> & v)          \
    -00110                 {return v[x];}
    -00111 
    -00112         static_swizzle1_ref(detail::float16, 2)
    -00113         static_swizzle1_ref(detail::float16, 3)
    -00114         static_swizzle1_ref(detail::float16, 4)
    -00115         static_swizzle1_ref(detail::float32, 2)
    -00116         static_swizzle1_ref(detail::float32, 3)
    -00117         static_swizzle1_ref(detail::float32, 4)
    -00118         static_swizzle1_ref(detail::float64, 2)
    -00119         static_swizzle1_ref(detail::float64, 3)
    -00120         static_swizzle1_ref(detail::float64, 4)
    -00121 
    -00122         static_swizzle1_ref(detail::int8,  2)
    -00123         static_swizzle1_ref(detail::int8,  3)
    -00124         static_swizzle1_ref(detail::int8,  4)
    -00125         static_swizzle1_ref(detail::int16, 2)
    -00126         static_swizzle1_ref(detail::int16, 3)
    -00127         static_swizzle1_ref(detail::int16, 4)
    -00128         static_swizzle1_ref(detail::int32, 2)
    -00129         static_swizzle1_ref(detail::int32, 3)
    -00130         static_swizzle1_ref(detail::int32, 4)
    -00131         static_swizzle1_ref(detail::int64, 2)
    -00132         static_swizzle1_ref(detail::int64, 3)
    -00133         static_swizzle1_ref(detail::int64, 4)
    -00134 
    -00135         static_swizzle1_ref(detail::uint8,  2)
    -00136         static_swizzle1_ref(detail::uint8,  3)
    -00137         static_swizzle1_ref(detail::uint8,  4)
    -00138         static_swizzle1_ref(detail::uint16, 2)
    -00139         static_swizzle1_ref(detail::uint16, 3)
    -00140         static_swizzle1_ref(detail::uint16, 4)
    -00141         static_swizzle1_ref(detail::uint32, 2)
    -00142         static_swizzle1_ref(detail::uint32, 3)
    -00143         static_swizzle1_ref(detail::uint32, 4)
    -00144         static_swizzle1_ref(detail::uint64, 2)
    -00145         static_swizzle1_ref(detail::uint64, 3)
    -00146         static_swizzle1_ref(detail::uint64, 4)
    -00147 /*
    -00148 #       define static_swizzle2_const(TYPE) \
    -00149                 template <comp x, comp y> \
    -00150                 GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    -00151                 {return TYPE(v[x], v[y]);}
    -00152 
    -00153 #       define static_swizzle3_const(TYPE) \
    -00154                 template <comp x, comp y, comp z> \
    -00155                 GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    -00156                 {return TYPE(v[x], v[y], v[z]);}
    -00157 
    -00158 #       define static_swizzle4_const(TYPE) \
    -00159                 template <comp x, comp y, comp z, comp w> \
    -00160                 GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    -00161                 {return TYPE(v[x], v[y], v[z], v[w]);}
    -00162 */
    -00163 
    -00164 #       define static_swizzle2_const(TYPE, SIZE)                                                                        \
    -00165                 template <comp x, comp y>                                                                                               \
    -00166                 GLM_FUNC_QUALIFIER detail::tvec2<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)      \
    -00167                 {return detail::tvec2<TYPE>(v[x], v[y]);}
    -00168 
    -00169 #       define static_swizzle3_const(TYPE, SIZE)                                                                        \
    -00170                 template <comp x, comp y, comp z>                                                                               \
    -00171                 GLM_FUNC_QUALIFIER detail::tvec3<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)      \
    -00172                 {return detail::tvec3<TYPE>(v[x], v[y], v[z]);}
    -00173 
    -00174 #       define static_swizzle4_const(TYPE, SIZE)                                                                        \
    -00175                 template <comp x, comp y, comp z, comp w>                                                               \
    -00176                 GLM_FUNC_QUALIFIER detail::tvec4<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)      \
    -00177                 {return detail::tvec4<TYPE>(v[x], v[y], v[z], v[w]);}
    -00178 
    -00179 
    -00180         static_swizzle2_const(glm::f16, 2)
    -00181         static_swizzle2_const(glm::f16, 3)
    -00182         static_swizzle2_const(glm::f16, 4)
    -00183         static_swizzle2_const(glm::f32, 2)
    -00184         static_swizzle2_const(glm::f32, 3)
    -00185         static_swizzle2_const(glm::f32, 4)
    -00186         static_swizzle2_const(glm::f64, 2)
    -00187         static_swizzle2_const(glm::f64, 3)
    -00188         static_swizzle2_const(glm::f64, 4)
    -00189 
    -00190         static_swizzle2_const(glm::i8, 2)
    -00191         static_swizzle2_const(glm::i8, 3)
    -00192         static_swizzle2_const(glm::i8, 4)
    -00193         static_swizzle2_const(glm::i16, 2)
    -00194         static_swizzle2_const(glm::i16, 3)
    -00195         static_swizzle2_const(glm::i16, 4)
    -00196         static_swizzle2_const(glm::i32, 2)
    -00197         static_swizzle2_const(glm::i32, 3)
    -00198         static_swizzle2_const(glm::i32, 4)
    -00199         static_swizzle2_const(glm::i64, 2)
    -00200         static_swizzle2_const(glm::i64, 3)
    -00201         static_swizzle2_const(glm::i64, 4)
    -00202 
    -00203         static_swizzle2_const(glm::u8, 2)
    -00204         static_swizzle2_const(glm::u8, 3)
    -00205         static_swizzle2_const(glm::u8, 4)
    -00206         static_swizzle2_const(glm::u16, 2)
    -00207         static_swizzle2_const(glm::u16, 3)
    -00208         static_swizzle2_const(glm::u16, 4)
    -00209         static_swizzle2_const(glm::u32, 2)
    -00210         static_swizzle2_const(glm::u32, 3)
    -00211         static_swizzle2_const(glm::u32, 4)
    -00212         static_swizzle2_const(glm::u64, 2)
    -00213         static_swizzle2_const(glm::u64, 3)
    -00214         static_swizzle2_const(glm::u64, 4)
    -00215 
    -00216         static_swizzle3_const(glm::f16, 2)
    -00217         static_swizzle3_const(glm::f16, 3)
    -00218         static_swizzle3_const(glm::f16, 4)
    -00219         static_swizzle3_const(glm::f32, 2)
    -00220         static_swizzle3_const(glm::f32, 3)
    -00221         static_swizzle3_const(glm::f32, 4)
    -00222         static_swizzle3_const(glm::f64, 2)
    -00223         static_swizzle3_const(glm::f64, 3)
    -00224         static_swizzle3_const(glm::f64, 4)
    -00225 
    -00226         static_swizzle3_const(glm::i8, 2)
    -00227         static_swizzle3_const(glm::i8, 3)
    -00228         static_swizzle3_const(glm::i8, 4)
    -00229         static_swizzle3_const(glm::i16, 2)
    -00230         static_swizzle3_const(glm::i16, 3)
    -00231         static_swizzle3_const(glm::i16, 4)
    -00232         static_swizzle3_const(glm::i32, 2)
    -00233         static_swizzle3_const(glm::i32, 3)
    -00234         static_swizzle3_const(glm::i32, 4)
    -00235         static_swizzle3_const(glm::i64, 2)
    -00236         static_swizzle3_const(glm::i64, 3)
    -00237         static_swizzle3_const(glm::i64, 4)
    -00238 
    -00239         static_swizzle3_const(glm::u8, 2)
    -00240         static_swizzle3_const(glm::u8, 3)
    -00241         static_swizzle3_const(glm::u8, 4)
    -00242         static_swizzle3_const(glm::u16, 2)
    -00243         static_swizzle3_const(glm::u16, 3)
    -00244         static_swizzle3_const(glm::u16, 4)
    -00245         static_swizzle3_const(glm::u32, 2)
    -00246         static_swizzle3_const(glm::u32, 3)
    -00247         static_swizzle3_const(glm::u32, 4)
    -00248         static_swizzle3_const(glm::u64, 2)
    -00249         static_swizzle3_const(glm::u64, 3)
    -00250         static_swizzle3_const(glm::u64, 4)
    -00251 
    -00252         static_swizzle4_const(glm::f16, 2)
    -00253         static_swizzle4_const(glm::f16, 3)
    -00254         static_swizzle4_const(glm::f16, 4)
    -00255         static_swizzle4_const(glm::f32, 2)
    -00256         static_swizzle4_const(glm::f32, 3)
    -00257         static_swizzle4_const(glm::f32, 4)
    -00258         static_swizzle4_const(glm::f64, 2)
    -00259         static_swizzle4_const(glm::f64, 3)
    -00260         static_swizzle4_const(glm::f64, 4)
    -00261 
    -00262         static_swizzle4_const(glm::i8, 2)
    -00263         static_swizzle4_const(glm::i8, 3)
    -00264         static_swizzle4_const(glm::i8, 4)
    -00265         static_swizzle4_const(glm::i16, 2)
    -00266         static_swizzle4_const(glm::i16, 3)
    -00267         static_swizzle4_const(glm::i16, 4)
    -00268         static_swizzle4_const(glm::i32, 2)
    -00269         static_swizzle4_const(glm::i32, 3)
    -00270         static_swizzle4_const(glm::i32, 4)
    -00271         static_swizzle4_const(glm::i64, 2)
    -00272         static_swizzle4_const(glm::i64, 3)
    -00273         static_swizzle4_const(glm::i64, 4)
    -00274 
    -00275         static_swizzle4_const(glm::u8, 2)
    -00276         static_swizzle4_const(glm::u8, 3)
    -00277         static_swizzle4_const(glm::u8, 4)
    -00278         static_swizzle4_const(glm::u16, 2)
    -00279         static_swizzle4_const(glm::u16, 3)
    -00280         static_swizzle4_const(glm::u16, 4)
    -00281         static_swizzle4_const(glm::u32, 2)
    -00282         static_swizzle4_const(glm::u32, 3)
    -00283         static_swizzle4_const(glm::u32, 4)
    -00284         static_swizzle4_const(glm::u64, 2)
    -00285         static_swizzle4_const(glm::u64, 3)
    -00286         static_swizzle4_const(glm::u64, 4)
    -00287 
    -00288 #       define static_swizzle2_ref(TYPE, SIZE) \
    -00289                 template <glm::comp x, glm::comp y> \
    -00290                 GLM_FUNC_QUALIFIER glm::detail::tref2<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    -00291                 {return glm::detail::tref2<TYPE>(v[x], v[y]);}  
    -00292 
    -00293 #       define static_swizzle3_ref(TYPE, SIZE) \
    -00294                 template <glm::comp x, glm::comp y, glm::comp z> \
    -00295                 GLM_FUNC_QUALIFIER glm::detail::tref3<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    -00296                 {return glm::detail::tref3<TYPE>(v[x], v[y], v[z]);}    
    -00297 
    -00298 #       define static_swizzle4_ref(TYPE, SIZE) \
    -00299                 template <glm::comp x, glm::comp y, glm::comp z, glm::comp w> \
    -00300                 GLM_FUNC_QUALIFIER glm::detail::tref4<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    -00301                 {return glm::detail::tref4<TYPE>(v[x], v[y], v[z], v[w]);}      
    -00302 
    -00303         static_swizzle2_ref(glm::f16, 2)
    -00304         static_swizzle2_ref(glm::f16, 3)
    -00305         static_swizzle2_ref(glm::f16, 4)
    -00306         static_swizzle2_ref(glm::f32, 2)
    -00307         static_swizzle2_ref(glm::f32, 3)
    -00308         static_swizzle2_ref(glm::f32, 4)
    -00309         static_swizzle2_ref(glm::f64, 2)
    -00310         static_swizzle2_ref(glm::f64, 3)
    -00311         static_swizzle2_ref(glm::f64, 4)
    -00312 
    -00313         static_swizzle2_ref(glm::i8, 2)
    -00314         static_swizzle2_ref(glm::i8, 3)
    -00315         static_swizzle2_ref(glm::i8, 4)
    -00316         static_swizzle2_ref(glm::i16, 2)
    -00317         static_swizzle2_ref(glm::i16, 3)
    -00318         static_swizzle2_ref(glm::i16, 4)
    -00319         static_swizzle2_ref(glm::i32, 2)
    -00320         static_swizzle2_ref(glm::i32, 3)
    -00321         static_swizzle2_ref(glm::i32, 4)
    -00322         static_swizzle2_ref(glm::i64, 2)
    -00323         static_swizzle2_ref(glm::i64, 3)
    -00324         static_swizzle2_ref(glm::i64, 4)
    -00325 
    -00326         static_swizzle2_ref(glm::u8, 2)
    -00327         static_swizzle2_ref(glm::u8, 3)
    -00328         static_swizzle2_ref(glm::u8, 4)
    -00329         static_swizzle2_ref(glm::u16, 2)
    -00330         static_swizzle2_ref(glm::u16, 3)
    -00331         static_swizzle2_ref(glm::u16, 4)
    -00332         static_swizzle2_ref(glm::u32, 2)
    -00333         static_swizzle2_ref(glm::u32, 3)
    -00334         static_swizzle2_ref(glm::u32, 4)
    -00335         static_swizzle2_ref(glm::u64, 2)
    -00336         static_swizzle2_ref(glm::u64, 3)
    -00337         static_swizzle2_ref(glm::u64, 4)
    -00338 
    -00339         static_swizzle3_ref(glm::f16, 3)
    -00340         static_swizzle3_ref(glm::f16, 4)
    -00341         static_swizzle3_ref(glm::f32, 3)
    -00342         static_swizzle3_ref(glm::f32, 4)
    -00343         static_swizzle3_ref(glm::f64, 3)
    -00344         static_swizzle3_ref(glm::f64, 4)
    -00345 
    -00346         static_swizzle3_ref(glm::i8, 3)
    -00347         static_swizzle3_ref(glm::i8, 4)
    -00348         static_swizzle3_ref(glm::i16, 3)
    -00349         static_swizzle3_ref(glm::i16, 4)
    -00350         static_swizzle3_ref(glm::i32, 3)
    -00351         static_swizzle3_ref(glm::i32, 4)
    -00352         static_swizzle3_ref(glm::i64, 3)
    -00353         static_swizzle3_ref(glm::i64, 4)
    -00354 
    -00355         static_swizzle3_ref(glm::u8, 3)
    -00356         static_swizzle3_ref(glm::u8, 4)
    -00357         static_swizzle3_ref(glm::u16, 3)
    -00358         static_swizzle3_ref(glm::u16, 4)
    -00359         static_swizzle3_ref(glm::u32, 3)
    -00360         static_swizzle3_ref(glm::u32, 4)
    -00361         static_swizzle3_ref(glm::u64, 3)
    -00362         static_swizzle3_ref(glm::u64, 4)
    -00363 
    -00364         static_swizzle4_ref(glm::f16, 4)
    -00365         static_swizzle4_ref(glm::f32, 4)
    -00366         static_swizzle4_ref(glm::f64, 4)
    -00367 
    -00368         static_swizzle4_ref(glm::i8, 4)
    -00369         static_swizzle4_ref(glm::i16, 4)
    -00370         static_swizzle4_ref(glm::i32, 4)
    -00371         static_swizzle4_ref(glm::i64, 4)
    -00372 
    -00373         static_swizzle4_ref(glm::u8, 4)
    -00374         static_swizzle4_ref(glm::u16, 4)
    -00375         static_swizzle4_ref(glm::u32, 4)
    -00376         static_swizzle4_ref(glm::u64, 4)
    -00377 
    -00379 }//namespace glm
    -00380 
    -00381 #include "swizzle.inl"
    -00382 
    -00383 #endif//GLM_GTC_swizzle
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 #ifndef GLM_GTX_string_cast
    +
    42 #define GLM_GTX_string_cast GLM_VERSION
    +
    43 
    +
    44 // Dependency:
    +
    45 #include "../glm.hpp"
    +
    46 #include "../gtc/half_float.hpp"
    +
    47 #include "../gtx/integer.hpp"
    +
    48 #include "../gtx/quaternion.hpp"
    +
    49 #include <string>
    +
    50 
    +
    51 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    52 # pragma message("GLM: GLM_GTX_string_cast extension included")
    +
    53 #endif
    +
    54 
    +
    55 namespace glm
    +
    56 {
    +
    59 
    +
    62  template <typename genType>
    +
    63  std::string to_string(genType const & x);
    +
    64 
    +
    66 }//namespace glm
    +
    67 
    +
    68 #include "string_cast.inl"
    +
    69 
    +
    70 #endif//GLM_GTX_string_cast
    +
    + - diff --git a/doc/api/a00090.html b/doc/api/a00090.html index 5f7ce3fc..c3a90794 100644 --- a/doc/api/a00090.html +++ b/doc/api/a00090.html @@ -2,42 +2,31 @@ - -transform.hpp File Reference + +swizzle.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,63 +35,35 @@
  • File List
  • + +
    -
    -
    transform.hpp File Reference
    -
    +
    swizzle.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename T >
    detail::tmat4x4< T > rotate (T angle, T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > rotate (T angle, detail::tvec3< T > const &v)
    template<typename T >
    detail::tmat4x4< T > rotate (detail::tmat4x4< T > const &m, T angle, T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > scale (T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > scale (detail::tmat4x4< T > const &m, T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > scale (detail::tvec3< T > const &v)
    template<typename T >
    detail::tmat4x4< T > translate (T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > translate (detail::tmat4x4< T > const &m, T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > translate (detail::tvec3< T > const &v)
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_transform: Extented transformation matrices

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTC_matrix_transform: Matrix transform functions (dependence)
    -
    -GLM_GTX_transform: Extented transformation matrices
    -
    -GLM_GTX_transform2: Extra transformation matrices
    - -

    Definition in file transform.hpp.

    -
    - +

    GLM_GTC_swizzle

    +
    Date
    2010-02-20 / 2011-06-05
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file swizzle.hpp.

    + + - diff --git a/doc/api/a00090_source.html b/doc/api/a00090_source.html index b76dad77..fb51f8de 100644 --- a/doc/api/a00090_source.html +++ b/doc/api/a00090_source.html @@ -2,42 +2,31 @@ - -transform.hpp Source File + +swizzle.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,130 +35,394 @@
  • File List
  • + +
    -
    transform.hpp
    -
    +
    swizzle.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 #ifndef GLM_GTX_transform 
    -00042 #define GLM_GTX_transform GLM_VERSION
    -00043 
    -00044 // Dependency:
    -00045 #include "../glm.hpp"
    -00046 #include "../gtc/matrix_transform.hpp"
    -00047 
    -00048 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00049 #       pragma message("GLM: GLM_GTX_transform extension included")
    -00050 #endif
    -00051 
    -00052 namespace glm
    -00053 {
    -00056 
    -00059         // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
    -00060         template <typename T> 
    -00061         detail::tmat4x4<T> translate(
    -00062                 T x, T y, T z);
    -00063                 
    -00066         // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
    -00067         template <typename T> 
    -00068         detail::tmat4x4<T> translate(
    -00069                 detail::tmat4x4<T> const & m, 
    -00070                 T x, T y, T z);
    -00071                 
    -00074         // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
    -00075         template <typename T> 
    -00076         detail::tmat4x4<T> translate(
    -00077                 detail::tvec3<T> const & v);
    -00078 
    -00081         // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
    -00082         template <typename T> 
    -00083         detail::tmat4x4<T> rotate(
    -00084                 T angle, 
    -00085                 T x, T y, T z);
    -00086 
    -00089         // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
    -00090         template <typename T> 
    -00091         detail::tmat4x4<T> rotate(
    -00092                 T angle, 
    -00093                 detail::tvec3<T> const & v);
    -00094 
    -00097         // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
    -00098         template <typename T> 
    -00099         detail::tmat4x4<T> rotate(
    -00100                 detail::tmat4x4<T> const & m, 
    -00101                 T angle, 
    -00102                 T x, T y, T z);
    -00103                 
    -00106         // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
    -00107         template <typename T> 
    -00108         detail::tmat4x4<T> scale(
    -00109                 T x, T y, T z);
    -00110                 
    -00113         // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
    -00114         template <typename T> 
    -00115         detail::tmat4x4<T> scale(
    -00116                 detail::tmat4x4<T> const & m, 
    -00117                 T x, T y, T z);
    -00118 
    -00121         // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
    -00122         template <typename T> 
    -00123         detail::tmat4x4<T> scale(
    -00124                 detail::tvec3<T> const & v);
    -00125 
    -00127 }// namespace glm
    -00128 
    -00129 #include "transform.inl"
    -00130 
    -00131 #endif//GLM_GTX_transform
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTC_swizzle
    +
    39 #define GLM_GTC_swizzle GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtc/type_precision.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTC_swizzle extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    54  template <typename T, template <typename> class vecType>
    +
    55  T const & swizzle(
    +
    56  vecType<T> const & v,
    +
    57  comp x);
    +
    58 
    +
    59  template <typename T, template <typename> class vecType>
    +
    60  detail::tvec2<T> const & swizzle(
    +
    61  vecType<T> const & v,
    +
    62  comp x, comp y);
    +
    63 
    +
    64  template <typename T, template <typename> class vecType>
    +
    65  detail::tvec3<T> const & swizzle(
    +
    66  vecType<T> const & v,
    +
    67  comp x, comp y, comp z);
    +
    68 
    +
    69  template <typename T, template <typename> class vecType>
    +
    70  detail::tvec4<T> const & swizzle(
    +
    71  vecType<T> const & v,
    +
    72  comp x, comp y, comp z, comp w);
    +
    73 
    +
    74  template <typename T, template <typename> class vecType>
    +
    75  T & swizzle(
    +
    76  vecType<T> & v,
    +
    77  comp x);
    +
    78 
    +
    79  template <typename T, template <typename> class vecType>
    +
    80  detail::tref2<T> swizzle(
    +
    81  vecType<T> & v,
    +
    82  comp x, comp y);
    +
    83 
    +
    84  template <typename T, template <typename> class vecType>
    +
    85  detail::tref3<T> swizzle(
    +
    86  vecType<T> & v,
    +
    87  comp x, comp y, comp z);
    +
    88 
    +
    89  template <typename T, template <typename> class vecType>
    +
    90  detail::tref4<T> swizzle(
    +
    91  vecType<T> & v,
    +
    92  comp x, comp y, comp z, comp w);
    +
    93 
    +
    94 # define static_swizzle1_const(TYPE, SIZE) \
    +
    95  template <comp x> \
    +
    96  GLM_FUNC_QUALIFIER TYPE swizzle(detail::tvec##SIZE<TYPE> const & v) \
    +
    97  {return v[x];}
    +
    98 
    +
    99 # define static_swizzle1_ref(TYPE, SIZE) \
    +
    100  template <comp x> \
    +
    101  GLM_FUNC_QUALIFIER TYPE& swizzle(detail::tvec##SIZE<TYPE> & v) \
    +
    102  {return v[x];}
    +
    103 
    +
    104  static_swizzle1_ref(detail::float16, 2)
    +
    105  static_swizzle1_ref(detail::float16, 3)
    +
    106  static_swizzle1_ref(detail::float16, 4)
    +
    107  static_swizzle1_ref(detail::float32, 2)
    +
    108  static_swizzle1_ref(detail::float32, 3)
    +
    109  static_swizzle1_ref(detail::float32, 4)
    +
    110  static_swizzle1_ref(detail::float64, 2)
    +
    111  static_swizzle1_ref(detail::float64, 3)
    +
    112  static_swizzle1_ref(detail::float64, 4)
    +
    113 
    +
    114  static_swizzle1_ref(detail::int8, 2)
    +
    115  static_swizzle1_ref(detail::int8, 3)
    +
    116  static_swizzle1_ref(detail::int8, 4)
    +
    117  static_swizzle1_ref(detail::int16, 2)
    +
    118  static_swizzle1_ref(detail::int16, 3)
    +
    119  static_swizzle1_ref(detail::int16, 4)
    +
    120  static_swizzle1_ref(detail::int32, 2)
    +
    121  static_swizzle1_ref(detail::int32, 3)
    +
    122  static_swizzle1_ref(detail::int32, 4)
    +
    123  static_swizzle1_ref(detail::int64, 2)
    +
    124  static_swizzle1_ref(detail::int64, 3)
    +
    125  static_swizzle1_ref(detail::int64, 4)
    +
    126 
    +
    127  static_swizzle1_ref(detail::uint8, 2)
    +
    128  static_swizzle1_ref(detail::uint8, 3)
    +
    129  static_swizzle1_ref(detail::uint8, 4)
    +
    130  static_swizzle1_ref(detail::uint16, 2)
    +
    131  static_swizzle1_ref(detail::uint16, 3)
    +
    132  static_swizzle1_ref(detail::uint16, 4)
    +
    133  static_swizzle1_ref(detail::uint32, 2)
    +
    134  static_swizzle1_ref(detail::uint32, 3)
    +
    135  static_swizzle1_ref(detail::uint32, 4)
    +
    136  static_swizzle1_ref(detail::uint64, 2)
    +
    137  static_swizzle1_ref(detail::uint64, 3)
    +
    138  static_swizzle1_ref(detail::uint64, 4)
    +
    139 /*
    +
    140 # define static_swizzle2_const(TYPE) \
    +
    141  template <comp x, comp y> \
    +
    142  GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    +
    143  {return TYPE(v[x], v[y]);}
    +
    144 
    +
    145 # define static_swizzle3_const(TYPE) \
    +
    146  template <comp x, comp y, comp z> \
    +
    147  GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    +
    148  {return TYPE(v[x], v[y], v[z]);}
    +
    149 
    +
    150 # define static_swizzle4_const(TYPE) \
    +
    151  template <comp x, comp y, comp z, comp w> \
    +
    152  GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    +
    153  {return TYPE(v[x], v[y], v[z], v[w]);}
    +
    154 */
    +
    155 
    +
    156 # define static_swizzle2_const(TYPE, SIZE) \
    +
    157  template <comp x, comp y> \
    +
    158  GLM_FUNC_QUALIFIER detail::tvec2<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
    +
    159  {return detail::tvec2<TYPE>(v[x], v[y]);}
    +
    160 
    +
    161 # define static_swizzle3_const(TYPE, SIZE) \
    +
    162  template <comp x, comp y, comp z> \
    +
    163  GLM_FUNC_QUALIFIER detail::tvec3<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
    +
    164  {return detail::tvec3<TYPE>(v[x], v[y], v[z]);}
    +
    165 
    +
    166 # define static_swizzle4_const(TYPE, SIZE) \
    +
    167  template <comp x, comp y, comp z, comp w> \
    +
    168  GLM_FUNC_QUALIFIER detail::tvec4<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
    +
    169  {return detail::tvec4<TYPE>(v[x], v[y], v[z], v[w]);}
    +
    170 
    +
    171 
    +
    172  static_swizzle2_const(glm::f16, 2)
    +
    173  static_swizzle2_const(glm::f16, 3)
    +
    174  static_swizzle2_const(glm::f16, 4)
    +
    175  static_swizzle2_const(glm::f32, 2)
    +
    176  static_swizzle2_const(glm::f32, 3)
    +
    177  static_swizzle2_const(glm::f32, 4)
    +
    178  static_swizzle2_const(glm::f64, 2)
    +
    179  static_swizzle2_const(glm::f64, 3)
    +
    180  static_swizzle2_const(glm::f64, 4)
    +
    181 
    +
    182  static_swizzle2_const(glm::i8, 2)
    +
    183  static_swizzle2_const(glm::i8, 3)
    +
    184  static_swizzle2_const(glm::i8, 4)
    +
    185  static_swizzle2_const(glm::i16, 2)
    +
    186  static_swizzle2_const(glm::i16, 3)
    +
    187  static_swizzle2_const(glm::i16, 4)
    +
    188  static_swizzle2_const(glm::i32, 2)
    +
    189  static_swizzle2_const(glm::i32, 3)
    +
    190  static_swizzle2_const(glm::i32, 4)
    +
    191  static_swizzle2_const(glm::i64, 2)
    +
    192  static_swizzle2_const(glm::i64, 3)
    +
    193  static_swizzle2_const(glm::i64, 4)
    +
    194 
    +
    195  static_swizzle2_const(glm::u8, 2)
    +
    196  static_swizzle2_const(glm::u8, 3)
    +
    197  static_swizzle2_const(glm::u8, 4)
    +
    198  static_swizzle2_const(glm::u16, 2)
    +
    199  static_swizzle2_const(glm::u16, 3)
    +
    200  static_swizzle2_const(glm::u16, 4)
    +
    201  static_swizzle2_const(glm::u32, 2)
    +
    202  static_swizzle2_const(glm::u32, 3)
    +
    203  static_swizzle2_const(glm::u32, 4)
    +
    204  static_swizzle2_const(glm::u64, 2)
    +
    205  static_swizzle2_const(glm::u64, 3)
    +
    206  static_swizzle2_const(glm::u64, 4)
    +
    207 
    +
    208  static_swizzle3_const(glm::f16, 2)
    +
    209  static_swizzle3_const(glm::f16, 3)
    +
    210  static_swizzle3_const(glm::f16, 4)
    +
    211  static_swizzle3_const(glm::f32, 2)
    +
    212  static_swizzle3_const(glm::f32, 3)
    +
    213  static_swizzle3_const(glm::f32, 4)
    +
    214  static_swizzle3_const(glm::f64, 2)
    +
    215  static_swizzle3_const(glm::f64, 3)
    +
    216  static_swizzle3_const(glm::f64, 4)
    +
    217 
    +
    218  static_swizzle3_const(glm::i8, 2)
    +
    219  static_swizzle3_const(glm::i8, 3)
    +
    220  static_swizzle3_const(glm::i8, 4)
    +
    221  static_swizzle3_const(glm::i16, 2)
    +
    222  static_swizzle3_const(glm::i16, 3)
    +
    223  static_swizzle3_const(glm::i16, 4)
    +
    224  static_swizzle3_const(glm::i32, 2)
    +
    225  static_swizzle3_const(glm::i32, 3)
    +
    226  static_swizzle3_const(glm::i32, 4)
    +
    227  static_swizzle3_const(glm::i64, 2)
    +
    228  static_swizzle3_const(glm::i64, 3)
    +
    229  static_swizzle3_const(glm::i64, 4)
    +
    230 
    +
    231  static_swizzle3_const(glm::u8, 2)
    +
    232  static_swizzle3_const(glm::u8, 3)
    +
    233  static_swizzle3_const(glm::u8, 4)
    +
    234  static_swizzle3_const(glm::u16, 2)
    +
    235  static_swizzle3_const(glm::u16, 3)
    +
    236  static_swizzle3_const(glm::u16, 4)
    +
    237  static_swizzle3_const(glm::u32, 2)
    +
    238  static_swizzle3_const(glm::u32, 3)
    +
    239  static_swizzle3_const(glm::u32, 4)
    +
    240  static_swizzle3_const(glm::u64, 2)
    +
    241  static_swizzle3_const(glm::u64, 3)
    +
    242  static_swizzle3_const(glm::u64, 4)
    +
    243 
    +
    244  static_swizzle4_const(glm::f16, 2)
    +
    245  static_swizzle4_const(glm::f16, 3)
    +
    246  static_swizzle4_const(glm::f16, 4)
    +
    247  static_swizzle4_const(glm::f32, 2)
    +
    248  static_swizzle4_const(glm::f32, 3)
    +
    249  static_swizzle4_const(glm::f32, 4)
    +
    250  static_swizzle4_const(glm::f64, 2)
    +
    251  static_swizzle4_const(glm::f64, 3)
    +
    252  static_swizzle4_const(glm::f64, 4)
    +
    253 
    +
    254  static_swizzle4_const(glm::i8, 2)
    +
    255  static_swizzle4_const(glm::i8, 3)
    +
    256  static_swizzle4_const(glm::i8, 4)
    +
    257  static_swizzle4_const(glm::i16, 2)
    +
    258  static_swizzle4_const(glm::i16, 3)
    +
    259  static_swizzle4_const(glm::i16, 4)
    +
    260  static_swizzle4_const(glm::i32, 2)
    +
    261  static_swizzle4_const(glm::i32, 3)
    +
    262  static_swizzle4_const(glm::i32, 4)
    +
    263  static_swizzle4_const(glm::i64, 2)
    +
    264  static_swizzle4_const(glm::i64, 3)
    +
    265  static_swizzle4_const(glm::i64, 4)
    +
    266 
    +
    267  static_swizzle4_const(glm::u8, 2)
    +
    268  static_swizzle4_const(glm::u8, 3)
    +
    269  static_swizzle4_const(glm::u8, 4)
    +
    270  static_swizzle4_const(glm::u16, 2)
    +
    271  static_swizzle4_const(glm::u16, 3)
    +
    272  static_swizzle4_const(glm::u16, 4)
    +
    273  static_swizzle4_const(glm::u32, 2)
    +
    274  static_swizzle4_const(glm::u32, 3)
    +
    275  static_swizzle4_const(glm::u32, 4)
    +
    276  static_swizzle4_const(glm::u64, 2)
    +
    277  static_swizzle4_const(glm::u64, 3)
    +
    278  static_swizzle4_const(glm::u64, 4)
    +
    279 
    +
    280 # define static_swizzle2_ref(TYPE, SIZE) \
    +
    281  template <glm::comp x, glm::comp y> \
    +
    282  GLM_FUNC_QUALIFIER glm::detail::tref2<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    +
    283  {return glm::detail::tref2<TYPE>(v[x], v[y]);}
    +
    284 
    +
    285 # define static_swizzle3_ref(TYPE, SIZE) \
    +
    286  template <glm::comp x, glm::comp y, glm::comp z> \
    +
    287  GLM_FUNC_QUALIFIER glm::detail::tref3<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    +
    288  {return glm::detail::tref3<TYPE>(v[x], v[y], v[z]);}
    +
    289 
    +
    290 # define static_swizzle4_ref(TYPE, SIZE) \
    +
    291  template <glm::comp x, glm::comp y, glm::comp z, glm::comp w> \
    +
    292  GLM_FUNC_QUALIFIER glm::detail::tref4<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    +
    293  {return glm::detail::tref4<TYPE>(v[x], v[y], v[z], v[w]);}
    +
    294 
    +
    295  static_swizzle2_ref(glm::f16, 2)
    +
    296  static_swizzle2_ref(glm::f16, 3)
    +
    297  static_swizzle2_ref(glm::f16, 4)
    +
    298  static_swizzle2_ref(glm::f32, 2)
    +
    299  static_swizzle2_ref(glm::f32, 3)
    +
    300  static_swizzle2_ref(glm::f32, 4)
    +
    301  static_swizzle2_ref(glm::f64, 2)
    +
    302  static_swizzle2_ref(glm::f64, 3)
    +
    303  static_swizzle2_ref(glm::f64, 4)
    +
    304 
    +
    305  static_swizzle2_ref(glm::i8, 2)
    +
    306  static_swizzle2_ref(glm::i8, 3)
    +
    307  static_swizzle2_ref(glm::i8, 4)
    +
    308  static_swizzle2_ref(glm::i16, 2)
    +
    309  static_swizzle2_ref(glm::i16, 3)
    +
    310  static_swizzle2_ref(glm::i16, 4)
    +
    311  static_swizzle2_ref(glm::i32, 2)
    +
    312  static_swizzle2_ref(glm::i32, 3)
    +
    313  static_swizzle2_ref(glm::i32, 4)
    +
    314  static_swizzle2_ref(glm::i64, 2)
    +
    315  static_swizzle2_ref(glm::i64, 3)
    +
    316  static_swizzle2_ref(glm::i64, 4)
    +
    317 
    +
    318  static_swizzle2_ref(glm::u8, 2)
    +
    319  static_swizzle2_ref(glm::u8, 3)
    +
    320  static_swizzle2_ref(glm::u8, 4)
    +
    321  static_swizzle2_ref(glm::u16, 2)
    +
    322  static_swizzle2_ref(glm::u16, 3)
    +
    323  static_swizzle2_ref(glm::u16, 4)
    +
    324  static_swizzle2_ref(glm::u32, 2)
    +
    325  static_swizzle2_ref(glm::u32, 3)
    +
    326  static_swizzle2_ref(glm::u32, 4)
    +
    327  static_swizzle2_ref(glm::u64, 2)
    +
    328  static_swizzle2_ref(glm::u64, 3)
    +
    329  static_swizzle2_ref(glm::u64, 4)
    +
    330 
    +
    331  static_swizzle3_ref(glm::f16, 3)
    +
    332  static_swizzle3_ref(glm::f16, 4)
    +
    333  static_swizzle3_ref(glm::f32, 3)
    +
    334  static_swizzle3_ref(glm::f32, 4)
    +
    335  static_swizzle3_ref(glm::f64, 3)
    +
    336  static_swizzle3_ref(glm::f64, 4)
    +
    337 
    +
    338  static_swizzle3_ref(glm::i8, 3)
    +
    339  static_swizzle3_ref(glm::i8, 4)
    +
    340  static_swizzle3_ref(glm::i16, 3)
    +
    341  static_swizzle3_ref(glm::i16, 4)
    +
    342  static_swizzle3_ref(glm::i32, 3)
    +
    343  static_swizzle3_ref(glm::i32, 4)
    +
    344  static_swizzle3_ref(glm::i64, 3)
    +
    345  static_swizzle3_ref(glm::i64, 4)
    +
    346 
    +
    347  static_swizzle3_ref(glm::u8, 3)
    +
    348  static_swizzle3_ref(glm::u8, 4)
    +
    349  static_swizzle3_ref(glm::u16, 3)
    +
    350  static_swizzle3_ref(glm::u16, 4)
    +
    351  static_swizzle3_ref(glm::u32, 3)
    +
    352  static_swizzle3_ref(glm::u32, 4)
    +
    353  static_swizzle3_ref(glm::u64, 3)
    +
    354  static_swizzle3_ref(glm::u64, 4)
    +
    355 
    +
    356  static_swizzle4_ref(glm::f16, 4)
    +
    357  static_swizzle4_ref(glm::f32, 4)
    +
    358  static_swizzle4_ref(glm::f64, 4)
    +
    359 
    +
    360  static_swizzle4_ref(glm::i8, 4)
    +
    361  static_swizzle4_ref(glm::i16, 4)
    +
    362  static_swizzle4_ref(glm::i32, 4)
    +
    363  static_swizzle4_ref(glm::i64, 4)
    +
    364 
    +
    365  static_swizzle4_ref(glm::u8, 4)
    +
    366  static_swizzle4_ref(glm::u16, 4)
    +
    367  static_swizzle4_ref(glm::u32, 4)
    +
    368  static_swizzle4_ref(glm::u64, 4)
    +
    369 
    +
    371 }//namespace glm
    +
    372 
    +
    373 #include "swizzle.inl"
    +
    374 
    +
    375 #endif//GLM_GTC_swizzle
    +
    + - diff --git a/doc/api/a00091.html b/doc/api/a00091.html index cd49c257..f1578d42 100644 --- a/doc/api/a00091.html +++ b/doc/api/a00091.html @@ -2,42 +2,31 @@ - -transform2.hpp File Reference + +transform.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,59 +35,74 @@
  • File List
  • + +
    -
    transform2.hpp File Reference
    -
    +
    transform.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat3x3< T > proj2D (const detail::tmat3x3< T > &m, const detail::tvec3< T > &normal)
    template<typename T >
    detail::tmat4x4< T > proj3D (const detail::tmat4x4< T > &m, const detail::tvec3< T > &normal)
    template<typename valType >
    detail::tmat4x4< valType > scaleBias (valType scale, valType bias)
    template<typename valType >
    detail::tmat4x4< valType > scaleBias (detail::tmat4x4< valType > const &m, valType scale, valType bias)
    template<typename T >
    detail::tmat3x3< T > shearX2D (detail::tmat3x3< T > const &m, T y)
    template<typename T >
    detail::tmat4x4< T > shearX3D (const detail::tmat4x4< T > &m, T y, T z)
    template<typename T >
    detail::tmat3x3< T > shearY2D (detail::tmat3x3< T > const &m, T x)
    template<typename T >
    detail::tmat4x4< T > shearY3D (const detail::tmat4x4< T > &m, T x, T z)
    template<typename T >
    detail::tmat4x4< T > shearZ3D (const detail::tmat4x4< T > &m, T x, T y)
    template<typename T >
    detail::tmat4x4< T > rotate (T angle, T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > rotate (T angle, detail::tvec3< T > const &v)
     
    template<typename T >
    detail::tmat4x4< T > rotate (detail::tmat4x4< T > const &m, T angle, T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > scale (T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > scale (detail::tmat4x4< T > const &m, T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > scale (detail::tvec3< T > const &v)
     
    template<typename T >
    detail::tmat4x4< T > translate (T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > translate (detail::tmat4x4< T > const &m, T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > translate (detail::tvec3< T > const &v)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_transform2: Extra transformation matrices

    -
    Date:
    2005-12-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTX_transform

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTX_transform: Extented transformation matrices (dependence)
    - -

    Definition in file transform2.hpp.

    -
    - +GLM_GTC_matrix_transform (dependence) +
    +GLM_GTX_transform
    +
    +GLM_GTX_transform2
    +

    Definition in file transform.hpp.

    + + - diff --git a/doc/api/a00091_source.html b/doc/api/a00091_source.html index 8dd1b9fd..16dd93f9 100644 --- a/doc/api/a00091_source.html +++ b/doc/api/a00091_source.html @@ -2,42 +2,31 @@ - -transform2.hpp Source File + +transform.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,134 +35,132 @@
  • File List
  • + +
    -
    transform2.hpp
    -
    +
    transform.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_transform2
    -00040 #define GLM_GTX_transform2 GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 #include "../gtx/transform.hpp"
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_transform2 extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename T> 
    -00058         detail::tmat3x3<T> shearX2D(
    -00059                 detail::tmat3x3<T> const & m, 
    -00060                 T y);
    -00061 
    -00064         template <typename T> 
    -00065         detail::tmat3x3<T> shearY2D(
    -00066                 detail::tmat3x3<T> const & m, 
    -00067                 T x);
    -00068 
    -00071         template <typename T> 
    -00072         detail::tmat4x4<T> shearX3D(
    -00073                 const detail::tmat4x4<T> & m,
    -00074                 T y, 
    -00075                 T z);
    -00076                 
    -00079         template <typename T> 
    -00080         detail::tmat4x4<T> shearY3D(
    -00081                 const detail::tmat4x4<T> & m, 
    -00082                 T x, 
    -00083                 T z);
    -00084                 
    -00087         template <typename T> 
    -00088         detail::tmat4x4<T> shearZ3D(
    -00089                 const detail::tmat4x4<T> & m, 
    -00090                 T x, 
    -00091                 T y);
    -00092 
    -00093         //template <typename T> GLM_FUNC_QUALIFIER detail::tmat4x4<T> shear(const detail::tmat4x4<T> & m, shearPlane, planePoint, angle)
    -00094         // Identity + tan(angle) * cross(Normal, OnPlaneVector)     0
    -00095         // - dot(PointOnPlane, normal) * OnPlaneVector              1
    -00096 
    -00097         // Reflect functions seem to don't work
    -00098         //template <typename T> detail::tmat3x3<T> reflect2D(const detail::tmat3x3<T> & m, const detail::tvec3<T>& normal){return reflect2DGTX(m, normal);}                                                                     //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
    -00099         //template <typename T> detail::tmat4x4<T> reflect3D(const detail::tmat4x4<T> & m, const detail::tvec3<T>& normal){return reflect3DGTX(m, normal);}                                                                     //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
    -00100                 
    -00103         template <typename T> 
    -00104         detail::tmat3x3<T> proj2D(
    -00105                 const detail::tmat3x3<T> & m, 
    -00106                 const detail::tvec3<T>& normal);
    -00107                                 
    -00110         template <typename T> 
    -00111         detail::tmat4x4<T> proj3D(
    -00112                 const detail::tmat4x4<T> & m, 
    -00113                 const detail::tvec3<T>& normal);
    -00114 
    -00117         template <typename valType> 
    -00118         detail::tmat4x4<valType> scaleBias(
    -00119                 valType scale, 
    -00120                 valType bias);
    -00121 
    -00124         template <typename valType> 
    -00125         detail::tmat4x4<valType> scaleBias(
    -00126                 detail::tmat4x4<valType> const & m, 
    -00127                 valType scale, 
    -00128                 valType bias);
    -00129 
    -00131 }// namespace glm
    -00132 
    -00133 #include "transform2.inl"
    -00134 
    -00135 #endif//GLM_GTX_transform2
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 #ifndef GLM_GTX_transform
    +
    42 #define GLM_GTX_transform GLM_VERSION
    +
    43 
    +
    44 // Dependency:
    +
    45 #include "../glm.hpp"
    +
    46 #include "../gtc/matrix_transform.hpp"
    +
    47 
    +
    48 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    49 # pragma message("GLM: GLM_GTX_transform extension included")
    +
    50 #endif
    +
    51 
    +
    52 namespace glm
    +
    53 {
    +
    56 
    +
    59  // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
    +
    60  template <typename T>
    +
    61  detail::tmat4x4<T> translate(
    +
    62  T x, T y, T z);
    +
    63 
    +
    66  // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
    +
    67  template <typename T>
    +
    68  detail::tmat4x4<T> translate(
    +
    69  detail::tmat4x4<T> const & m,
    +
    70  T x, T y, T z);
    +
    71 
    +
    74  // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
    +
    75  template <typename T>
    +
    76  detail::tmat4x4<T> translate(
    +
    77  detail::tvec3<T> const & v);
    +
    78 
    +
    81  // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
    +
    82  template <typename T>
    +
    83  detail::tmat4x4<T> rotate(
    +
    84  T angle,
    +
    85  T x, T y, T z);
    +
    86 
    +
    89  // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
    +
    90  template <typename T>
    +
    91  detail::tmat4x4<T> rotate(
    +
    92  T angle,
    +
    93  detail::tvec3<T> const & v);
    +
    94 
    +
    97  // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
    +
    98  template <typename T>
    +
    99  detail::tmat4x4<T> rotate(
    +
    100  detail::tmat4x4<T> const & m,
    +
    101  T angle,
    +
    102  T x, T y, T z);
    +
    103 
    +
    106  // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
    +
    107  template <typename T>
    +
    108  detail::tmat4x4<T> scale(
    +
    109  T x, T y, T z);
    +
    110 
    +
    113  // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
    +
    114  template <typename T>
    +
    115  detail::tmat4x4<T> scale(
    +
    116  detail::tmat4x4<T> const & m,
    +
    117  T x, T y, T z);
    +
    118 
    +
    121  // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
    +
    122  template <typename T>
    +
    123  detail::tmat4x4<T> scale(
    +
    124  detail::tvec3<T> const & v);
    +
    125 
    +
    127 }// namespace glm
    +
    128 
    +
    129 #include "transform.inl"
    +
    130 
    +
    131 #endif//GLM_GTX_transform
    +
    + - diff --git a/doc/api/a00092.html b/doc/api/a00092.html index dfa18009..49fae518 100644 --- a/doc/api/a00092.html +++ b/doc/api/a00092.html @@ -2,42 +2,31 @@ - -type.hpp File Reference + +transform2.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,77 +35,70 @@
  • File List
  • + +
    +Functions
    -
    type.hpp File Reference
    - +
    transform2.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    typedef detail::tvec2< bool > bvec2
    typedef detail::tvec3< bool > bvec3
    typedef detail::tvec4< bool > bvec4
    typedef detail::tmat2x2< double > dmat2
    typedef detail::tmat2x2< double > dmat2x2
    typedef detail::tmat2x3< double > dmat2x3
    typedef detail::tmat2x4< double > dmat2x4
    typedef detail::tmat3x3< double > dmat3
    typedef detail::tmat3x2< double > dmat3x2
    typedef detail::tmat3x3< double > dmat3x3
    typedef detail::tmat3x4< double > dmat3x4
    typedef detail::tmat4x4< double > dmat4
    typedef detail::tmat4x2< double > dmat4x2
    typedef detail::tmat4x3< double > dmat4x3
    typedef detail::tmat4x4< double > dmat4x4
    typedef detail::tvec2< double > dvec2
    typedef detail::tvec3< double > dvec3
    typedef detail::tvec4< double > dvec4
    typedef mediump_ivec2 ivec2
    typedef mediump_ivec3 ivec3
    typedef mediump_ivec4 ivec4
    typedef mat2x2 mat2
    typedef mediump_mat2x2 mat2x2
    typedef mediump_mat2x3 mat2x3
    typedef mediump_mat2x4 mat2x4
    typedef mat3x3 mat3
    typedef mediump_mat3x2 mat3x2
    typedef mediump_mat3x3 mat3x3
    typedef mediump_mat3x4 mat3x4
    typedef mat4x4 mat4
    typedef mediump_mat4x2 mat4x2
    typedef mediump_mat4x3 mat4x3
    typedef mediump_mat4x4 mat4x4
    typedef mediump_uvec2 uvec2
    typedef mediump_uvec3 uvec3
    typedef mediump_uvec4 uvec4
    typedef mediump_vec2 vec2
    typedef mediump_vec3 vec3
    typedef mediump_vec4 vec4

    +Functions

    template<typename T >
    detail::tmat3x3< T > proj2D (const detail::tmat3x3< T > &m, const detail::tvec3< T > &normal)
     
    template<typename T >
    detail::tmat4x4< T > proj3D (const detail::tmat4x4< T > &m, const detail::tvec3< T > &normal)
     
    template<typename valType >
    detail::tmat4x4< valType > scaleBias (valType scale, valType bias)
     
    template<typename valType >
    detail::tmat4x4< valType > scaleBias (detail::tmat4x4< valType > const &m, valType scale, valType bias)
     
    template<typename T >
    detail::tmat3x3< T > shearX2D (detail::tmat3x3< T > const &m, T y)
     
    template<typename T >
    detail::tmat4x4< T > shearX3D (const detail::tmat4x4< T > &m, T y, T z)
     
    template<typename T >
    detail::tmat3x3< T > shearY2D (detail::tmat3x3< T > const &m, T x)
     
    template<typename T >
    detail::tmat4x4< T > shearY3D (const detail::tmat4x4< T > &m, T x, T z)
     
    template<typename T >
    detail::tmat4x4< T > shearZ3D (const detail::tmat4x4< T > &m, T x, T y)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-01-08 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type.hpp.

    -
    - +

    GLM_GTX_transform2

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTX_transform (dependence)
    +

    Definition in file transform2.hpp.

    + + - diff --git a/doc/api/a00092_source.html b/doc/api/a00092_source.html index fc242df1..ed69f2dd 100644 --- a/doc/api/a00092_source.html +++ b/doc/api/a00092_source.html @@ -2,42 +2,31 @@ - -type.hpp Source File + +transform2.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,245 +35,136 @@
  • File List
  • + +
    -
    type.hpp
    -
    +
    transform2.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type
    -00030 #define glm_core_type
    -00031 
    -00032 #include "type_half.hpp"
    -00033 #include "type_float.hpp"
    -00034 #include "type_int.hpp"
    -00035 
    -00036 #include "type_gentype.hpp"
    -00037 
    -00038 #include "type_vec1.hpp"
    -00039 #include "type_vec2.hpp"
    -00040 #include "type_vec3.hpp"
    -00041 #include "type_vec4.hpp"
    -00042 
    -00043 #include "type_mat2x2.hpp"
    -00044 #include "type_mat2x3.hpp"
    -00045 #include "type_mat2x4.hpp"
    -00046 #include "type_mat3x2.hpp"
    -00047 #include "type_mat3x3.hpp"
    -00048 #include "type_mat3x4.hpp"
    -00049 #include "type_mat4x2.hpp"
    -00050 #include "type_mat4x3.hpp"
    -00051 #include "type_mat4x4.hpp"
    -00052 
    -00053 namespace glm
    -00054 {
    -00057 
    -00059         // Float definition
    -00060 
    -00061 #if(defined(GLM_PRECISION_HIGHP_FLOAT))
    -00062         typedef highp_vec2          vec2;
    -00063         typedef highp_vec3          vec3;
    -00064         typedef highp_vec4          vec4;
    -00065         typedef highp_mat2x2            mat2x2;
    -00066         typedef highp_mat2x3            mat2x3;
    -00067         typedef highp_mat2x4            mat2x4;
    -00068         typedef highp_mat3x2            mat3x2;
    -00069         typedef highp_mat3x3            mat3x3;
    -00070         typedef highp_mat3x4            mat3x4;
    -00071         typedef highp_mat4x2            mat4x2;
    -00072         typedef highp_mat4x3            mat4x3;
    -00073         typedef highp_mat4x4            mat4x4;
    -00074 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    -00075         typedef mediump_vec2            vec2;
    -00076         typedef mediump_vec3            vec3;
    -00077         typedef mediump_vec4            vec4;
    -00078         typedef mediump_mat2x2      mat2x2;
    -00079         typedef mediump_mat2x3      mat2x3;
    -00080         typedef mediump_mat2x4      mat2x4;
    -00081         typedef mediump_mat3x2      mat3x2;
    -00082         typedef mediump_mat3x3      mat3x3;
    -00083         typedef mediump_mat3x4      mat3x4;
    -00084         typedef mediump_mat4x2      mat4x2;
    -00085         typedef mediump_mat4x3      mat4x3;
    -00086         typedef mediump_mat4x4      mat4x4;
    -00087 #elif(defined(GLM_PRECISION_LOWP_FLOAT))
    -00088         typedef lowp_vec2                       vec2;
    -00089         typedef lowp_vec3                       vec3;
    -00090         typedef lowp_vec4                       vec4;
    -00091         typedef lowp_mat2x2                     mat2x2;
    -00092         typedef lowp_mat2x3                     mat2x3;
    -00093         typedef lowp_mat2x4                     mat2x4;
    -00094         typedef lowp_mat3x2                     mat3x2;
    -00095         typedef lowp_mat3x3                     mat3x3;
    -00096         typedef lowp_mat3x4                     mat3x4;
    -00097         typedef lowp_mat4x2                     mat4x2;
    -00098         typedef lowp_mat4x3                     mat4x3;
    -00099         typedef lowp_mat4x4                     mat4x4;
    -00100 #else
    -00101 
    -00102 
    -00103 
    -00104         typedef mediump_vec2            vec2;
    -00105 
    -00109         typedef mediump_vec3            vec3;
    -00110 
    -00114         typedef mediump_vec4            vec4;
    -00115 
    -00119         typedef mediump_mat2x2          mat2x2;
    -00120 
    -00124         typedef mediump_mat2x3          mat2x3;
    -00125 
    -00129         typedef mediump_mat2x4          mat2x4;
    -00130 
    -00134         typedef mediump_mat3x2          mat3x2;
    -00135 
    -00139         typedef mediump_mat3x3          mat3x3;
    -00140 
    -00144         typedef mediump_mat3x4          mat3x4;
    -00145 
    -00149         typedef mediump_mat4x2          mat4x2;
    -00150 
    -00154         typedef mediump_mat4x3          mat4x3;
    -00155 
    -00159         typedef mediump_mat4x4          mat4x4;
    -00160 
    -00161 #endif//GLM_PRECISION
    -00162 
    -00166         typedef mat2x2                                                  mat2;
    -00167 
    -00171         typedef mat3x3                                                  mat3;
    -00172 
    -00176         typedef mat4x4                                                  mat4;
    -00177 
    -00179         // Signed integer definition
    -00180 
    -00181 #if(defined(GLM_PRECISION_HIGHP_INT))
    -00182         typedef highp_ivec2                     ivec2;
    -00183         typedef highp_ivec3                     ivec3;
    -00184         typedef highp_ivec4                     ivec4;
    -00185 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -00186         typedef mediump_ivec2           ivec2;
    -00187         typedef mediump_ivec3           ivec3;
    -00188         typedef mediump_ivec4           ivec4;
    -00189 #elif(defined(GLM_PRECISION_LOWP_INT))
    -00190         typedef lowp_ivec2                      ivec2;
    -00191         typedef lowp_ivec3                      ivec3;
    -00192         typedef lowp_ivec4                      ivec4;
    -00193 #else
    -00194 
    -00195 
    -00196 
    -00197         typedef mediump_ivec2           ivec2;
    -00198 
    -00202         typedef mediump_ivec3           ivec3;
    -00203 
    -00207         typedef mediump_ivec4           ivec4;
    -00208 #endif//GLM_PRECISION
    -00209 
    -00211         // Unsigned integer definition
    -00212 
    -00213 #if(defined(GLM_PRECISION_HIGHP_UINT))
    -00214         typedef highp_uvec2                     uvec2;
    -00215         typedef highp_uvec3                     uvec3;
    -00216         typedef highp_uvec4                     uvec4;
    -00217 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    -00218         typedef mediump_uvec2           uvec2;
    -00219         typedef mediump_uvec3           uvec3;
    -00220         typedef mediump_uvec4           uvec4;
    -00221 #elif(defined(GLM_PRECISION_LOWP_UINT))
    -00222         typedef lowp_uvec2                      uvec2;
    -00223         typedef lowp_uvec3                      uvec3;
    -00224         typedef lowp_uvec4                      uvec4;
    -00225 #else
    -00226 
    -00227 
    -00228 
    -00229         typedef mediump_uvec2           uvec2;
    -00230 
    -00234         typedef mediump_uvec3           uvec3;
    -00235 
    -00239         typedef mediump_uvec4           uvec4;
    -00240 #endif//GLM_PRECISION
    -00241 
    -00243         // Boolean definition
    -00244 
    -00248         typedef detail::tvec2<bool>             bvec2;
    -00249 
    -00253         typedef detail::tvec3<bool>             bvec3;
    -00254 
    -00258         typedef detail::tvec4<bool>             bvec4;
    -00259 
    -00261         // Double definition
    -00262 
    -00266         typedef detail::tvec2<double>   dvec2;
    -00267 
    -00271         typedef detail::tvec3<double>   dvec3;
    -00272 
    -00276         typedef detail::tvec4<double>   dvec4;
    -00277 
    -00281         typedef detail::tmat2x2<double> dmat2;
    -00282 
    -00286         typedef detail::tmat3x3<double> dmat3;
    -00287 
    -00291         typedef detail::tmat4x4<double> dmat4;
    -00292 
    -00296         typedef detail::tmat2x2<double> dmat2x2;
    -00297 
    -00301         typedef detail::tmat2x3<double> dmat2x3;
    -00302 
    -00306         typedef detail::tmat2x4<double> dmat2x4;
    -00307 
    -00311         typedef detail::tmat3x2<double> dmat3x2;
    -00312 
    -00316         typedef detail::tmat3x3<double> dmat3x3;
    -00317 
    -00321         typedef detail::tmat3x4<double> dmat3x4;
    -00322 
    -00326         typedef detail::tmat4x2<double> dmat4x2;
    -00327 
    -00331         typedef detail::tmat4x3<double> dmat4x3;
    -00332 
    -00336         typedef detail::tmat4x4<double> dmat4x4;
    -00337 
    -00339 }//namespace glm
    -00340 
    -00341 #endif//glm_core_type
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTX_transform2
    +
    40 #define GLM_GTX_transform2 GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtx/transform.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_transform2 extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename T>
    +
    58  detail::tmat3x3<T> shearX2D(
    +
    59  detail::tmat3x3<T> const & m,
    +
    60  T y);
    +
    61 
    +
    64  template <typename T>
    +
    65  detail::tmat3x3<T> shearY2D(
    +
    66  detail::tmat3x3<T> const & m,
    +
    67  T x);
    +
    68 
    +
    71  template <typename T>
    +
    72  detail::tmat4x4<T> shearX3D(
    +
    73  const detail::tmat4x4<T> & m,
    +
    74  T y,
    +
    75  T z);
    +
    76 
    +
    79  template <typename T>
    +
    80  detail::tmat4x4<T> shearY3D(
    +
    81  const detail::tmat4x4<T> & m,
    +
    82  T x,
    +
    83  T z);
    +
    84 
    +
    87  template <typename T>
    +
    88  detail::tmat4x4<T> shearZ3D(
    +
    89  const detail::tmat4x4<T> & m,
    +
    90  T x,
    +
    91  T y);
    +
    92 
    +
    93  //template <typename T> GLM_FUNC_QUALIFIER detail::tmat4x4<T> shear(const detail::tmat4x4<T> & m, shearPlane, planePoint, angle)
    +
    94  // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0
    +
    95  // - dot(PointOnPlane, normal) * OnPlaneVector 1
    +
    96 
    +
    97  // Reflect functions seem to don't work
    +
    98  //template <typename T> detail::tmat3x3<T> reflect2D(const detail::tmat3x3<T> & m, const detail::tvec3<T>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
    +
    99  //template <typename T> detail::tmat4x4<T> reflect3D(const detail::tmat4x4<T> & m, const detail::tvec3<T>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
    +
    100 
    +
    103  template <typename T>
    +
    104  detail::tmat3x3<T> proj2D(
    +
    105  const detail::tmat3x3<T> & m,
    +
    106  const detail::tvec3<T>& normal);
    +
    107 
    +
    110  template <typename T>
    +
    111  detail::tmat4x4<T> proj3D(
    +
    112  const detail::tmat4x4<T> & m,
    +
    113  const detail::tvec3<T>& normal);
    +
    114 
    +
    117  template <typename valType>
    +
    118  detail::tmat4x4<valType> scaleBias(
    +
    119  valType scale,
    +
    120  valType bias);
    +
    121 
    +
    124  template <typename valType>
    +
    125  detail::tmat4x4<valType> scaleBias(
    +
    126  detail::tmat4x4<valType> const & m,
    +
    127  valType scale,
    +
    128  valType bias);
    +
    129 
    +
    131 }// namespace glm
    +
    132 
    +
    133 #include "transform2.inl"
    +
    134 
    +
    135 #endif//GLM_GTX_transform2
    +
    + - diff --git a/doc/api/a00093.html b/doc/api/a00093.html index a5a9a520..cb445b80 100644 --- a/doc/api/a00093.html +++ b/doc/api/a00093.html @@ -2,42 +2,31 @@ - -type_float.hpp File Reference + +type.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,41 +35,118 @@
  • File List
  • + +
    -
    type_float.hpp File Reference
    -
    +
    type.hpp File Reference
    +

    Go to the source code of this file.

    - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Typedefs

    typedef highp_float_t highp_float
    typedef lowp_float_t lowp_float
    typedef mediump_float_t mediump_float
    typedef detail::tvec2< bool > bvec2
     
    typedef detail::tvec3< bool > bvec3
     
    typedef detail::tvec4< bool > bvec4
     
    typedef detail::tmat2x2< double > dmat2
     
    typedef detail::tmat2x2< double > dmat2x2
     
    typedef detail::tmat2x3< double > dmat2x3
     
    typedef detail::tmat2x4< double > dmat2x4
     
    typedef detail::tmat3x3< double > dmat3
     
    typedef detail::tmat3x2< double > dmat3x2
     
    typedef detail::tmat3x3< double > dmat3x3
     
    typedef detail::tmat3x4< double > dmat3x4
     
    typedef detail::tmat4x4< double > dmat4
     
    typedef detail::tmat4x2< double > dmat4x2
     
    typedef detail::tmat4x3< double > dmat4x3
     
    typedef detail::tmat4x4< double > dmat4x4
     
    typedef detail::tvec2< double > dvec2
     
    typedef detail::tvec3< double > dvec3
     
    typedef detail::tvec4< double > dvec4
     
    typedef mediump_ivec2 ivec2
     
    typedef mediump_ivec3 ivec3
     
    typedef mediump_ivec4 ivec4
     
    typedef mat2x2 mat2
     
    typedef mediump_mat2x2 mat2x2
     
    typedef mediump_mat2x3 mat2x3
     
    typedef mediump_mat2x4 mat2x4
     
    typedef mat3x3 mat3
     
    typedef mediump_mat3x2 mat3x2
     
    typedef mediump_mat3x3 mat3x3
     
    typedef mediump_mat3x4 mat3x4
     
    typedef mat4x4 mat4
     
    typedef mediump_mat4x2 mat4x2
     
    typedef mediump_mat4x3 mat4x3
     
    typedef mediump_mat4x4 mat4x4
     
    typedef mediump_uvec2 uvec2
     
    typedef mediump_uvec3 uvec3
     
    typedef mediump_uvec4 uvec4
     
    typedef mediump_vec2 vec2
     
    typedef mediump_vec3 vec3
     
    typedef mediump_vec4 vec4
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-22 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_float.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-01-08 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type.hpp.

    + + - diff --git a/doc/api/a00093_source.html b/doc/api/a00093_source.html index ce56b448..27adedd2 100644 --- a/doc/api/a00093_source.html +++ b/doc/api/a00093_source.html @@ -2,42 +2,31 @@ - -type_float.hpp Source File + +type.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,86 +35,247 @@
  • File List
  • + +
    -
    type_float.hpp
    -
    +
    type.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_float
    -00030 #define glm_core_type_float
    -00031 
    -00032 #include "type_half.hpp"
    -00033 #include "setup.hpp"
    -00034 
    -00035 namespace glm
    -00036 {
    -00037 #ifdef GLM_USE_HALF_SCALAR
    -00038     typedef detail::half                lowp_float_t;
    -00039 #else//GLM_USE_HALF_SCALAR
    -00040     typedef float                               lowp_float_t;
    -00041 #endif//GLM_USE_HALF_SCALAR
    -00042     typedef float                               mediump_float_t;
    -00043     typedef double                              highp_float_t;
    -00044 
    -00047 
    -00053     typedef lowp_float_t                lowp_float;
    -00054     
    -00060     typedef mediump_float_t     mediump_float;
    -00061     
    -00067     typedef highp_float_t               highp_float;
    -00068 
    -00069 #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -00070         typedef mediump_float                           float_t;
    -00071 #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -00072         typedef highp_float                  float_t;
    -00073 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -00074         typedef mediump_float                           float_t;
    -00075 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
    -00076         typedef lowp_float                                      float_t;
    -00077 #else
    -00078 #       error "GLM error: multiple default precision requested for floating-point types"
    -00079 #endif
    -00080 
    -00082 }//namespace glm
    -00083 
    -00084 #endif//glm_core_type_float
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type
    +
    30 #define glm_core_type
    +
    31 
    +
    32 #include "type_half.hpp"
    +
    33 #include "type_float.hpp"
    +
    34 #include "type_int.hpp"
    +
    35 
    +
    36 #include "type_gentype.hpp"
    +
    37 
    +
    38 #include "type_vec1.hpp"
    +
    39 #include "type_vec2.hpp"
    +
    40 #include "type_vec3.hpp"
    +
    41 #include "type_vec4.hpp"
    +
    42 
    +
    43 #include "type_mat2x2.hpp"
    +
    44 #include "type_mat2x3.hpp"
    +
    45 #include "type_mat2x4.hpp"
    +
    46 #include "type_mat3x2.hpp"
    +
    47 #include "type_mat3x3.hpp"
    +
    48 #include "type_mat3x4.hpp"
    +
    49 #include "type_mat4x2.hpp"
    +
    50 #include "type_mat4x3.hpp"
    +
    51 #include "type_mat4x4.hpp"
    +
    52 
    +
    53 namespace glm
    +
    54 {
    +
    57 
    +
    59  // Float definition
    +
    60 
    +
    61 #if(defined(GLM_PRECISION_HIGHP_FLOAT))
    +
    62  typedef highp_vec2 vec2;
    +
    63  typedef highp_vec3 vec3;
    +
    64  typedef highp_vec4 vec4;
    +
    65  typedef highp_mat2x2 mat2x2;
    +
    66  typedef highp_mat2x3 mat2x3;
    +
    67  typedef highp_mat2x4 mat2x4;
    +
    68  typedef highp_mat3x2 mat3x2;
    +
    69  typedef highp_mat3x3 mat3x3;
    +
    70  typedef highp_mat3x4 mat3x4;
    +
    71  typedef highp_mat4x2 mat4x2;
    +
    72  typedef highp_mat4x3 mat4x3;
    +
    73  typedef highp_mat4x4 mat4x4;
    +
    74 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    +
    75  typedef mediump_vec2 vec2;
    +
    76  typedef mediump_vec3 vec3;
    +
    77  typedef mediump_vec4 vec4;
    +
    78  typedef mediump_mat2x2 mat2x2;
    +
    79  typedef mediump_mat2x3 mat2x3;
    +
    80  typedef mediump_mat2x4 mat2x4;
    +
    81  typedef mediump_mat3x2 mat3x2;
    +
    82  typedef mediump_mat3x3 mat3x3;
    +
    83  typedef mediump_mat3x4 mat3x4;
    +
    84  typedef mediump_mat4x2 mat4x2;
    +
    85  typedef mediump_mat4x3 mat4x3;
    +
    86  typedef mediump_mat4x4 mat4x4;
    +
    87 #elif(defined(GLM_PRECISION_LOWP_FLOAT))
    +
    88  typedef lowp_vec2 vec2;
    +
    89  typedef lowp_vec3 vec3;
    +
    90  typedef lowp_vec4 vec4;
    +
    91  typedef lowp_mat2x2 mat2x2;
    +
    92  typedef lowp_mat2x3 mat2x3;
    +
    93  typedef lowp_mat2x4 mat2x4;
    +
    94  typedef lowp_mat3x2 mat3x2;
    +
    95  typedef lowp_mat3x3 mat3x3;
    +
    96  typedef lowp_mat3x4 mat3x4;
    +
    97  typedef lowp_mat4x2 mat4x2;
    +
    98  typedef lowp_mat4x3 mat4x3;
    +
    99  typedef lowp_mat4x4 mat4x4;
    +
    100 #else
    +
    101 
    +
    102 
    +
    103 
    + +
    105 
    + +
    110 
    + +
    115 
    + +
    120 
    + +
    125 
    + +
    130 
    + +
    135 
    +
    139  typedef mediump_mat3x3 mat3x3;
    +
    140 
    + +
    145 
    + +
    150 
    + +
    155 
    +
    159  typedef mediump_mat4x4 mat4x4;
    +
    160 
    +
    161 #endif//GLM_PRECISION
    +
    162 
    +
    166  typedef mat2x2 mat2;
    +
    167 
    +
    171  typedef mat3x3 mat3;
    +
    172 
    +
    176  typedef mat4x4 mat4;
    +
    177 
    +
    179  // Signed integer definition
    +
    180 
    +
    181 #if(defined(GLM_PRECISION_HIGHP_INT))
    +
    182  typedef highp_ivec2 ivec2;
    +
    183  typedef highp_ivec3 ivec3;
    +
    184  typedef highp_ivec4 ivec4;
    +
    185 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    186  typedef mediump_ivec2 ivec2;
    +
    187  typedef mediump_ivec3 ivec3;
    +
    188  typedef mediump_ivec4 ivec4;
    +
    189 #elif(defined(GLM_PRECISION_LOWP_INT))
    +
    190  typedef lowp_ivec2 ivec2;
    +
    191  typedef lowp_ivec3 ivec3;
    +
    192  typedef lowp_ivec4 ivec4;
    +
    193 #else
    +
    194 
    +
    195 
    +
    196 
    + +
    198 
    + +
    203 
    + +
    208 #endif//GLM_PRECISION
    +
    209 
    +
    211  // Unsigned integer definition
    +
    212 
    +
    213 #if(defined(GLM_PRECISION_HIGHP_UINT))
    +
    214  typedef highp_uvec2 uvec2;
    +
    215  typedef highp_uvec3 uvec3;
    +
    216  typedef highp_uvec4 uvec4;
    +
    217 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    +
    218  typedef mediump_uvec2 uvec2;
    +
    219  typedef mediump_uvec3 uvec3;
    +
    220  typedef mediump_uvec4 uvec4;
    +
    221 #elif(defined(GLM_PRECISION_LOWP_UINT))
    +
    222  typedef lowp_uvec2 uvec2;
    +
    223  typedef lowp_uvec3 uvec3;
    +
    224  typedef lowp_uvec4 uvec4;
    +
    225 #else
    +
    226 
    +
    227 
    +
    228 
    + +
    230 
    + +
    235 
    + +
    240 #endif//GLM_PRECISION
    +
    241 
    +
    243  // Boolean definition
    +
    244 
    +
    248  typedef detail::tvec2<bool> bvec2;
    +
    249 
    +
    253  typedef detail::tvec3<bool> bvec3;
    +
    254 
    +
    258  typedef detail::tvec4<bool> bvec4;
    +
    259 
    +
    261  // Double definition
    +
    262 
    +
    266  typedef detail::tvec2<double> dvec2;
    +
    267 
    +
    271  typedef detail::tvec3<double> dvec3;
    +
    272 
    +
    276  typedef detail::tvec4<double> dvec4;
    +
    277 
    +
    281  typedef detail::tmat2x2<double> dmat2;
    +
    282 
    +
    286  typedef detail::tmat3x3<double> dmat3;
    +
    287 
    +
    291  typedef detail::tmat4x4<double> dmat4;
    +
    292 
    +
    296  typedef detail::tmat2x2<double> dmat2x2;
    +
    297 
    +
    301  typedef detail::tmat2x3<double> dmat2x3;
    +
    302 
    +
    306  typedef detail::tmat2x4<double> dmat2x4;
    +
    307 
    +
    311  typedef detail::tmat3x2<double> dmat3x2;
    +
    312 
    +
    316  typedef detail::tmat3x3<double> dmat3x3;
    +
    317 
    +
    321  typedef detail::tmat3x4<double> dmat3x4;
    +
    322 
    +
    326  typedef detail::tmat4x2<double> dmat4x2;
    +
    327 
    +
    331  typedef detail::tmat4x3<double> dmat4x3;
    +
    332 
    +
    336  typedef detail::tmat4x4<double> dmat4x4;
    +
    337 
    +
    339 }//namespace glm
    +
    340 
    +
    341 #endif//glm_core_type
    +
    + - diff --git a/doc/api/a00094.html b/doc/api/a00094.html index af98041f..1d7b0cca 100644 --- a/doc/api/a00094.html +++ b/doc/api/a00094.html @@ -2,42 +2,31 @@ - -type_gentype.hpp File Reference + +type_float.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,46 @@
  • File List
  • + +
    +
    -
    type_gentype.hpp File Reference
    -
    +
    type_float.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    + + + + + + + + +

    +Typedefs

    typedef highp_float_t highp_float
     
    typedef lowp_float_t lowp_float
     
    typedef mediump_float_t mediump_float
     
    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-10-05 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_gentype.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-08-22 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_float.hpp.

    + + - diff --git a/doc/api/a00094_source.html b/doc/api/a00094_source.html index cc6a4f82..10e8d1d4 100644 --- a/doc/api/a00094_source.html +++ b/doc/api/a00094_source.html @@ -2,42 +2,31 @@ - -type_gentype.hpp Source File + +type_float.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,183 +35,88 @@
  • File List
  • + +
    -
    type_gentype.hpp
    -
    +
    type_float.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_gentype
    -00030 #define glm_core_type_gentype
    -00031 
    -00032 #include "type_size.hpp"
    -00033 
    -00034 namespace glm
    -00035 {
    -00036         enum profile
    -00037         {
    -00038                 nice,
    -00039                 fast,
    -00040                 simd
    -00041         };
    -00042 
    -00043 namespace detail
    -00044 {
    -00045         template
    -00046         <
    -00047                 typename VALTYPE, 
    -00048                 template <typename> class TYPE
    -00049         >
    -00050         struct genType
    -00051         {
    -00052         public:
    -00053                 enum ctor{null};
    -00054 
    -00055                 typedef VALTYPE value_type;
    -00056                 typedef VALTYPE & value_reference;
    -00057                 typedef VALTYPE * value_pointer;
    -00058                 typedef VALTYPE const * value_const_pointer;
    -00059                 typedef TYPE<bool> bool_type;
    -00060 
    -00061                 typedef sizeType size_type;
    -00062                 static bool is_vector();
    -00063                 static bool is_matrix();
    -00064                 
    -00065                 typedef TYPE<VALTYPE> type;
    -00066                 typedef TYPE<VALTYPE> * pointer;
    -00067                 typedef TYPE<VALTYPE> const * const_pointer;
    -00068                 typedef TYPE<VALTYPE> const * const const_pointer_const;
    -00069                 typedef TYPE<VALTYPE> * const pointer_const;
    -00070                 typedef TYPE<VALTYPE> & reference;
    -00071                 typedef TYPE<VALTYPE> const & const_reference;
    -00072                 typedef TYPE<VALTYPE> const & param_type;
    -00073 
    -00075                 // Address (Implementation details)
    -00076 
    -00077                 value_const_pointer value_address() const{return value_pointer(this);}
    -00078                 value_pointer value_address(){return value_pointer(this);}
    -00079 
    -00080         //protected:
    -00081         //      enum kind
    -00082         //      {
    -00083         //              GEN_TYPE,
    -00084         //              VEC_TYPE,
    -00085         //              MAT_TYPE
    -00086         //      };
    -00087 
    -00088         //      typedef typename TYPE::kind kind;
    -00089         };
    -00090 
    -00091         template
    -00092         <
    -00093                 typename VALTYPE, 
    -00094                 template <typename> class TYPE
    -00095         >
    -00096         bool genType<VALTYPE, TYPE>::is_vector()
    -00097         {
    -00098                 return true;
    -00099         }
    -00100 /*
    -00101         template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
    -00102         class base
    -00103         {
    -00104         public:
    -00106                 // Traits
    -00107 
    -00108                 typedef sizeType                                                        size_type;
    -00109                 typedef valTypeT                                                        value_type;
    -00110 
    -00111                 typedef base<value_type, colT, rowT>            class_type;
    -00112 
    -00113                 typedef base<bool, colT, rowT>                          bool_type;
    -00114                 typedef base<value_type, rowT, 1>                       col_type;
    -00115                 typedef base<value_type, colT, 1>                       row_type;
    -00116                 typedef base<value_type, rowT, colT>            transpose_type;
    -00117 
    -00118                 static size_type                                                        col_size();
    -00119                 static size_type                                                        row_size();
    -00120                 static size_type                                                        value_size();
    -00121                 static bool                                                                     is_scalar();
    -00122                 static bool                                                                     is_vector();
    -00123                 static bool                                                                     is_matrix();
    -00124 
    -00125         private:
    -00126                 // Data 
    -00127                 col_type value[colT];           
    -00128 
    -00129         public:
    -00131                 // Constructors
    -00132                 base();
    -00133                 base(class_type const & m);
    -00134 
    -00135                 explicit base(value_type const & x);
    -00136                 explicit base(value_type const * const x);
    -00137                 explicit base(col_type const * const x);
    -00138 
    -00140                 // Conversions
    -00141                 template <typename vU, uint cU, uint rU, profile pU>
    -00142                 explicit base(base<vU, cU, rU, pU> const & m);
    -00143 
    -00145                 // Accesses
    -00146                 col_type& operator[](size_type i);
    -00147                 col_type const & operator[](size_type i) const;
    -00148 
    -00150                 // Unary updatable operators
    -00151                 class_type& operator=  (class_type const & x);
    -00152                 class_type& operator+= (value_type const & x);
    -00153                 class_type& operator+= (class_type const & x);
    -00154                 class_type& operator-= (value_type const & x);
    -00155                 class_type& operator-= (class_type const & x);
    -00156                 class_type& operator*= (value_type const & x);
    -00157                 class_type& operator*= (class_type const & x);
    -00158                 class_type& operator/= (value_type const & x);
    -00159                 class_type& operator/= (class_type const & x);
    -00160                 class_type& operator++ ();
    -00161                 class_type& operator-- ();
    -00162         };
    -00163 */
    -00164         }//namespace detail
    -00165 }//namespace glm
    -00166 
    -00167 //#include "type_gentype.inl"
    -00168 
    -00169 #endif//glm_core_type_gentype
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_float
    +
    30 #define glm_core_type_float
    +
    31 
    +
    32 #include "type_half.hpp"
    +
    33 #include "setup.hpp"
    +
    34 
    +
    35 namespace glm
    +
    36 {
    +
    37 #ifdef GLM_USE_HALF_SCALAR
    +
    38  typedef detail::half lowp_float_t;
    +
    39 #else//GLM_USE_HALF_SCALAR
    +
    40  typedef float lowp_float_t;
    +
    41 #endif//GLM_USE_HALF_SCALAR
    +
    42  typedef float mediump_float_t;
    +
    43  typedef double highp_float_t;
    +
    44 
    +
    47 
    +
    53  typedef lowp_float_t lowp_float;
    +
    54 
    +
    60  typedef mediump_float_t mediump_float;
    +
    61 
    +
    67  typedef highp_float_t highp_float;
    +
    68 
    +
    69 #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    70  typedef mediump_float float_t;
    +
    71 #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    72  typedef highp_float float_t;
    +
    73 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    74  typedef mediump_float float_t;
    +
    75 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
    +
    76  typedef lowp_float float_t;
    +
    77 #else
    +
    78 # error "GLM error: multiple default precision requested for floating-point types"
    +
    79 #endif
    +
    80 
    +
    82 }//namespace glm
    +
    83 
    +
    84 #endif//glm_core_type_float
    +
    + - diff --git a/doc/api/a00095.html b/doc/api/a00095.html index 9ba29790..ef1cad82 100644 --- a/doc/api/a00095.html +++ b/doc/api/a00095.html @@ -2,42 +2,31 @@ - -type_half.hpp File Reference + +type_gentype.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,40 +35,34 @@
  • File List
  • + +
    -
    -
    type_half.hpp File Reference
    -
    +
    type_gentype.hpp File Reference
    +

    Go to the source code of this file.

    - - - - -

    -Classes

    class  half
     16-bit floating point type. More...
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-17 / 2011-09-20
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_half.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-10-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_gentype.hpp.

    + + - diff --git a/doc/api/a00095_source.html b/doc/api/a00095_source.html index 8110b0f8..38eb2556 100644 --- a/doc/api/a00095_source.html +++ b/doc/api/a00095_source.html @@ -2,42 +2,31 @@ - -type_half.hpp Source File + +type_gentype.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,137 +35,185 @@
  • File List
  • + +
    -
    type_half.hpp
    -
    +
    type_gentype.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_half
    -00030 #define glm_core_type_half
    -00031 
    -00032 #include <cstdlib>
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         typedef short hdata;
    -00038 
    -00039         float toFloat32(hdata value);
    -00040         hdata toFloat16(float const & value);
    -00041 
    -00044         class half
    -00045         {
    -00046         public: 
    -00047                 // Constructors
    -00048                 GLM_FUNC_DECL half();
    -00049                 GLM_FUNC_DECL half(half const & s);
    -00050                         
    -00051                 template <typename U>
    -00052                 GLM_FUNC_DECL explicit half(U const & s);
    -00053 
    -00054                 // Cast
    -00055                 template <typename U>
    -00056                 GLM_FUNC_DECL operator U() const;
    -00057 
    -00058                 // Unary updatable operators
    -00059                 GLM_FUNC_DECL half& operator= (half const & s);
    -00060                 GLM_FUNC_DECL half& operator+=(half const & s);
    -00061                 GLM_FUNC_DECL half& operator-=(half const & s);
    -00062                 GLM_FUNC_DECL half& operator*=(half const & s);
    -00063                 GLM_FUNC_DECL half& operator/=(half const & s);
    -00064                 GLM_FUNC_DECL half& operator++();
    -00065                 GLM_FUNC_DECL half& operator--();
    -00066         
    -00067                 GLM_FUNC_DECL float toFloat() const{return toFloat32(data);}
    -00068 
    -00069                 GLM_FUNC_DECL hdata _data() const{return data;}
    -00070 
    -00071         private:
    -00072                 hdata data;
    -00073         };
    -00074 
    -00075         half operator+ (half const & s1, half const & s2);
    -00076 
    -00077         half operator- (half const & s1, half const & s2);
    -00078 
    -00079         half operator* (half const & s1, half const & s2);
    -00080 
    -00081         half operator/ (half const & s1, half const & s2);
    -00082 
    -00083         // Unary constant operators
    -00084         half operator- (half const & s);
    -00085 
    -00086         half operator-- (half const & s, int);
    -00087 
    -00088         half operator++ (half const & s, int);
    -00089 
    -00090         bool operator==(
    -00091                 detail::half const & x, 
    -00092                 detail::half const & y);
    -00093 
    -00094         bool operator!=(
    -00095                 detail::half const & x, 
    -00096                 detail::half const & y);
    -00097 
    -00098         bool operator<(
    -00099                 detail::half const & x, 
    -00100                 detail::half const & y);
    -00101 
    -00102         bool operator<=(
    -00103                 detail::half const & x, 
    -00104                 detail::half const & y);
    -00105 
    -00106         bool operator>(
    -00107                 detail::half const & x, 
    -00108                 detail::half const & y);
    -00109 
    -00110         bool operator>=(
    -00111                 detail::half const & x, 
    -00112                 detail::half const & y);
    -00113 
    -00114 }//namespace detail
    -00115 }//namespace glm
    -00116 
    -00117 #include "type_half.inl"
    -00118 
    -00119 #endif//glm_core_type_half
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_gentype
    +
    30 #define glm_core_type_gentype
    +
    31 
    +
    32 #include "type_size.hpp"
    +
    33 
    +
    34 namespace glm
    +
    35 {
    +
    36  enum profile
    +
    37  {
    +
    38  nice,
    +
    39  fast,
    +
    40  simd
    +
    41  };
    +
    42 
    +
    43 namespace detail
    +
    44 {
    +
    45  template
    +
    46  <
    +
    47  typename VALTYPE,
    +
    48  template <typename> class TYPE
    +
    49  >
    +
    50  struct genType
    +
    51  {
    +
    52  public:
    +
    53  enum ctor{null};
    +
    54 
    +
    55  typedef VALTYPE value_type;
    +
    56  typedef VALTYPE & value_reference;
    +
    57  typedef VALTYPE * value_pointer;
    +
    58  typedef VALTYPE const * value_const_pointer;
    +
    59  typedef TYPE<bool> bool_type;
    +
    60 
    +
    61  typedef sizeType size_type;
    +
    62  static bool is_vector();
    +
    63  static bool is_matrix();
    +
    64 
    +
    65  typedef TYPE<VALTYPE> type;
    +
    66  typedef TYPE<VALTYPE> * pointer;
    +
    67  typedef TYPE<VALTYPE> const * const_pointer;
    +
    68  typedef TYPE<VALTYPE> const * const const_pointer_const;
    +
    69  typedef TYPE<VALTYPE> * const pointer_const;
    +
    70  typedef TYPE<VALTYPE> & reference;
    +
    71  typedef TYPE<VALTYPE> const & const_reference;
    +
    72  typedef TYPE<VALTYPE> const & param_type;
    +
    73 
    +
    75  // Address (Implementation details)
    +
    76 
    +
    77  value_const_pointer value_address() const{return value_pointer(this);}
    +
    78  value_pointer value_address(){return value_pointer(this);}
    +
    79 
    +
    80  //protected:
    +
    81  // enum kind
    +
    82  // {
    +
    83  // GEN_TYPE,
    +
    84  // VEC_TYPE,
    +
    85  // MAT_TYPE
    +
    86  // };
    +
    87 
    +
    88  // typedef typename TYPE::kind kind;
    +
    89  };
    +
    90 
    +
    91  template
    +
    92  <
    +
    93  typename VALTYPE,
    +
    94  template <typename> class TYPE
    +
    95  >
    +
    96  bool genType<VALTYPE, TYPE>::is_vector()
    +
    97  {
    +
    98  return true;
    +
    99  }
    +
    100 /*
    +
    101  template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
    +
    102  class base
    +
    103  {
    +
    104  public:
    +
    106  // Traits
    +
    107 
    +
    108  typedef sizeType size_type;
    +
    109  typedef valTypeT value_type;
    +
    110 
    +
    111  typedef base<value_type, colT, rowT> class_type;
    +
    112 
    +
    113  typedef base<bool, colT, rowT> bool_type;
    +
    114  typedef base<value_type, rowT, 1> col_type;
    +
    115  typedef base<value_type, colT, 1> row_type;
    +
    116  typedef base<value_type, rowT, colT> transpose_type;
    +
    117 
    +
    118  static size_type col_size();
    +
    119  static size_type row_size();
    +
    120  static size_type value_size();
    +
    121  static bool is_scalar();
    +
    122  static bool is_vector();
    +
    123  static bool is_matrix();
    +
    124 
    +
    125  private:
    +
    126  // Data
    +
    127  col_type value[colT];
    +
    128 
    +
    129  public:
    +
    131  // Constructors
    +
    132  base();
    +
    133  base(class_type const & m);
    +
    134 
    +
    135  explicit base(value_type const & x);
    +
    136  explicit base(value_type const * const x);
    +
    137  explicit base(col_type const * const x);
    +
    138 
    +
    140  // Conversions
    +
    141  template <typename vU, uint cU, uint rU, profile pU>
    +
    142  explicit base(base<vU, cU, rU, pU> const & m);
    +
    143 
    +
    145  // Accesses
    +
    146  col_type& operator[](size_type i);
    +
    147  col_type const & operator[](size_type i) const;
    +
    148 
    +
    150  // Unary updatable operators
    +
    151  class_type& operator= (class_type const & x);
    +
    152  class_type& operator+= (value_type const & x);
    +
    153  class_type& operator+= (class_type const & x);
    +
    154  class_type& operator-= (value_type const & x);
    +
    155  class_type& operator-= (class_type const & x);
    +
    156  class_type& operator*= (value_type const & x);
    +
    157  class_type& operator*= (class_type const & x);
    +
    158  class_type& operator/= (value_type const & x);
    +
    159  class_type& operator/= (class_type const & x);
    +
    160  class_type& operator++ ();
    +
    161  class_type& operator-- ();
    +
    162  };
    +
    163 */
    +
    164  }//namespace detail
    +
    165 }//namespace glm
    +
    166 
    +
    167 //#include "type_gentype.inl"
    +
    168 
    +
    169 #endif//glm_core_type_gentype
    +
    + - diff --git a/doc/api/a00096.html b/doc/api/a00096.html index bcbe1263..3dd3116e 100644 --- a/doc/api/a00096.html +++ b/doc/api/a00096.html @@ -2,42 +2,31 @@ - -type_int.hpp File Reference + +type_half.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,34 @@
  • File List
  • + +
    -
    -
    type_int.hpp File Reference
    -
    +
    type_half.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - -

    -Typedefs

    typedef detail::highp_int_t highp_int
    typedef detail::highp_uint_t highp_uint
    typedef detail::lowp_int_t lowp_int
    typedef detail::lowp_uint_t lowp_uint
    typedef detail::mediump_int_t mediump_int
    typedef detail::mediump_uint_t mediump_uint
    typedef uint_t uint
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-22 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_int.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-08-17 / 2011-09-20
    +
    Author
    Christophe Riccio
    +

    Definition in file type_half.hpp.

    + + - diff --git a/doc/api/a00096_source.html b/doc/api/a00096_source.html index 0d8563f4..4c9adc00 100644 --- a/doc/api/a00096_source.html +++ b/doc/api/a00096_source.html @@ -2,42 +2,31 @@ - -type_int.hpp Source File + +type_half.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,121 +35,139 @@
  • File List
  • + +
    -
    type_int.hpp
    -
    +
    type_half.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_int
    -00030 #define glm_core_type_int
    -00031 
    -00032 #include "setup.hpp"
    -00033 #include "_detail.hpp"
    -00034 
    -00035 namespace glm{
    -00036 namespace detail
    -00037 {
    -00038         typedef signed short                    lowp_int_t;
    -00039         typedef signed int                              mediump_int_t;
    -00040         typedef sint64                                  highp_int_t;
    -00041 
    -00042         typedef unsigned short                  lowp_uint_t;
    -00043         typedef unsigned int                    mediump_uint_t;
    -00044         typedef uint64                                  highp_uint_t;
    -00045 
    -00046         GLM_DETAIL_IS_INT(signed char);
    -00047         GLM_DETAIL_IS_INT(signed short);
    -00048         GLM_DETAIL_IS_INT(signed int);
    -00049         GLM_DETAIL_IS_INT(signed long);
    -00050         GLM_DETAIL_IS_INT(highp_int_t);
    -00051 
    -00052         GLM_DETAIL_IS_UINT(unsigned char);
    -00053         GLM_DETAIL_IS_UINT(unsigned short);
    -00054         GLM_DETAIL_IS_UINT(unsigned int);
    -00055         GLM_DETAIL_IS_UINT(unsigned long);
    -00056         GLM_DETAIL_IS_UINT(highp_uint_t);
    -00057 }//namespace detail
    -00058 
    -00061 
    -00067         typedef detail::lowp_int_t                              lowp_int;
    -00068     
    -00074         typedef detail::mediump_int_t                   mediump_int;
    -00075     
    -00081         typedef detail::highp_int_t                             highp_int;
    -00082 
    -00088         typedef detail::lowp_uint_t                             lowp_uint;
    -00089     
    -00095         typedef detail::mediump_uint_t                  mediump_uint;
    -00096     
    -00102         typedef detail::highp_uint_t                            highp_uint;
    -00103 
    -00104 #if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    -00105         typedef mediump_int                 int_t;
    -00106 #elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    -00107         typedef highp_int                                       int_t;
    -00108 #elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    -00109         typedef mediump_int                 int_t;
    -00110 #elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
    -00111         typedef lowp_int                                        int_t;
    -00112 #else
    -00113 #       error "GLM error: multiple default precision requested for signed interger types"
    -00114 #endif
    -00115 
    -00116 #if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    -00117         typedef mediump_uint                            uint_t;
    -00118 #elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    -00119         typedef highp_uint                                      uint_t;
    -00120 #elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    -00121         typedef mediump_uint                            uint_t;
    -00122 #elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
    -00123         typedef lowp_uint                                       uint_t;
    -00124 #else
    -00125 #       error "GLM error: multiple default precision requested for unsigned interger types"
    -00126 #endif
    -00127 
    -00131         typedef uint_t                                                          uint;
    -00132 
    -00134 
    -00135 }//namespace glm
    -00136 
    -00137 #endif//glm_core_type_int
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_half
    +
    30 #define glm_core_type_half
    +
    31 
    +
    32 #include <cstdlib>
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  typedef short hdata;
    +
    38 
    +
    39  float toFloat32(hdata value);
    +
    40  hdata toFloat16(float const & value);
    +
    41 
    +
    42  class half
    +
    43  {
    +
    44  public:
    +
    45  // Constructors
    +
    46  GLM_FUNC_DECL half();
    +
    47  GLM_FUNC_DECL half(half const & s);
    +
    48 
    +
    49  template <typename U>
    +
    50  GLM_FUNC_DECL explicit half(U const & s);
    +
    51 
    +
    52  // Cast
    +
    53  template <typename U>
    +
    54  GLM_FUNC_DECL operator U() const;
    +
    55 
    +
    56  // Unary updatable operators
    +
    57  GLM_FUNC_DECL half& operator= (half const & s);
    +
    58  GLM_FUNC_DECL half& operator+=(half const & s);
    +
    59  GLM_FUNC_DECL half& operator-=(half const & s);
    +
    60  GLM_FUNC_DECL half& operator*=(half const & s);
    +
    61  GLM_FUNC_DECL half& operator/=(half const & s);
    +
    62  GLM_FUNC_DECL half& operator++();
    +
    63  GLM_FUNC_DECL half& operator--();
    +
    64 
    +
    65  GLM_FUNC_DECL float toFloat() const{return toFloat32(data);}
    +
    66 
    +
    67  GLM_FUNC_DECL hdata _data() const{return data;}
    +
    68 
    +
    69  private:
    +
    70  hdata data;
    +
    71  };
    +
    72 
    +
    73  half operator+ (half const & s1, half const & s2);
    +
    74 
    +
    75  half operator- (half const & s1, half const & s2);
    +
    76 
    +
    77  half operator* (half const & s1, half const & s2);
    +
    78 
    +
    79  half operator/ (half const & s1, half const & s2);
    +
    80 
    +
    81  // Unary constant operators
    +
    82  half operator- (half const & s);
    +
    83 
    +
    84  half operator-- (half const & s, int);
    +
    85 
    +
    86  half operator++ (half const & s, int);
    +
    87 
    +
    88  bool operator==(
    +
    89  detail::half const & x,
    +
    90  detail::half const & y);
    +
    91 
    +
    92  bool operator!=(
    +
    93  detail::half const & x,
    +
    94  detail::half const & y);
    +
    95 
    +
    96  bool operator<(
    +
    97  detail::half const & x,
    +
    98  detail::half const & y);
    +
    99 
    +
    100  bool operator<=(
    +
    101  detail::half const & x,
    +
    102  detail::half const & y);
    +
    103 
    +
    104  bool operator>(
    +
    105  detail::half const & x,
    +
    106  detail::half const & y);
    +
    107 
    +
    108  bool operator>=(
    +
    109  detail::half const & x,
    +
    110  detail::half const & y);
    +
    111 
    +
    112 }//namespace detail
    +
    113 }//namespace glm
    +
    114 
    +
    115 #include "type_half.inl"
    +
    116 
    +
    117 #endif//glm_core_type_half
    +
    + - diff --git a/doc/api/a00097.html b/doc/api/a00097.html index 011a4650..71ec265c 100644 --- a/doc/api/a00097.html +++ b/doc/api/a00097.html @@ -2,42 +2,31 @@ - -type_mat.hpp File Reference + +type_int.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,54 @@
  • File List
  • + +
    +
    -
    type_mat.hpp File Reference
    -
    +
    type_int.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef detail::highp_int_t highp_int
     
    typedef detail::highp_uint_t highp_uint
     
    typedef detail::lowp_int_t lowp_int
     
    typedef detail::lowp_uint_t lowp_uint
     
    typedef detail::mediump_int_t mediump_int
     
    typedef detail::mediump_uint_t mediump_uint
     
    typedef uint_t uint
     
    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2010-01-26 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-08-22 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_int.hpp.

    + + - diff --git a/doc/api/a00097_source.html b/doc/api/a00097_source.html index eb01870c..98b9dc89 100644 --- a/doc/api/a00097_source.html +++ b/doc/api/a00097_source.html @@ -2,42 +2,31 @@ - -type_mat.hpp Source File + +type_int.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,95 +35,122 @@
  • File List
  • + +
    -
    type_mat.hpp
    -
    +
    type_int.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat
    -00030 #define glm_core_type_mat
    -00031 
    -00032 #include "type_gentype.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         //template 
    -00038         //<
    -00039         //      typename T, 
    -00040         //      template <typename> class C, 
    -00041         //      template <typename> class R
    -00042         //>
    -00043         //struct matType
    -00044         //{
    -00045         //      enum ctor{null};
    -00046         //      typedef T value_type;
    -00047         //      typedef std::size_t size_type;
    -00048         //      typedef C<T> col_type;
    -00049         //      typedef R<T> row_type;
    -00050         //      static size_type const col_size;
    -00051         //      static size_type const row_size;
    -00052         //};
    -00053 
    -00054         //template 
    -00055         //<
    -00056         //      typename T, 
    -00057         //      template <typename> class C, 
    -00058         //      template <typename> class R
    -00059         //>
    -00060         //typename matType<T, C, R>::size_type const 
    -00061         //matType<T, C, R>::col_size = matType<T, C, R>::col_type::value_size;
    -00062 
    -00063         //template 
    -00064         //<
    -00065         //      typename T, 
    -00066         //      template <typename> class C, 
    -00067         //      template <typename> class R
    -00068         //>
    -00069         //typename matType<T, C, R>::size_type const 
    -00070         //matType<T, C, R>::row_size = matType<T, C, R>::row_type::value_size;
    -00071 
    -00072 }//namespace detail
    -00073 }//namespace glm
    -00074 
    -00075 #endif//glm_core_type_mat
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_int
    +
    30 #define glm_core_type_int
    +
    31 
    +
    32 #include "setup.hpp"
    +
    33 #include "_detail.hpp"
    +
    34 
    +
    35 namespace glm{
    +
    36 namespace detail
    +
    37 {
    +
    38  typedef signed short lowp_int_t;
    +
    39  typedef signed int mediump_int_t;
    +
    40  typedef sint64 highp_int_t;
    +
    41 
    +
    42  typedef unsigned short lowp_uint_t;
    +
    43  typedef unsigned int mediump_uint_t;
    +
    44  typedef uint64 highp_uint_t;
    +
    45 
    +
    46  GLM_DETAIL_IS_INT(signed char);
    +
    47  GLM_DETAIL_IS_INT(signed short);
    +
    48  GLM_DETAIL_IS_INT(signed int);
    +
    49  GLM_DETAIL_IS_INT(signed long);
    +
    50  GLM_DETAIL_IS_INT(highp_int_t);
    +
    51 
    +
    52  GLM_DETAIL_IS_UINT(unsigned char);
    +
    53  GLM_DETAIL_IS_UINT(unsigned short);
    +
    54  GLM_DETAIL_IS_UINT(unsigned int);
    +
    55  GLM_DETAIL_IS_UINT(unsigned long);
    +
    56  GLM_DETAIL_IS_UINT(highp_uint_t);
    +
    57 }//namespace detail
    +
    58 
    +
    61 
    +
    67  typedef detail::lowp_int_t lowp_int;
    +
    68 
    +
    74  typedef detail::mediump_int_t mediump_int;
    +
    75 
    +
    81  typedef detail::highp_int_t highp_int;
    +
    82 
    +
    88  typedef detail::lowp_uint_t lowp_uint;
    +
    89 
    +
    95  typedef detail::mediump_uint_t mediump_uint;
    +
    96 
    +
    102  typedef detail::highp_uint_t highp_uint;
    +
    103 
    +
    104 #if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    +
    105  typedef mediump_int int_t;
    +
    106 #elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    +
    107  typedef highp_int int_t;
    +
    108 #elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    +
    109  typedef mediump_int int_t;
    +
    110 #elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
    +
    111  typedef lowp_int int_t;
    +
    112 #else
    +
    113 # error "GLM error: multiple default precision requested for signed interger types"
    +
    114 #endif
    +
    115 
    +
    116 #if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    +
    117  typedef mediump_uint uint_t;
    +
    118 #elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    +
    119  typedef highp_uint uint_t;
    +
    120 #elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    +
    121  typedef mediump_uint uint_t;
    +
    122 #elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
    +
    123  typedef lowp_uint uint_t;
    +
    124 #else
    +
    125 # error "GLM error: multiple default precision requested for unsigned interger types"
    +
    126 #endif
    +
    127 
    +
    131  typedef uint_t uint;
    +
    132 
    +
    134 }//namespace glm
    +
    135 
    +
    136 #endif//glm_core_type_int
    +
    + - diff --git a/doc/api/a00098.html b/doc/api/a00098.html index 630e7e4b..95a5e42d 100644 --- a/doc/api/a00098.html +++ b/doc/api/a00098.html @@ -2,42 +2,31 @@ - -type_mat2x2.hpp File Reference + +type_mat.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,50 +35,34 @@
  • File List
  • + +
    -
    -
    type_mat2x2.hpp File Reference
    -
    +
    type_mat.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - -

    -Typedefs

    typedef detail::tmat2x2
    -< highp_float > 
    highp_mat2
    typedef detail::tmat2x2
    -< highp_float > 
    highp_mat2x2
    typedef detail::tmat2x2
    -< lowp_float > 
    lowp_mat2
    typedef detail::tmat2x2
    -< lowp_float > 
    lowp_mat2x2
    typedef detail::tmat2x2
    -< mediump_float > 
    mediump_mat2
    typedef detail::tmat2x2
    -< mediump_float > 
    mediump_mat2x2
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2005-01-27 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat2x2.hpp.

    -
    - +

    GLM Core

    +
    Date
    2010-01-26 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat.hpp.

    + + - diff --git a/doc/api/a00098_source.html b/doc/api/a00098_source.html index 96a6a2f9..59e86c78 100644 --- a/doc/api/a00098_source.html +++ b/doc/api/a00098_source.html @@ -2,42 +2,31 @@ - -type_mat2x2.hpp Source File + +type_mat.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,298 +35,97 @@
  • File List
  • + +
    -
    type_mat2x2.hpp
    -
    +
    type_mat.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat2x2
    -00030 #define glm_core_type_mat2x2
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // @brief Template for 2 * 2 matrix of floating-point numbers.
    -00052         // @ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat2x2
    -00055         {
    -00056                 // Implementation detail
    -00057                 enum ctor{null};
    -00058                 typedef T value_type;
    -00059                 typedef std::size_t size_type;
    -00060                 typedef tvec2<T> col_type;
    -00061                 typedef tvec2<T> row_type;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat2x2<T> type;
    -00066                 typedef tmat2x2<T> transpose_type;
    -00067         
    -00068                 GLM_FUNC_DECL size_type length() const;
    -00069         
    -00070         public:
    -00071                 // Implementation detail
    -00072                 GLM_FUNC_DECL tmat2x2<T> _inverse() const;
    -00073 
    -00074         private:
    -00076                 // Implementation detail
    -00077                 col_type value[2];
    -00078         
    -00079         public:
    -00081                 // Constructors
    -00082                 GLM_FUNC_DECL tmat2x2();
    -00083                 GLM_FUNC_DECL tmat2x2(
    -00084                         tmat2x2 const & m);
    -00085 
    -00086                 GLM_FUNC_DECL explicit tmat2x2(
    -00087                         ctor Null);
    -00088                 GLM_FUNC_DECL explicit tmat2x2(
    -00089                         value_type const & x);
    -00090                 GLM_FUNC_DECL explicit tmat2x2(
    -00091                         value_type const & x1, value_type const & y1, 
    -00092                         value_type const & x2, value_type const & y2);
    -00093                 GLM_FUNC_DECL explicit tmat2x2(
    -00094                         col_type const & v1, 
    -00095                         col_type const & v2);
    -00096 
    -00098                 // Conversions
    -00099                 template <typename U> 
    -00100                 GLM_FUNC_DECL explicit tmat2x2(
    -00101                         U const & x);
    -00102 
    -00103                 template <typename U, typename V, typename M, typename N> 
    -00104                 GLM_FUNC_DECL explicit tmat2x2(
    -00105                         U const & x1, V const & y1, 
    -00106                         M const & x2, N const & y2);
    -00107                         
    -00108                 template <typename U, typename V> 
    -00109                 GLM_FUNC_DECL explicit tmat2x2(
    -00110                         tvec2<U> const & v1, 
    -00111                         tvec2<V> const & v2);
    -00112 
    -00114                 // Matrix conversions
    -00115                 template <typename U> 
    -00116                 GLM_FUNC_DECL explicit tmat2x2(tmat2x2<U> const & m);
    -00117 
    -00118                 GLM_FUNC_DECL explicit tmat2x2(tmat3x3<T> const & x);
    -00119                 GLM_FUNC_DECL explicit tmat2x2(tmat4x4<T> const & x);
    -00120                 GLM_FUNC_DECL explicit tmat2x2(tmat2x3<T> const & x);
    -00121                 GLM_FUNC_DECL explicit tmat2x2(tmat3x2<T> const & x);
    -00122                 GLM_FUNC_DECL explicit tmat2x2(tmat2x4<T> const & x);
    -00123                 GLM_FUNC_DECL explicit tmat2x2(tmat4x2<T> const & x);
    -00124                 GLM_FUNC_DECL explicit tmat2x2(tmat3x4<T> const & x);
    -00125                 GLM_FUNC_DECL explicit tmat2x2(tmat4x3<T> const & x);
    -00126 
    -00128                 // Accesses
    -00129 
    -00130                 GLM_FUNC_DECL col_type & operator[](size_type i);
    -00131                 GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    -00132 
    -00133                 // Unary updatable operators
    -00134                 GLM_FUNC_DECL tmat2x2<T> & operator=(tmat2x2<T> const & m);
    -00135                 template <typename U> 
    -00136                 GLM_FUNC_DECL tmat2x2<T> & operator=(tmat2x2<U> const & m);
    -00137                 template <typename U> 
    -00138                 GLM_FUNC_DECL tmat2x2<T> & operator+=(U const & s);
    -00139                 template <typename U> 
    -00140                 GLM_FUNC_DECL tmat2x2<T> & operator+=(tmat2x2<U> const & m);
    -00141                 template <typename U> 
    -00142                 GLM_FUNC_DECL tmat2x2<T> & operator-=(U const & s);
    -00143                 template <typename U> 
    -00144                 GLM_FUNC_DECL tmat2x2<T> & operator-=(tmat2x2<U> const & m);
    -00145                 template <typename U> 
    -00146                 GLM_FUNC_DECL tmat2x2<T> & operator*=(U const & s);
    -00147                 template <typename U> 
    -00148                 GLM_FUNC_DECL tmat2x2<T> & operator*=(tmat2x2<U> const & m);
    -00149                 template <typename U> 
    -00150                 GLM_FUNC_DECL tmat2x2<T> & operator/=(U const & s);
    -00151                 template <typename U> 
    -00152                 GLM_FUNC_DECL tmat2x2<T> & operator/=(tmat2x2<U> const & m);
    -00153                 GLM_FUNC_DECL tmat2x2<T> & operator++();
    -00154                 GLM_FUNC_DECL tmat2x2<T> & operator--();
    -00155         };
    -00156 
    -00157         // Binary operators
    -00158         template <typename T> 
    -00159         tmat2x2<T> operator+ (
    -00160                 tmat2x2<T> const & m, 
    -00161                 typename tmat2x2<T>::value_type const & s);
    -00162 
    -00163         template <typename T> 
    -00164         tmat2x2<T> operator+ (
    -00165                 typename tmat2x2<T>::value_type const & s, 
    -00166                 tmat2x2<T> const & m);
    -00167 
    -00168         template <typename T> 
    -00169         tmat2x2<T> operator+ (
    -00170                 tmat2x2<T> const & m1, 
    -00171                 tmat2x2<T> const & m2);
    -00172             
    -00173         template <typename T> 
    -00174         tmat2x2<T> operator- (
    -00175                 tmat2x2<T> const & m, 
    -00176                 typename tmat2x2<T>::value_type const & s);
    -00177 
    -00178         template <typename T> 
    -00179         tmat2x2<T> operator- (
    -00180                 typename tmat2x2<T>::value_type const & s, 
    -00181                 tmat2x2<T> const & m);
    -00182 
    -00183         template <typename T> 
    -00184         tmat2x2<T> operator- (
    -00185                 tmat2x2<T> const & m1, 
    -00186                 tmat2x2<T> const & m2);
    -00187 
    -00188         template <typename T> 
    -00189         tmat2x2<T> operator* (
    -00190                 tmat2x2<T> const & m, 
    -00191                 typename tmat2x2<T>::value_type const & s);
    -00192 
    -00193         template <typename T> 
    -00194         tmat2x2<T> operator* (
    -00195                 typename tmat2x2<T>::value_type const & s, 
    -00196                 tmat2x2<T> const & m);
    -00197 
    -00198         template <typename T> 
    -00199         typename tmat2x2<T>::col_type operator* (
    -00200                 tmat2x2<T> const & m, 
    -00201                 typename tmat2x2<T>::row_type const & v);
    -00202 
    -00203         template <typename T> 
    -00204         typename tmat2x2<T>::row_type operator* (
    -00205                 typename tmat2x2<T>::col_type const & v, 
    -00206                 tmat2x2<T> const & m);
    -00207 
    -00208         template <typename T> 
    -00209         tmat2x2<T> operator* (
    -00210                 tmat2x2<T> const & m1, 
    -00211                 tmat2x2<T> const & m2);
    -00212                 
    -00213         template <typename T>
    -00214         tmat3x2<T> operator* (
    -00215                 tmat2x2<T> const & m1, 
    -00216                 tmat3x2<T> const & m2);
    -00217                 
    -00218         template <typename T>
    -00219         tmat4x2<T> operator* (
    -00220                 tmat2x2<T> const & m1, 
    -00221                 tmat4x2<T> const & m2);
    -00222 
    -00223         template <typename T> 
    -00224         tmat2x2<T> operator/ (
    -00225                 tmat2x2<T> const & m, 
    -00226                 typename tmat2x2<T>::value_type const & s);
    -00227 
    -00228         template <typename T> 
    -00229         tmat2x2<T> operator/ (
    -00230                 typename tmat2x2<T>::value_type const & s,
    -00231                 tmat2x2<T> const & m);
    -00232 
    -00233         template <typename T> 
    -00234         typename tmat2x2<T>::col_type operator/ (
    -00235                 tmat2x2<T> const & m, 
    -00236                 typename tmat2x2<T>::row_type const & v);
    -00237 
    -00238         template <typename T> 
    -00239         typename tmat2x2<T>::row_type operator/ (
    -00240                 typename tmat2x2<T>::col_type const & v, 
    -00241                 tmat2x2<T> const & m);
    -00242 
    -00243         template <typename T> 
    -00244         tmat2x2<T> operator/ (
    -00245                 tmat2x2<T> const & m1, 
    -00246                 tmat2x2<T> const & m2);
    -00247 
    -00248         // Unary constant operators
    -00249         template <typename T> 
    -00250         tmat2x2<T> const operator-  (
    -00251                 tmat2x2<T> const & m);
    -00252 
    -00253         template <typename T> 
    -00254         tmat2x2<T> const operator-- (
    -00255                 tmat2x2<T> const & m, 
    -00256                 int);
    -00257 
    -00258         template <typename T> 
    -00259         tmat2x2<T> const operator++ (
    -00260                 tmat2x2<T> const & m, 
    -00261                 int);
    -00262 } //namespace detail
    -00263 
    -00266 
    -00272         typedef detail::tmat2x2<lowp_float>             lowp_mat2;
    -00273 
    -00279         typedef detail::tmat2x2<mediump_float>  mediump_mat2;
    -00280 
    -00286         typedef detail::tmat2x2<highp_float>    highp_mat2;
    -00287 
    -00293         typedef detail::tmat2x2<lowp_float>             lowp_mat2x2;
    -00294 
    -00300         typedef detail::tmat2x2<mediump_float>  mediump_mat2x2;
    -00301 
    -00307         typedef detail::tmat2x2<highp_float>    highp_mat2x2;
    -00308 
    -00310 }//namespace glm
    -00311 
    -00312 #ifndef GLM_EXTERNAL_TEMPLATE
    -00313 #include "type_mat2x2.inl"
    -00314 #endif
    -00315 
    -00316 #endif //glm_core_type_mat2x2
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat
    +
    30 #define glm_core_type_mat
    +
    31 
    +
    32 #include "type_gentype.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  //template
    +
    38  //<
    +
    39  // typename T,
    +
    40  // template <typename> class C,
    +
    41  // template <typename> class R
    +
    42  //>
    +
    43  //struct matType
    +
    44  //{
    +
    45  // enum ctor{null};
    +
    46  // typedef T value_type;
    +
    47  // typedef std::size_t size_type;
    +
    48  // typedef C<T> col_type;
    +
    49  // typedef R<T> row_type;
    +
    50  // static size_type const col_size;
    +
    51  // static size_type const row_size;
    +
    52  //};
    +
    53 
    +
    54  //template
    +
    55  //<
    +
    56  // typename T,
    +
    57  // template <typename> class C,
    +
    58  // template <typename> class R
    +
    59  //>
    +
    60  //typename matType<T, C, R>::size_type const
    +
    61  //matType<T, C, R>::col_size = matType<T, C, R>::col_type::value_size;
    +
    62 
    +
    63  //template
    +
    64  //<
    +
    65  // typename T,
    +
    66  // template <typename> class C,
    +
    67  // template <typename> class R
    +
    68  //>
    +
    69  //typename matType<T, C, R>::size_type const
    +
    70  //matType<T, C, R>::row_size = matType<T, C, R>::row_type::value_size;
    +
    71 
    +
    72 }//namespace detail
    +
    73 }//namespace glm
    +
    74 
    +
    75 #endif//glm_core_type_mat
    +
    + - diff --git a/doc/api/a00099.html b/doc/api/a00099.html index 340813b0..097dcd9e 100644 --- a/doc/api/a00099.html +++ b/doc/api/a00099.html @@ -2,42 +2,31 @@ - -type_mat2x3.hpp File Reference + +type_mat2x2.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,44 +35,58 @@
  • File List
  • + +
    -
    type_mat2x3.hpp File Reference
    -
    +
    type_mat2x2.hpp File Reference
    +

    Go to the source code of this file.

    - - - - + + + + + + + + + + + +

    +

    Typedefs

    typedef detail::tmat2x3
    -< highp_float > 
    highp_mat2x3
    typedef detail::tmat2x3
    -< lowp_float > 
    lowp_mat2x3
    typedef detail::tmat2x3
    -< mediump_float > 
    mediump_mat2x3
    typedef detail::tmat2x2
    +< highp_float > 
    highp_mat2
     
    typedef detail::tmat2x2
    +< highp_float > 
    highp_mat2x2
     
    typedef detail::tmat2x2
    +< lowp_float > 
    lowp_mat2
     
    typedef detail::tmat2x2
    +< lowp_float > 
    lowp_mat2x2
     
    typedef detail::tmat2x2
    +< mediump_float > 
    mediump_mat2
     
    typedef detail::tmat2x2
    +< mediump_float > 
    mediump_mat2x2
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2006-10-01 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat2x3.hpp.

    -
    - +

    GLM Core

    +
    Date
    2005-01-27 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat2x2.hpp.

    + + - diff --git a/doc/api/a00099_source.html b/doc/api/a00099_source.html index e09f5a8b..66475397 100644 --- a/doc/api/a00099_source.html +++ b/doc/api/a00099_source.html @@ -2,42 +2,31 @@ - -type_mat2x3.hpp Source File + +type_mat2x2.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,259 +35,298 @@
  • File List
  • + +
    -
    type_mat2x3.hpp
    -
    +
    type_mat2x2.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat2x3
    -00030 #define glm_core_type_mat2x3
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // \brief Template for 2 columns and 3 rows matrix of floating-point numbers.
    -00052         // \ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat2x3
    -00055         {
    -00056                 enum ctor{null};
    -00057                 typedef T value_type;
    -00058                 typedef std::size_t size_type;
    -00059                 typedef tvec3<T> col_type;
    -00060                 typedef tvec2<T> row_type;
    -00061         GLM_FUNC_DECL size_type length() const;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat2x3<T> type;
    -00066                 typedef tmat3x2<T> transpose_type;
    -00067 
    -00068         private:
    -00069                 // Data 
    -00070                 col_type value[2];
    -00071 
    -00072         public:
    -00073                 // Constructors
    -00074                 GLM_FUNC_DECL tmat2x3();
    -00075                 GLM_FUNC_DECL tmat2x3(tmat2x3 const & m);
    -00076 
    -00077                 GLM_FUNC_DECL explicit tmat2x3(
    -00078                         ctor);
    -00079                 GLM_FUNC_DECL explicit tmat2x3(
    -00080                         value_type const & s);
    -00081                 GLM_FUNC_DECL explicit tmat2x3(
    -00082                         value_type const & x0, value_type const & y0, value_type const & z0,
    -00083                         value_type const & x1, value_type const & y1, value_type const & z1);
    -00084                 GLM_FUNC_DECL explicit tmat2x3(
    -00085                         col_type const & v0, 
    -00086                         col_type const & v1);
    -00087             
    -00089                 // Conversions
    -00090                 template <typename U> 
    -00091                 GLM_FUNC_DECL explicit tmat2x3(
    -00092             U const & x);
    -00093                         
    -00094                 template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2> 
    -00095                 GLM_FUNC_DECL explicit tmat2x3(
    -00096             X1 const & x1, Y1 const & y1, Z1 const & z1, 
    -00097             X2 const & x2, Y2 const & y2, Z2 const & z2);
    -00098                         
    -00099                 template <typename U, typename V> 
    -00100                 GLM_FUNC_DECL explicit tmat2x3(
    -00101             tvec3<U> const & v1, 
    -00102             tvec3<V> const & v2);
    -00103             
    -00105         // Matrix conversion
    -00106                 template <typename U> 
    -00107                 GLM_FUNC_DECL explicit tmat2x3(tmat2x3<U> const & m);
    -00108 
    -00109                 GLM_FUNC_DECL explicit tmat2x3(tmat2x2<T> const & x);
    -00110                 GLM_FUNC_DECL explicit tmat2x3(tmat3x3<T> const & x);
    -00111                 GLM_FUNC_DECL explicit tmat2x3(tmat4x4<T> const & x);
    -00112                 GLM_FUNC_DECL explicit tmat2x3(tmat2x4<T> const & x);
    -00113                 GLM_FUNC_DECL explicit tmat2x3(tmat3x2<T> const & x);
    -00114                 GLM_FUNC_DECL explicit tmat2x3(tmat3x4<T> const & x);
    -00115                 GLM_FUNC_DECL explicit tmat2x3(tmat4x2<T> const & x);
    -00116                 GLM_FUNC_DECL explicit tmat2x3(tmat4x3<T> const & x);
    -00117 
    -00118                 // Accesses
    -00119                 col_type & operator[](size_type i);
    -00120                 col_type const & operator[](size_type i) const;
    -00121 
    -00122                 // Unary updatable operators
    -00123                 GLM_FUNC_DECL tmat2x3<T> & operator=  (tmat2x3<T> const & m);
    -00124                 template <typename U> 
    -00125                 GLM_FUNC_DECL tmat2x3<T> & operator=  (tmat2x3<U> const & m);
    -00126                 template <typename U> 
    -00127                 GLM_FUNC_DECL tmat2x3<T> & operator+= (U const & s);
    -00128                 template <typename U> 
    -00129                 GLM_FUNC_DECL tmat2x3<T> & operator+= (tmat2x3<U> const & m);
    -00130                 template <typename U> 
    -00131                 GLM_FUNC_DECL tmat2x3<T> & operator-= (U const & s);
    -00132                 template <typename U> 
    -00133                 GLM_FUNC_DECL tmat2x3<T> & operator-= (tmat2x3<U> const & m);
    -00134                 template <typename U> 
    -00135                 GLM_FUNC_DECL tmat2x3<T> & operator*= (U const & s);
    -00136                 template <typename U> 
    -00137                 GLM_FUNC_DECL tmat2x3<T> & operator*= (tmat2x3<U> const & m);
    -00138                 template <typename U> 
    -00139                 GLM_FUNC_DECL tmat2x3<T> & operator/= (U const & s);
    -00140 
    -00141                 GLM_FUNC_DECL tmat2x3<T> & operator++ ();
    -00142                 GLM_FUNC_DECL tmat2x3<T> & operator-- ();
    -00143         };
    -00144 
    -00145         // Binary operators
    -00146         template <typename T> 
    -00147         tmat2x3<T> operator+ (
    -00148                 tmat2x3<T> const & m, 
    -00149                 typename tmat2x3<T>::value_type const & s);
    -00150             
    -00151         template <typename T> 
    -00152         tmat2x3<T> operator+ (
    -00153                 tmat2x3<T> const & m1, 
    -00154                 tmat2x3<T> const & m2);
    -00155             
    -00156         template <typename T> 
    -00157         tmat2x3<T> operator- (
    -00158                 tmat2x3<T> const & m, 
    -00159                 typename tmat2x3<T>::value_type const & s);
    -00160 
    -00161         template <typename T> 
    -00162         tmat2x3<T> operator- (
    -00163                 tmat2x3<T> const & m1, 
    -00164                 tmat2x3<T> const & m2);
    -00165 
    -00166         template <typename T> 
    -00167         tmat2x3<T> operator* (
    -00168                 tmat2x3<T> const & m, 
    -00169                 typename tmat2x3<T>::value_type const & s);
    -00170 
    -00171         template <typename T> 
    -00172         tmat2x3<T> operator* (
    -00173                 typename tmat2x3<T>::value_type const & s, 
    -00174                 tmat2x3<T> const & m);
    -00175 
    -00176         template <typename T>
    -00177         typename tmat2x3<T>::col_type operator* (
    -00178                 tmat2x3<T> const & m, 
    -00179                 typename tmat2x3<T>::row_type const & v);
    -00180 
    -00181         template <typename T> 
    -00182         typename tmat2x3<T>::row_type operator* (
    -00183                 typename tmat2x3<T>::col_type const & v, 
    -00184                 tmat2x3<T> const & m);
    -00185 
    -00186         template <typename T>
    -00187         tmat2x3<T> operator* (
    -00188                 tmat2x3<T> const & m1, 
    -00189                 tmat2x2<T> const & m2);
    -00190 
    -00191         template <typename T>
    -00192         tmat3x3<T> operator* (
    -00193                 tmat2x3<T> const & m1, 
    -00194                 tmat3x2<T> const & m2);
    -00195                 
    -00196         template <typename T>
    -00197         tmat4x3<T> operator* (
    -00198                 tmat2x3<T> const & m1, 
    -00199                 tmat4x2<T> const & m2);
    -00200 
    -00201         template <typename T> 
    -00202         tmat2x3<T> operator/ (
    -00203                 tmat2x3<T> const & m, 
    -00204                 typename tmat2x3<T>::value_type const & s);
    -00205 
    -00206         template <typename T> 
    -00207         tmat2x3<T> operator/ (
    -00208                 typename tmat2x3<T>::value_type const & s,
    -00209                 tmat2x3<T> const & m);
    -00210 
    -00211         // Unary constant operators
    -00212         template <typename T> 
    -00213         tmat2x3<T> const operator-  (
    -00214                 tmat2x3<T> const & m);
    -00215 
    -00216         template <typename T> 
    -00217         tmat2x3<T> const operator-- (
    -00218                 tmat2x3<T> const & m, 
    -00219                 int);
    -00220 
    -00221         template <typename T> 
    -00222         tmat2x3<T> const operator++ (
    -00223                 tmat2x3<T> const & m, 
    -00224                 int);
    -00225 
    -00226 } //namespace detail
    -00227 
    -00230 
    -00236         typedef detail::tmat2x3<lowp_float>             lowp_mat2x3;
    -00237     
    -00243         typedef detail::tmat2x3<mediump_float>  mediump_mat2x3;
    -00244     
    -00250         typedef detail::tmat2x3<highp_float>    highp_mat2x3;
    -00251 
    -00253 }//namespace glm
    -00254 
    -00255 #ifndef GLM_EXTERNAL_TEMPLATE
    -00256 #include "type_mat2x3.inl"
    -00257 #endif
    -00258 
    -00259 #endif //glm_core_type_mat2x3
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat2x2
    +
    30 #define glm_core_type_mat2x2
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat2x2
    +
    53  {
    +
    54  // Implementation detail
    +
    55  enum ctor{null};
    +
    56  typedef T value_type;
    +
    57  typedef std::size_t size_type;
    +
    58  typedef tvec2<T> col_type;
    +
    59  typedef tvec2<T> row_type;
    +
    60  typedef tmat2x2<T> type;
    +
    61  typedef tmat2x2<T> transpose_type;
    +
    62 
    +
    63  static GLM_FUNC_DECL size_type col_size();
    +
    64  static GLM_FUNC_DECL size_type row_size();
    +
    65 
    +
    66  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    67 
    +
    68  public:
    +
    69  // Implementation detail
    +
    70  GLM_FUNC_DECL tmat2x2<T> _inverse() const;
    +
    71 
    +
    72  private:
    +
    74  // Implementation detail
    +
    75  col_type value[2];
    +
    76 
    +
    77  public:
    +
    79  // Constructors
    +
    80  GLM_FUNC_DECL tmat2x2();
    +
    81  GLM_FUNC_DECL tmat2x2(
    +
    82  tmat2x2 const & m);
    +
    83 
    +
    84  GLM_FUNC_DECL explicit tmat2x2(
    +
    85  ctor Null);
    +
    86  GLM_FUNC_DECL explicit tmat2x2(
    +
    87  value_type const & x);
    +
    88  GLM_FUNC_DECL explicit tmat2x2(
    +
    89  value_type const & x1, value_type const & y1,
    +
    90  value_type const & x2, value_type const & y2);
    +
    91  GLM_FUNC_DECL explicit tmat2x2(
    +
    92  col_type const & v1,
    +
    93  col_type const & v2);
    +
    94 
    +
    96  // Conversions
    +
    97  template <typename U>
    +
    98  GLM_FUNC_DECL explicit tmat2x2(
    +
    99  U const & x);
    +
    100 
    +
    101  template <typename U, typename V, typename M, typename N>
    +
    102  GLM_FUNC_DECL explicit tmat2x2(
    +
    103  U const & x1, V const & y1,
    +
    104  M const & x2, N const & y2);
    +
    105 
    +
    106  template <typename U, typename V>
    +
    107  GLM_FUNC_DECL explicit tmat2x2(
    +
    108  tvec2<U> const & v1,
    +
    109  tvec2<V> const & v2);
    +
    110 
    +
    112  // Matrix conversions
    +
    113  template <typename U>
    +
    114  GLM_FUNC_DECL explicit tmat2x2(tmat2x2<U> const & m);
    +
    115 
    +
    116  GLM_FUNC_DECL explicit tmat2x2(tmat3x3<T> const & x);
    +
    117  GLM_FUNC_DECL explicit tmat2x2(tmat4x4<T> const & x);
    +
    118  GLM_FUNC_DECL explicit tmat2x2(tmat2x3<T> const & x);
    +
    119  GLM_FUNC_DECL explicit tmat2x2(tmat3x2<T> const & x);
    +
    120  GLM_FUNC_DECL explicit tmat2x2(tmat2x4<T> const & x);
    +
    121  GLM_FUNC_DECL explicit tmat2x2(tmat4x2<T> const & x);
    +
    122  GLM_FUNC_DECL explicit tmat2x2(tmat3x4<T> const & x);
    +
    123  GLM_FUNC_DECL explicit tmat2x2(tmat4x3<T> const & x);
    +
    124 
    +
    126  // Accesses
    +
    127 
    +
    128  GLM_FUNC_DECL col_type & operator[](size_type i);
    +
    129  GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    +
    130 
    +
    131  // Unary updatable operators
    +
    132  GLM_FUNC_DECL tmat2x2<T> & operator=(tmat2x2<T> const & m);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tmat2x2<T> & operator=(tmat2x2<U> const & m);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tmat2x2<T> & operator+=(U const & s);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tmat2x2<T> & operator+=(tmat2x2<U> const & m);
    +
    139  template <typename U>
    +
    140  GLM_FUNC_DECL tmat2x2<T> & operator-=(U const & s);
    +
    141  template <typename U>
    +
    142  GLM_FUNC_DECL tmat2x2<T> & operator-=(tmat2x2<U> const & m);
    +
    143  template <typename U>
    +
    144  GLM_FUNC_DECL tmat2x2<T> & operator*=(U const & s);
    +
    145  template <typename U>
    +
    146  GLM_FUNC_DECL tmat2x2<T> & operator*=(tmat2x2<U> const & m);
    +
    147  template <typename U>
    +
    148  GLM_FUNC_DECL tmat2x2<T> & operator/=(U const & s);
    +
    149  template <typename U>
    +
    150  GLM_FUNC_DECL tmat2x2<T> & operator/=(tmat2x2<U> const & m);
    +
    151  GLM_FUNC_DECL tmat2x2<T> & operator++();
    +
    152  GLM_FUNC_DECL tmat2x2<T> & operator--();
    +
    153  };
    +
    154 
    +
    155  // Binary operators
    +
    156  template <typename T>
    +
    157  tmat2x2<T> operator+ (
    +
    158  tmat2x2<T> const & m,
    +
    159  typename tmat2x2<T>::value_type const & s);
    +
    160 
    +
    161  template <typename T>
    +
    162  tmat2x2<T> operator+ (
    +
    163  typename tmat2x2<T>::value_type const & s,
    +
    164  tmat2x2<T> const & m);
    +
    165 
    +
    166  template <typename T>
    +
    167  tmat2x2<T> operator+ (
    +
    168  tmat2x2<T> const & m1,
    +
    169  tmat2x2<T> const & m2);
    +
    170 
    +
    171  template <typename T>
    +
    172  tmat2x2<T> operator- (
    +
    173  tmat2x2<T> const & m,
    +
    174  typename tmat2x2<T>::value_type const & s);
    +
    175 
    +
    176  template <typename T>
    +
    177  tmat2x2<T> operator- (
    +
    178  typename tmat2x2<T>::value_type const & s,
    +
    179  tmat2x2<T> const & m);
    +
    180 
    +
    181  template <typename T>
    +
    182  tmat2x2<T> operator- (
    +
    183  tmat2x2<T> const & m1,
    +
    184  tmat2x2<T> const & m2);
    +
    185 
    +
    186  template <typename T>
    +
    187  tmat2x2<T> operator* (
    +
    188  tmat2x2<T> const & m,
    +
    189  typename tmat2x2<T>::value_type const & s);
    +
    190 
    +
    191  template <typename T>
    +
    192  tmat2x2<T> operator* (
    +
    193  typename tmat2x2<T>::value_type const & s,
    +
    194  tmat2x2<T> const & m);
    +
    195 
    +
    196  template <typename T>
    +
    197  typename tmat2x2<T>::col_type operator* (
    +
    198  tmat2x2<T> const & m,
    +
    199  typename tmat2x2<T>::row_type const & v);
    +
    200 
    +
    201  template <typename T>
    +
    202  typename tmat2x2<T>::row_type operator* (
    +
    203  typename tmat2x2<T>::col_type const & v,
    +
    204  tmat2x2<T> const & m);
    +
    205 
    +
    206  template <typename T>
    +
    207  tmat2x2<T> operator* (
    +
    208  tmat2x2<T> const & m1,
    +
    209  tmat2x2<T> const & m2);
    +
    210 
    +
    211  template <typename T>
    +
    212  tmat3x2<T> operator* (
    +
    213  tmat2x2<T> const & m1,
    +
    214  tmat3x2<T> const & m2);
    +
    215 
    +
    216  template <typename T>
    +
    217  tmat4x2<T> operator* (
    +
    218  tmat2x2<T> const & m1,
    +
    219  tmat4x2<T> const & m2);
    +
    220 
    +
    221  template <typename T>
    +
    222  tmat2x2<T> operator/ (
    +
    223  tmat2x2<T> const & m,
    +
    224  typename tmat2x2<T>::value_type const & s);
    +
    225 
    +
    226  template <typename T>
    +
    227  tmat2x2<T> operator/ (
    +
    228  typename tmat2x2<T>::value_type const & s,
    +
    229  tmat2x2<T> const & m);
    +
    230 
    +
    231  template <typename T>
    +
    232  typename tmat2x2<T>::col_type operator/ (
    +
    233  tmat2x2<T> const & m,
    +
    234  typename tmat2x2<T>::row_type const & v);
    +
    235 
    +
    236  template <typename T>
    +
    237  typename tmat2x2<T>::row_type operator/ (
    +
    238  typename tmat2x2<T>::col_type const & v,
    +
    239  tmat2x2<T> const & m);
    +
    240 
    +
    241  template <typename T>
    +
    242  tmat2x2<T> operator/ (
    +
    243  tmat2x2<T> const & m1,
    +
    244  tmat2x2<T> const & m2);
    +
    245 
    +
    246  // Unary constant operators
    +
    247  template <typename T>
    +
    248  tmat2x2<T> const operator- (
    +
    249  tmat2x2<T> const & m);
    +
    250 
    +
    251  template <typename T>
    +
    252  tmat2x2<T> const operator-- (
    +
    253  tmat2x2<T> const & m,
    +
    254  int);
    +
    255 
    +
    256  template <typename T>
    +
    257  tmat2x2<T> const operator++ (
    +
    258  tmat2x2<T> const & m,
    +
    259  int);
    +
    260 } //namespace detail
    +
    261 
    +
    264 
    +
    270  typedef detail::tmat2x2<lowp_float> lowp_mat2;
    +
    271 
    +
    277  typedef detail::tmat2x2<mediump_float> mediump_mat2;
    +
    278 
    +
    284  typedef detail::tmat2x2<highp_float> highp_mat2;
    +
    285 
    +
    291  typedef detail::tmat2x2<lowp_float> lowp_mat2x2;
    +
    292 
    +
    298  typedef detail::tmat2x2<mediump_float> mediump_mat2x2;
    +
    299 
    +
    305  typedef detail::tmat2x2<highp_float> highp_mat2x2;
    +
    306 
    +
    308 }//namespace glm
    +
    309 
    +
    310 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    311 #include "type_mat2x2.inl"
    +
    312 #endif
    +
    313 
    +
    314 #endif //glm_core_type_mat2x2
    +
    + - diff --git a/doc/api/a00100.html b/doc/api/a00100.html index 9a9b4cee..c3d068a3 100644 --- a/doc/api/a00100.html +++ b/doc/api/a00100.html @@ -2,42 +2,31 @@ - -type_mat2x4.hpp File Reference + +type_mat2x3.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,44 +35,49 @@
  • File List
  • + +
    -
    type_mat2x4.hpp File Reference
    -
    +
    type_mat2x3.hpp File Reference
    +

    Go to the source code of this file.

    - - - - + + + + + +

    +

    Typedefs

    typedef detail::tmat2x4
    -< highp_float > 
    highp_mat2x4
    typedef detail::tmat2x4
    -< lowp_float > 
    lowp_mat2x4
    typedef detail::tmat2x4
    -< mediump_float > 
    mediump_mat2x4
    typedef detail::tmat2x3
    +< highp_float > 
    highp_mat2x3
     
    typedef detail::tmat2x3
    +< lowp_float > 
    lowp_mat2x3
     
    typedef detail::tmat2x3
    +< mediump_float > 
    mediump_mat2x3
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2006-08-05 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat2x4.hpp.

    -
    - +

    GLM Core

    +
    Date
    2006-10-01 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat2x3.hpp.

    + + - diff --git a/doc/api/a00100_source.html b/doc/api/a00100_source.html index e976171f..399f1183 100644 --- a/doc/api/a00100_source.html +++ b/doc/api/a00100_source.html @@ -2,42 +2,31 @@ - -type_mat2x4.hpp Source File + +type_mat2x3.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,261 +35,260 @@
  • File List
  • + +
    -
    type_mat2x4.hpp
    -
    +
    type_mat2x3.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat2x4
    -00030 #define glm_core_type_mat2x4
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // Template for 2 columns and 4 rows matrix of floating-point numbers.
    -00052         // \ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat2x4
    -00055         {
    -00056                 enum ctor{null};
    -00057                 typedef T value_type;
    -00058                 typedef std::size_t size_type;
    -00059                 typedef tvec4<T> col_type;
    -00060                 typedef tvec2<T> row_type;
    -00061         GLM_FUNC_DECL size_type length() const;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat2x4<T> type;
    -00066                 typedef tmat4x2<T> transpose_type;
    -00067 
    -00068         private:
    -00069                 // Data 
    -00070                 col_type value[2];
    -00071 
    -00072         public:
    -00073                 // Constructors
    -00074                 GLM_FUNC_DECL tmat2x4();
    -00075                 GLM_FUNC_DECL tmat2x4(tmat2x4 const & m);
    -00076 
    -00077                 GLM_FUNC_DECL explicit tmat2x4(
    -00078                         ctor);
    -00079                 GLM_FUNC_DECL explicit tmat2x4(
    -00080                         value_type const & s);
    -00081                 GLM_FUNC_DECL explicit tmat2x4(
    -00082                         value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
    -00083                         value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1);
    -00084                 GLM_FUNC_DECL explicit tmat2x4(
    -00085                         col_type const & v0, 
    -00086                         col_type const & v1);
    -00087             
    -00089                 // Conversions
    -00090                 template <typename U> 
    -00091                 GLM_FUNC_DECL explicit tmat2x4(
    -00092             U const & x);
    -00093                         
    -00094                 template <
    -00095             typename X1, typename Y1, typename Z1, typename W1, 
    -00096             typename X2, typename Y2, typename Z2, typename W2> 
    -00097                 GLM_FUNC_DECL explicit tmat2x4(
    -00098             X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, 
    -00099             X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2);
    -00100                         
    -00101                 template <typename U, typename V> 
    -00102                 GLM_FUNC_DECL explicit tmat2x4(
    -00103             tvec4<U> const & v1, 
    -00104             tvec4<V> const & v2);
    -00105             
    -00107                 // Matrix conversions
    -00108                 template <typename U> 
    -00109                 GLM_FUNC_DECL explicit tmat2x4(tmat2x4<U> const & m);
    -00110 
    -00111                 GLM_FUNC_DECL explicit tmat2x4(tmat2x2<T> const & x);
    -00112                 GLM_FUNC_DECL explicit tmat2x4(tmat3x3<T> const & x);
    -00113                 GLM_FUNC_DECL explicit tmat2x4(tmat4x4<T> const & x);
    -00114                 GLM_FUNC_DECL explicit tmat2x4(tmat2x3<T> const & x);
    -00115                 GLM_FUNC_DECL explicit tmat2x4(tmat3x2<T> const & x);
    -00116                 GLM_FUNC_DECL explicit tmat2x4(tmat3x4<T> const & x);
    -00117                 GLM_FUNC_DECL explicit tmat2x4(tmat4x2<T> const & x);
    -00118                 GLM_FUNC_DECL explicit tmat2x4(tmat4x3<T> const & x);
    -00119 
    -00120                 // Accesses
    -00121                 GLM_FUNC_DECL col_type & operator[](size_type i);
    -00122                 GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    -00123 
    -00124                 // Unary updatable operators
    -00125                 GLM_FUNC_DECL tmat2x4<T>& operator=  (tmat2x4<T> const & m);
    -00126                 template <typename U> 
    -00127                 GLM_FUNC_DECL tmat2x4<T>& operator=  (tmat2x4<U> const & m);
    -00128                 template <typename U> 
    -00129                 GLM_FUNC_DECL tmat2x4<T>& operator+= (U const & s);
    -00130                 template <typename U> 
    -00131                 GLM_FUNC_DECL tmat2x4<T>& operator+= (tmat2x4<U> const & m);
    -00132                 template <typename U> 
    -00133                 GLM_FUNC_DECL tmat2x4<T>& operator-= (U const & s);
    -00134                 template <typename U> 
    -00135                 GLM_FUNC_DECL tmat2x4<T>& operator-= (tmat2x4<U> const & m);
    -00136                 template <typename U> 
    -00137                 GLM_FUNC_DECL tmat2x4<T>& operator*= (U const & s);
    -00138                 template <typename U> 
    -00139                 GLM_FUNC_DECL tmat2x4<T>& operator*= (tmat2x4<U> const & m);
    -00140                 template <typename U> 
    -00141                 GLM_FUNC_DECL tmat2x4<T>& operator/= (U const & s);
    -00142 
    -00143                 GLM_FUNC_DECL tmat2x4<T>& operator++ ();
    -00144                 GLM_FUNC_DECL tmat2x4<T>& operator-- ();
    -00145         };
    -00146 
    -00147         // Binary operators
    -00148         template <typename T> 
    -00149         tmat2x4<T> operator+ (
    -00150                 tmat2x4<T> const & m, 
    -00151                 typename tmat2x4<T>::value_type const & s);
    -00152             
    -00153         template <typename T> 
    -00154         tmat2x4<T> operator+ (
    -00155                 tmat2x4<T> const & m1, 
    -00156                 tmat2x4<T> const & m2);
    -00157             
    -00158         template <typename T> 
    -00159         tmat2x4<T> operator- (
    -00160                 tmat2x4<T> const & m, 
    -00161                 typename tmat2x4<T>::value_type const & s);
    -00162 
    -00163         template <typename T> 
    -00164         tmat2x4<T> operator- (
    -00165                 tmat2x4<T> const & m1, 
    -00166                 tmat2x4<T> const & m2);
    -00167 
    -00168         template <typename T> 
    -00169         tmat2x4<T> operator* (
    -00170                 tmat2x4<T> const & m, 
    -00171                 typename tmat2x4<T>::value_type const & s);
    -00172 
    -00173         template <typename T> 
    -00174         tmat2x4<T> operator* (
    -00175                 typename tmat2x4<T>::value_type const & s, 
    -00176                 tmat2x4<T> const & m);
    -00177 
    -00178         template <typename T>
    -00179         typename tmat2x4<T>::col_type operator* (
    -00180                 tmat2x4<T> const & m, 
    -00181                 typename tmat2x4<T>::row_type const & v);
    -00182 
    -00183         template <typename T> 
    -00184         typename tmat2x4<T>::row_type operator* (
    -00185                 typename tmat2x4<T>::col_type const & v, 
    -00186                 tmat2x4<T> const & m);
    -00187 
    -00188         template <typename T>
    -00189         tmat4x4<T> operator* (
    -00190                 tmat2x4<T> const & m1, 
    -00191                 tmat4x2<T> const & m2);
    -00192                 
    -00193         template <typename T>
    -00194         tmat2x4<T> operator* (
    -00195                 tmat2x4<T> const & m1, 
    -00196                 tmat2x2<T> const & m2);
    -00197                 
    -00198         template <typename T>
    -00199         tmat3x4<T> operator* (
    -00200                 tmat2x4<T> const & m1, 
    -00201                 tmat3x2<T> const & m2);
    -00202 
    -00203         template <typename T> 
    -00204         tmat2x4<T> operator/ (
    -00205                 tmat2x4<T> const & m, 
    -00206                 typename tmat2x4<T>::value_type const & s);
    -00207 
    -00208         template <typename T> 
    -00209         tmat2x4<T> operator/ (
    -00210                 typename tmat2x4<T>::value_type const & s, 
    -00211                 tmat2x4<T> const & m);
    -00212 
    -00213         // Unary constant operators
    -00214         template <typename T> 
    -00215         tmat2x4<T> const operator-  (
    -00216                 tmat2x4<T> const & m);
    -00217 
    -00218         template <typename T> 
    -00219         tmat2x4<T> const operator-- (
    -00220                 tmat2x4<T> const & m, 
    -00221                 int);
    -00222 
    -00223         template <typename T> 
    -00224         tmat2x4<T> const operator++ (
    -00225                 tmat2x4<T> const & m, 
    -00226                 int);
    -00227 
    -00228 } //namespace detail
    -00229 
    -00232 
    -00238         typedef detail::tmat2x4<lowp_float>             lowp_mat2x4;
    -00239 
    -00245         typedef detail::tmat2x4<mediump_float>  mediump_mat2x4;
    -00246 
    -00252         typedef detail::tmat2x4<highp_float>    highp_mat2x4;
    -00253 
    -00255 }//namespace glm
    -00256 
    -00257 #ifndef GLM_EXTERNAL_TEMPLATE
    -00258 #include "type_mat2x4.inl"
    -00259 #endif
    -00260 
    -00261 #endif //glm_core_type_mat2x4
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat2x3
    +
    30 #define glm_core_type_mat2x3
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat2x3
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec3<T> col_type;
    +
    58  typedef tvec2<T> row_type;
    +
    59  typedef tmat2x3<T> type;
    +
    60  typedef tmat3x2<T> transpose_type;
    +
    61 
    +
    62  static GLM_FUNC_DECL size_type col_size();
    +
    63  static GLM_FUNC_DECL size_type row_size();
    +
    64 
    +
    65  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    66 
    +
    67  private:
    +
    68  // Data
    +
    69  col_type value[2];
    +
    70 
    +
    71  public:
    +
    72  // Constructors
    +
    73  GLM_FUNC_DECL tmat2x3();
    +
    74  GLM_FUNC_DECL tmat2x3(tmat2x3 const & m);
    +
    75 
    +
    76  GLM_FUNC_DECL explicit tmat2x3(
    +
    77  ctor);
    +
    78  GLM_FUNC_DECL explicit tmat2x3(
    +
    79  value_type const & s);
    +
    80  GLM_FUNC_DECL explicit tmat2x3(
    +
    81  value_type const & x0, value_type const & y0, value_type const & z0,
    +
    82  value_type const & x1, value_type const & y1, value_type const & z1);
    +
    83  GLM_FUNC_DECL explicit tmat2x3(
    +
    84  col_type const & v0,
    +
    85  col_type const & v1);
    +
    86 
    +
    88  // Conversions
    +
    89  template <typename U>
    +
    90  GLM_FUNC_DECL explicit tmat2x3(
    +
    91  U const & x);
    +
    92 
    +
    93  template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
    +
    94  GLM_FUNC_DECL explicit tmat2x3(
    +
    95  X1 const & x1, Y1 const & y1, Z1 const & z1,
    +
    96  X2 const & x2, Y2 const & y2, Z2 const & z2);
    +
    97 
    +
    98  template <typename U, typename V>
    +
    99  GLM_FUNC_DECL explicit tmat2x3(
    +
    100  tvec3<U> const & v1,
    +
    101  tvec3<V> const & v2);
    +
    102 
    +
    104  // Matrix conversion
    +
    105  template <typename U>
    +
    106  GLM_FUNC_DECL explicit tmat2x3(tmat2x3<U> const & m);
    +
    107 
    +
    108  GLM_FUNC_DECL explicit tmat2x3(tmat2x2<T> const & x);
    +
    109  GLM_FUNC_DECL explicit tmat2x3(tmat3x3<T> const & x);
    +
    110  GLM_FUNC_DECL explicit tmat2x3(tmat4x4<T> const & x);
    +
    111  GLM_FUNC_DECL explicit tmat2x3(tmat2x4<T> const & x);
    +
    112  GLM_FUNC_DECL explicit tmat2x3(tmat3x2<T> const & x);
    +
    113  GLM_FUNC_DECL explicit tmat2x3(tmat3x4<T> const & x);
    +
    114  GLM_FUNC_DECL explicit tmat2x3(tmat4x2<T> const & x);
    +
    115  GLM_FUNC_DECL explicit tmat2x3(tmat4x3<T> const & x);
    +
    116 
    +
    117  // Accesses
    +
    118  col_type & operator[](size_type i);
    +
    119  col_type const & operator[](size_type i) const;
    +
    120 
    +
    121  // Unary updatable operators
    +
    122  GLM_FUNC_DECL tmat2x3<T> & operator= (tmat2x3<T> const & m);
    +
    123  template <typename U>
    +
    124  GLM_FUNC_DECL tmat2x3<T> & operator= (tmat2x3<U> const & m);
    +
    125  template <typename U>
    +
    126  GLM_FUNC_DECL tmat2x3<T> & operator+= (U const & s);
    +
    127  template <typename U>
    +
    128  GLM_FUNC_DECL tmat2x3<T> & operator+= (tmat2x3<U> const & m);
    +
    129  template <typename U>
    +
    130  GLM_FUNC_DECL tmat2x3<T> & operator-= (U const & s);
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL tmat2x3<T> & operator-= (tmat2x3<U> const & m);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tmat2x3<T> & operator*= (U const & s);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tmat2x3<T> & operator*= (tmat2x3<U> const & m);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tmat2x3<T> & operator/= (U const & s);
    +
    139 
    +
    140  GLM_FUNC_DECL tmat2x3<T> & operator++ ();
    +
    141  GLM_FUNC_DECL tmat2x3<T> & operator-- ();
    +
    142  };
    +
    143 
    +
    144  // Binary operators
    +
    145  template <typename T>
    +
    146  tmat2x3<T> operator+ (
    +
    147  tmat2x3<T> const & m,
    +
    148  typename tmat2x3<T>::value_type const & s);
    +
    149 
    +
    150  template <typename T>
    +
    151  tmat2x3<T> operator+ (
    +
    152  tmat2x3<T> const & m1,
    +
    153  tmat2x3<T> const & m2);
    +
    154 
    +
    155  template <typename T>
    +
    156  tmat2x3<T> operator- (
    +
    157  tmat2x3<T> const & m,
    +
    158  typename tmat2x3<T>::value_type const & s);
    +
    159 
    +
    160  template <typename T>
    +
    161  tmat2x3<T> operator- (
    +
    162  tmat2x3<T> const & m1,
    +
    163  tmat2x3<T> const & m2);
    +
    164 
    +
    165  template <typename T>
    +
    166  tmat2x3<T> operator* (
    +
    167  tmat2x3<T> const & m,
    +
    168  typename tmat2x3<T>::value_type const & s);
    +
    169 
    +
    170  template <typename T>
    +
    171  tmat2x3<T> operator* (
    +
    172  typename tmat2x3<T>::value_type const & s,
    +
    173  tmat2x3<T> const & m);
    +
    174 
    +
    175  template <typename T>
    +
    176  typename tmat2x3<T>::col_type operator* (
    +
    177  tmat2x3<T> const & m,
    +
    178  typename tmat2x3<T>::row_type const & v);
    +
    179 
    +
    180  template <typename T>
    +
    181  typename tmat2x3<T>::row_type operator* (
    +
    182  typename tmat2x3<T>::col_type const & v,
    +
    183  tmat2x3<T> const & m);
    +
    184 
    +
    185  template <typename T>
    +
    186  tmat2x3<T> operator* (
    +
    187  tmat2x3<T> const & m1,
    +
    188  tmat2x2<T> const & m2);
    +
    189 
    +
    190  template <typename T>
    +
    191  tmat3x3<T> operator* (
    +
    192  tmat2x3<T> const & m1,
    +
    193  tmat3x2<T> const & m2);
    +
    194 
    +
    195  template <typename T>
    +
    196  tmat4x3<T> operator* (
    +
    197  tmat2x3<T> const & m1,
    +
    198  tmat4x2<T> const & m2);
    +
    199 
    +
    200  template <typename T>
    +
    201  tmat2x3<T> operator/ (
    +
    202  tmat2x3<T> const & m,
    +
    203  typename tmat2x3<T>::value_type const & s);
    +
    204 
    +
    205  template <typename T>
    +
    206  tmat2x3<T> operator/ (
    +
    207  typename tmat2x3<T>::value_type const & s,
    +
    208  tmat2x3<T> const & m);
    +
    209 
    +
    210  // Unary constant operators
    +
    211  template <typename T>
    +
    212  tmat2x3<T> const operator- (
    +
    213  tmat2x3<T> const & m);
    +
    214 
    +
    215  template <typename T>
    +
    216  tmat2x3<T> const operator-- (
    +
    217  tmat2x3<T> const & m,
    +
    218  int);
    +
    219 
    +
    220  template <typename T>
    +
    221  tmat2x3<T> const operator++ (
    +
    222  tmat2x3<T> const & m,
    +
    223  int);
    +
    224 
    +
    225 } //namespace detail
    +
    226 
    +
    229 
    +
    235  typedef detail::tmat2x3<lowp_float> lowp_mat2x3;
    +
    236 
    +
    242  typedef detail::tmat2x3<mediump_float> mediump_mat2x3;
    +
    243 
    +
    249  typedef detail::tmat2x3<highp_float> highp_mat2x3;
    +
    250 
    +
    252 }//namespace glm
    +
    253 
    +
    254 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    255 #include "type_mat2x3.inl"
    +
    256 #endif
    +
    257 
    +
    258 #endif //glm_core_type_mat2x3
    +
    + - diff --git a/doc/api/a00101.html b/doc/api/a00101.html index 3d6adfc4..d8546877 100644 --- a/doc/api/a00101.html +++ b/doc/api/a00101.html @@ -2,42 +2,31 @@ - -type_mat3x2.hpp File Reference + +type_mat2x4.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,44 +35,49 @@
  • File List
  • + +
    -
    type_mat3x2.hpp File Reference
    -
    +
    type_mat2x4.hpp File Reference
    +

    Go to the source code of this file.

    - - - - + + + + + +

    +

    Typedefs

    typedef detail::tmat3x2
    -< highp_float > 
    highp_mat3x2
    typedef detail::tmat3x2
    -< lowp_float > 
    lowp_mat3x2
    typedef detail::tmat3x2
    -< mediump_float > 
    mediump_mat3x2
    typedef detail::tmat2x4
    +< highp_float > 
    highp_mat2x4
     
    typedef detail::tmat2x4
    +< lowp_float > 
    lowp_mat2x4
     
    typedef detail::tmat2x4
    +< mediump_float > 
    mediump_mat2x4
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2006-08-05 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat3x2.hpp.

    -
    - +

    GLM Core

    +
    Date
    2006-08-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat2x4.hpp.

    + + - diff --git a/doc/api/a00101_source.html b/doc/api/a00101_source.html index 7a96ff6b..68e89013 100644 --- a/doc/api/a00101_source.html +++ b/doc/api/a00101_source.html @@ -2,42 +2,31 @@ - -type_mat3x2.hpp Source File + +type_mat2x4.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,268 +35,262 @@
  • File List
  • + +
    -
    type_mat3x2.hpp
    -
    +
    type_mat2x4.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat3x2
    -00030 #define glm_core_type_mat3x2
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // \brief Template for 3 columns and 2 rows matrix of floating-point numbers.
    -00052         // \ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat3x2
    -00055         {
    -00056                 enum ctor{null};
    -00057                 typedef T value_type;
    -00058                 typedef std::size_t size_type;
    -00059                 typedef tvec2<T> col_type;
    -00060                 typedef tvec3<T> row_type;
    -00061         GLM_FUNC_DECL size_type length() const;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat3x2<T> type;
    -00066                 typedef tmat2x3<T> transpose_type;
    -00067 
    -00068         private:
    -00069                 // Data
    -00070                 col_type value[3];
    -00071 
    -00072         public:
    -00073                 // Constructors
    -00074                 GLM_FUNC_DECL tmat3x2();
    -00075                 GLM_FUNC_DECL tmat3x2(tmat3x2 const & m);
    -00076 
    -00077                 GLM_FUNC_DECL explicit tmat3x2(
    -00078                         ctor);
    -00079                 GLM_FUNC_DECL explicit tmat3x2(
    -00080                         value_type const & s);
    -00081                 GLM_FUNC_DECL explicit tmat3x2(
    -00082                         value_type const & x0, value_type const & y0,
    -00083                         value_type const & x1, value_type const & y1,
    -00084                         value_type const & x2, value_type const & y2);
    -00085                 GLM_FUNC_DECL explicit tmat3x2(
    -00086                         col_type const & v0, 
    -00087                         col_type const & v1,
    -00088                         col_type const & v2);
    -00089 
    -00091                 // Conversions
    -00092                 template <typename U> 
    -00093                 GLM_FUNC_DECL explicit tmat3x2(
    -00094             U const & x);
    -00095                         
    -00096                 template 
    -00097         <
    -00098             typename X1, typename Y1, 
    -00099             typename X2, typename Y2, 
    -00100             typename X3, typename Y3
    -00101         > 
    -00102                 GLM_FUNC_DECL explicit tmat3x2(
    -00103             X1 const & x1, Y1 const & y1, 
    -00104             X2 const & x2, Y2 const & y2,
    -00105             X3 const & x3, Y3 const & y3);
    -00106                         
    -00107                 template <typename V1, typename V2, typename V3> 
    -00108                 GLM_FUNC_DECL explicit tmat3x2(
    -00109             tvec2<V1> const & v1, 
    -00110             tvec2<V2> const & v2,
    -00111             tvec2<V3> const & v3);
    -00112             
    -00113                 // Matrix conversions
    -00114                 template <typename U> 
    -00115                 GLM_FUNC_DECL explicit tmat3x2(tmat3x2<U> const & m);
    -00116 
    -00117                 GLM_FUNC_DECL explicit tmat3x2(tmat2x2<T> const & x);
    -00118                 GLM_FUNC_DECL explicit tmat3x2(tmat3x3<T> const & x);
    -00119                 GLM_FUNC_DECL explicit tmat3x2(tmat4x4<T> const & x);
    -00120                 GLM_FUNC_DECL explicit tmat3x2(tmat2x3<T> const & x);
    -00121                 GLM_FUNC_DECL explicit tmat3x2(tmat2x4<T> const & x);
    -00122                 GLM_FUNC_DECL explicit tmat3x2(tmat3x4<T> const & x);
    -00123                 GLM_FUNC_DECL explicit tmat3x2(tmat4x2<T> const & x);
    -00124                 GLM_FUNC_DECL explicit tmat3x2(tmat4x3<T> const & x);
    -00125 
    -00126                 // Accesses
    -00127                 GLM_FUNC_DECL col_type & operator[](size_type i);
    -00128                 GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    -00129 
    -00130                 // Unary updatable operators
    -00131                 GLM_FUNC_DECL tmat3x2<T> & operator=  (tmat3x2<T> const & m);
    -00132                 template <typename U> 
    -00133                 GLM_FUNC_DECL tmat3x2<T> & operator=  (tmat3x2<U> const & m);
    -00134                 template <typename U> 
    -00135                 GLM_FUNC_DECL tmat3x2<T> & operator+= (U const & s);
    -00136                 template <typename U> 
    -00137                 GLM_FUNC_DECL tmat3x2<T> & operator+= (tmat3x2<U> const & m);
    -00138                 template <typename U> 
    -00139                 GLM_FUNC_DECL tmat3x2<T> & operator-= (U const & s);
    -00140                 template <typename U> 
    -00141                 GLM_FUNC_DECL tmat3x2<T> & operator-= (tmat3x2<U> const & m);
    -00142                 template <typename U> 
    -00143                 GLM_FUNC_DECL tmat3x2<T> & operator*= (U const & s);
    -00144                 template <typename U> 
    -00145                 GLM_FUNC_DECL tmat3x2<T> & operator*= (tmat3x2<U> const & m);
    -00146                 template <typename U> 
    -00147                 GLM_FUNC_DECL tmat3x2<T> & operator/= (U const & s);
    -00148 
    -00149                 GLM_FUNC_DECL tmat3x2<T> & operator++ ();
    -00150                 GLM_FUNC_DECL tmat3x2<T> & operator-- ();
    -00151         };
    -00152 
    -00153         // Binary operators
    -00154         template <typename T> 
    -00155         tmat3x2<T> operator+ (
    -00156                 tmat3x2<T> const & m, 
    -00157                 typename tmat3x2<T>::value_type const & s);
    -00158             
    -00159         template <typename T> 
    -00160         tmat3x2<T> operator+ (
    -00161                 tmat3x2<T> const & m1, 
    -00162                 tmat3x2<T> const & m2);
    -00163             
    -00164         template <typename T> 
    -00165         tmat3x2<T> operator- (
    -00166                 tmat3x2<T> const & m, 
    -00167                 typename tmat3x2<T>::value_type const & s);
    -00168 
    -00169         template <typename T> 
    -00170         tmat3x2<T> operator- (
    -00171                 tmat3x2<T> const & m1, 
    -00172                 tmat3x2<T> const & m2);
    -00173 
    -00174         template <typename T> 
    -00175         tmat3x2<T> operator* (
    -00176                 tmat3x2<T> const & m, 
    -00177                 typename tmat3x2<T>::value_type const & s);
    -00178 
    -00179         template <typename T> 
    -00180         tmat3x2<T> operator* (
    -00181                 typename tmat3x2<T>::value_type const & s, 
    -00182                 tmat3x2<T> const & m);
    -00183 
    -00184         template <typename T>
    -00185         typename tmat3x2<T>::col_type operator* (
    -00186                 tmat3x2<T> const & m, 
    -00187                 typename tmat3x2<T>::row_type const & v);
    -00188 
    -00189         template <typename T> 
    -00190         typename tmat3x2<T>::row_type operator* (
    -00191                 typename tmat3x2<T>::col_type const & v,
    -00192                 tmat3x2<T> const & m);
    -00193 
    -00194         template <typename T>
    -00195         tmat2x2<T> operator* (
    -00196                 tmat3x2<T> const & m1, 
    -00197                 tmat2x3<T> const & m2);
    -00198                 
    -00199         template <typename T>
    -00200         tmat3x2<T> operator* (
    -00201                 tmat3x2<T> const & m1, 
    -00202                 tmat3x3<T> const & m2);
    -00203                 
    -00204         template <typename T>
    -00205         tmat4x2<T> operator* (
    -00206                 tmat3x2<T> const & m1, 
    -00207                 tmat4x3<T> const & m2);
    -00208 
    -00209         template <typename T> 
    -00210         tmat3x2<T> operator/ (
    -00211                 tmat3x2<T> const & m, 
    -00212                 typename tmat3x2<T>::value_type const & s);
    -00213 
    -00214         template <typename T> 
    -00215         tmat3x2<T> operator/ (
    -00216                 typename tmat3x2<T>::value_type const & s, 
    -00217                 tmat3x2<T> const & m);
    -00218 
    -00219         // Unary constant operators
    -00220         template <typename T> 
    -00221         tmat3x2<T> const operator-  (
    -00222                 tmat3x2<T> const & m);
    -00223 
    -00224         template <typename T> 
    -00225         tmat3x2<T> const operator-- (
    -00226                 tmat3x2<T> const & m, 
    -00227                 int);
    -00228 
    -00229         template <typename T> 
    -00230         tmat3x2<T> const operator++ (
    -00231                 tmat3x2<T> const & m, 
    -00232                 int);
    -00233 
    -00234 } //namespace detail
    -00235 
    -00238 
    -00244         typedef detail::tmat3x2<lowp_float>             lowp_mat3x2;
    -00245     
    -00251         typedef detail::tmat3x2<mediump_float>  mediump_mat3x2;
    -00252     
    -00258         typedef detail::tmat3x2<highp_float>    highp_mat3x2;
    -00259 
    -00261 }//namespace glm
    -00262 
    -00263 #ifndef GLM_EXTERNAL_TEMPLATE
    -00264 #include "type_mat3x2.inl"
    -00265 #endif
    -00266 
    -00267 #endif //glm_core_type_mat3x2
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat2x4
    +
    30 #define glm_core_type_mat2x4
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat2x4
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec4<T> col_type;
    +
    58  typedef tvec2<T> row_type;
    +
    59  typedef tmat2x4<T> type;
    +
    60  typedef tmat4x2<T> transpose_type;
    +
    61 
    +
    62  static GLM_FUNC_DECL size_type col_size();
    +
    63  static GLM_FUNC_DECL size_type row_size();
    +
    64 
    +
    65  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    66 
    +
    67  private:
    +
    68  // Data
    +
    69  col_type value[2];
    +
    70 
    +
    71  public:
    +
    72  // Constructors
    +
    73  GLM_FUNC_DECL tmat2x4();
    +
    74  GLM_FUNC_DECL tmat2x4(tmat2x4 const & m);
    +
    75 
    +
    76  GLM_FUNC_DECL explicit tmat2x4(
    +
    77  ctor);
    +
    78  GLM_FUNC_DECL explicit tmat2x4(
    +
    79  value_type const & s);
    +
    80  GLM_FUNC_DECL explicit tmat2x4(
    +
    81  value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
    +
    82  value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1);
    +
    83  GLM_FUNC_DECL explicit tmat2x4(
    +
    84  col_type const & v0,
    +
    85  col_type const & v1);
    +
    86 
    +
    88  // Conversions
    +
    89  template <typename U>
    +
    90  GLM_FUNC_DECL explicit tmat2x4(
    +
    91  U const & x);
    +
    92 
    +
    93  template <
    +
    94  typename X1, typename Y1, typename Z1, typename W1,
    +
    95  typename X2, typename Y2, typename Z2, typename W2>
    +
    96  GLM_FUNC_DECL explicit tmat2x4(
    +
    97  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    +
    98  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2);
    +
    99 
    +
    100  template <typename U, typename V>
    +
    101  GLM_FUNC_DECL explicit tmat2x4(
    +
    102  tvec4<U> const & v1,
    +
    103  tvec4<V> const & v2);
    +
    104 
    +
    106  // Matrix conversions
    +
    107  template <typename U>
    +
    108  GLM_FUNC_DECL explicit tmat2x4(tmat2x4<U> const & m);
    +
    109 
    +
    110  GLM_FUNC_DECL explicit tmat2x4(tmat2x2<T> const & x);
    +
    111  GLM_FUNC_DECL explicit tmat2x4(tmat3x3<T> const & x);
    +
    112  GLM_FUNC_DECL explicit tmat2x4(tmat4x4<T> const & x);
    +
    113  GLM_FUNC_DECL explicit tmat2x4(tmat2x3<T> const & x);
    +
    114  GLM_FUNC_DECL explicit tmat2x4(tmat3x2<T> const & x);
    +
    115  GLM_FUNC_DECL explicit tmat2x4(tmat3x4<T> const & x);
    +
    116  GLM_FUNC_DECL explicit tmat2x4(tmat4x2<T> const & x);
    +
    117  GLM_FUNC_DECL explicit tmat2x4(tmat4x3<T> const & x);
    +
    118 
    +
    119  // Accesses
    +
    120  GLM_FUNC_DECL col_type & operator[](size_type i);
    +
    121  GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    +
    122 
    +
    123  // Unary updatable operators
    +
    124  GLM_FUNC_DECL tmat2x4<T>& operator= (tmat2x4<T> const & m);
    +
    125  template <typename U>
    +
    126  GLM_FUNC_DECL tmat2x4<T>& operator= (tmat2x4<U> const & m);
    +
    127  template <typename U>
    +
    128  GLM_FUNC_DECL tmat2x4<T>& operator+= (U const & s);
    +
    129  template <typename U>
    +
    130  GLM_FUNC_DECL tmat2x4<T>& operator+= (tmat2x4<U> const & m);
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL tmat2x4<T>& operator-= (U const & s);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tmat2x4<T>& operator-= (tmat2x4<U> const & m);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tmat2x4<T>& operator*= (U const & s);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tmat2x4<T>& operator*= (tmat2x4<U> const & m);
    +
    139  template <typename U>
    +
    140  GLM_FUNC_DECL tmat2x4<T>& operator/= (U const & s);
    +
    141 
    +
    142  GLM_FUNC_DECL tmat2x4<T>& operator++ ();
    +
    143  GLM_FUNC_DECL tmat2x4<T>& operator-- ();
    +
    144  };
    +
    145 
    +
    146  // Binary operators
    +
    147  template <typename T>
    +
    148  tmat2x4<T> operator+ (
    +
    149  tmat2x4<T> const & m,
    +
    150  typename tmat2x4<T>::value_type const & s);
    +
    151 
    +
    152  template <typename T>
    +
    153  tmat2x4<T> operator+ (
    +
    154  tmat2x4<T> const & m1,
    +
    155  tmat2x4<T> const & m2);
    +
    156 
    +
    157  template <typename T>
    +
    158  tmat2x4<T> operator- (
    +
    159  tmat2x4<T> const & m,
    +
    160  typename tmat2x4<T>::value_type const & s);
    +
    161 
    +
    162  template <typename T>
    +
    163  tmat2x4<T> operator- (
    +
    164  tmat2x4<T> const & m1,
    +
    165  tmat2x4<T> const & m2);
    +
    166 
    +
    167  template <typename T>
    +
    168  tmat2x4<T> operator* (
    +
    169  tmat2x4<T> const & m,
    +
    170  typename tmat2x4<T>::value_type const & s);
    +
    171 
    +
    172  template <typename T>
    +
    173  tmat2x4<T> operator* (
    +
    174  typename tmat2x4<T>::value_type const & s,
    +
    175  tmat2x4<T> const & m);
    +
    176 
    +
    177  template <typename T>
    +
    178  typename tmat2x4<T>::col_type operator* (
    +
    179  tmat2x4<T> const & m,
    +
    180  typename tmat2x4<T>::row_type const & v);
    +
    181 
    +
    182  template <typename T>
    +
    183  typename tmat2x4<T>::row_type operator* (
    +
    184  typename tmat2x4<T>::col_type const & v,
    +
    185  tmat2x4<T> const & m);
    +
    186 
    +
    187  template <typename T>
    +
    188  tmat4x4<T> operator* (
    +
    189  tmat2x4<T> const & m1,
    +
    190  tmat4x2<T> const & m2);
    +
    191 
    +
    192  template <typename T>
    +
    193  tmat2x4<T> operator* (
    +
    194  tmat2x4<T> const & m1,
    +
    195  tmat2x2<T> const & m2);
    +
    196 
    +
    197  template <typename T>
    +
    198  tmat3x4<T> operator* (
    +
    199  tmat2x4<T> const & m1,
    +
    200  tmat3x2<T> const & m2);
    +
    201 
    +
    202  template <typename T>
    +
    203  tmat2x4<T> operator/ (
    +
    204  tmat2x4<T> const & m,
    +
    205  typename tmat2x4<T>::value_type const & s);
    +
    206 
    +
    207  template <typename T>
    +
    208  tmat2x4<T> operator/ (
    +
    209  typename tmat2x4<T>::value_type const & s,
    +
    210  tmat2x4<T> const & m);
    +
    211 
    +
    212  // Unary constant operators
    +
    213  template <typename T>
    +
    214  tmat2x4<T> const operator- (
    +
    215  tmat2x4<T> const & m);
    +
    216 
    +
    217  template <typename T>
    +
    218  tmat2x4<T> const operator-- (
    +
    219  tmat2x4<T> const & m,
    +
    220  int);
    +
    221 
    +
    222  template <typename T>
    +
    223  tmat2x4<T> const operator++ (
    +
    224  tmat2x4<T> const & m,
    +
    225  int);
    +
    226 
    +
    227 } //namespace detail
    +
    228 
    +
    231 
    +
    237  typedef detail::tmat2x4<lowp_float> lowp_mat2x4;
    +
    238 
    +
    244  typedef detail::tmat2x4<mediump_float> mediump_mat2x4;
    +
    245 
    +
    251  typedef detail::tmat2x4<highp_float> highp_mat2x4;
    +
    252 
    +
    254 }//namespace glm
    +
    255 
    +
    256 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    257 #include "type_mat2x4.inl"
    +
    258 #endif
    +
    259 
    +
    260 #endif //glm_core_type_mat2x4
    +
    + - diff --git a/doc/api/a00102.html b/doc/api/a00102.html index 75cefa3a..b63768c7 100644 --- a/doc/api/a00102.html +++ b/doc/api/a00102.html @@ -2,42 +2,31 @@ - -type_mat3x3.hpp File Reference + +type_mat3x2.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,50 +35,49 @@
  • File List
  • + +
    -
    type_mat3x3.hpp File Reference
    -
    +
    type_mat3x2.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - + + + + + +

    +

    Typedefs

    typedef detail::tmat3x3
    -< highp_float > 
    highp_mat3
    typedef detail::tmat3x3
    -< highp_float > 
    highp_mat3x3
    typedef detail::tmat3x3
    -< lowp_float > 
    lowp_mat3
    typedef detail::tmat3x3
    -< lowp_float > 
    lowp_mat3x3
    typedef detail::tmat3x3
    -< mediump_float > 
    mediump_mat3
    typedef detail::tmat3x3
    -< mediump_float > 
    mediump_mat3x3
    typedef detail::tmat3x2
    +< highp_float > 
    highp_mat3x2
     
    typedef detail::tmat3x2
    +< lowp_float > 
    lowp_mat3x2
     
    typedef detail::tmat3x2
    +< mediump_float > 
    mediump_mat3x2
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2005-01-27 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat3x3.hpp.

    -
    - +

    GLM Core

    +
    Date
    2006-08-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat3x2.hpp.

    + + - diff --git a/doc/api/a00102_source.html b/doc/api/a00102_source.html index 2822f3ed..612f8587 100644 --- a/doc/api/a00102_source.html +++ b/doc/api/a00102_source.html @@ -2,42 +2,31 @@ - -type_mat3x3.hpp Source File + +type_mat3x2.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,303 +35,268 @@
  • File List
  • + +
    -
    type_mat3x3.hpp
    -
    +
    type_mat3x2.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat3x3
    -00030 #define glm_core_type_mat3x3
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // @brief Template for 3 * 3 matrix of floating-point numbers.
    -00052         // @ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat3x3
    -00055         {
    -00056                 enum ctor{null};
    -00057                 typedef T value_type;
    -00058                 typedef std::size_t size_type;
    -00059                 typedef tvec3<T> col_type;
    -00060                 typedef tvec3<T> row_type;
    -00061         GLM_FUNC_DECL size_type length() const;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat3x3<T> type;
    -00066                 typedef tmat3x3<T> transpose_type;
    -00067 
    -00068         public:
    -00071                 GLM_FUNC_DECL tmat3x3<T> _inverse() const;
    -00073         
    -00074         private:
    -00075                 // Data
    -00076                 col_type value[3];
    -00077 
    -00078         public:
    -00079                 // Constructors
    -00080                 GLM_FUNC_DECL tmat3x3();
    -00081                 GLM_FUNC_DECL tmat3x3(tmat3x3 const & m);
    -00082 
    -00083                 GLM_FUNC_DECL explicit tmat3x3(
    -00084                         ctor Null);
    -00085                 GLM_FUNC_DECL explicit tmat3x3(
    -00086                         value_type const & s);
    -00087                 GLM_FUNC_DECL explicit tmat3x3(
    -00088                         value_type const & x0, value_type const & y0, value_type const & z0,
    -00089                         value_type const & x1, value_type const & y1, value_type const & z1,
    -00090                         value_type const & x2, value_type const & y2, value_type const & z2);
    -00091                 GLM_FUNC_DECL explicit tmat3x3(
    -00092                         col_type const & v0, 
    -00093                         col_type const & v1,
    -00094                         col_type const & v2);
    -00095 
    -00097                 // Conversions
    -00098                 template <typename U> 
    -00099                 GLM_FUNC_DECL explicit tmat3x3(
    -00100             U const & x);
    -00101                         
    -00102                 template 
    -00103         <
    -00104             typename X1, typename Y1, typename Z1, 
    -00105             typename X2, typename Y2, typename Z2, 
    -00106             typename X3, typename Y3, typename Z3
    -00107         > 
    -00108                 GLM_FUNC_DECL explicit tmat3x3(
    -00109             X1 const & x1, Y1 const & y1, Z1 const & z1, 
    -00110             X2 const & x2, Y2 const & y2, Z2 const & z2, 
    -00111             X3 const & x3, Y3 const & y3, Z3 const & z3);
    -00112                         
    -00113                 template <typename V1, typename V2, typename V3> 
    -00114                 GLM_FUNC_DECL explicit tmat3x3(
    -00115             tvec3<V1> const & v1, 
    -00116             tvec3<V2> const & v2,
    -00117             tvec3<V3> const & v3);
    -00118             
    -00119                 // Matrix conversions
    -00120                 template <typename U> 
    -00121                 GLM_FUNC_DECL explicit tmat3x3(tmat3x3<U> const & m);
    -00122 
    -00123                 GLM_FUNC_DECL explicit tmat3x3(tmat2x2<T> const & x);
    -00124                 GLM_FUNC_DECL explicit tmat3x3(tmat4x4<T> const & x);
    -00125                 GLM_FUNC_DECL explicit tmat3x3(tmat2x3<T> const & x);
    -00126                 GLM_FUNC_DECL explicit tmat3x3(tmat3x2<T> const & x);
    -00127                 GLM_FUNC_DECL explicit tmat3x3(tmat2x4<T> const & x);
    -00128                 GLM_FUNC_DECL explicit tmat3x3(tmat4x2<T> const & x);
    -00129                 GLM_FUNC_DECL explicit tmat3x3(tmat3x4<T> const & x);
    -00130                 GLM_FUNC_DECL explicit tmat3x3(tmat4x3<T> const & x);
    -00131 
    -00132                 // Accesses
    -00133                 GLM_FUNC_DECL col_type & operator[](size_type i);
    -00134                 GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    -00135 
    -00136                 // Unary updatable operators
    -00137                 GLM_FUNC_DECL tmat3x3<T>& operator=  (tmat3x3<T> const & m);
    -00138                 template <typename U> 
    -00139                 GLM_FUNC_DECL tmat3x3<T>& operator=  (tmat3x3<U> const & m);
    -00140                 template <typename U> 
    -00141                 GLM_FUNC_DECL tmat3x3<T>& operator+= (U const & s);
    -00142                 template <typename U> 
    -00143                 GLM_FUNC_DECL tmat3x3<T>& operator+= (tmat3x3<U> const & m);
    -00144                 template <typename U> 
    -00145                 GLM_FUNC_DECL tmat3x3<T>& operator-= (U const & s);
    -00146                 template <typename U> 
    -00147                 GLM_FUNC_DECL tmat3x3<T>& operator-= (tmat3x3<U> const & m);
    -00148                 template <typename U> 
    -00149                 GLM_FUNC_DECL tmat3x3<T>& operator*= (U const & s);
    -00150                 template <typename U> 
    -00151                 GLM_FUNC_DECL tmat3x3<T>& operator*= (tmat3x3<U> const & m);
    -00152                 template <typename U> 
    -00153                 GLM_FUNC_DECL tmat3x3<T>& operator/= (U const & s);
    -00154                 template <typename U> 
    -00155                 GLM_FUNC_DECL tmat3x3<T>& operator/= (tmat3x3<U> const & m);
    -00156                 GLM_FUNC_DECL tmat3x3<T>& operator++ ();
    -00157                 GLM_FUNC_DECL tmat3x3<T>& operator-- ();
    -00158         };
    -00159 
    -00160         // Binary operators
    -00161         template <typename T> 
    -00162         tmat3x3<T> operator+ (
    -00163                 tmat3x3<T> const & m, 
    -00164                 typename tmat3x3<T>::value_type const & s);
    -00165 
    -00166         template <typename T> 
    -00167         tmat3x3<T> operator+ (
    -00168                 typename tmat3x3<T>::value_type const & s, 
    -00169                 tmat3x3<T> const & m);
    -00170 
    -00171         template <typename T> 
    -00172         tmat3x3<T> operator+ (
    -00173                 tmat3x3<T> const & m1, 
    -00174                 tmat3x3<T> const & m2);
    -00175             
    -00176         template <typename T> 
    -00177         tmat3x3<T> operator- (
    -00178                 tmat3x3<T> const & m, 
    -00179                 typename tmat3x3<T>::value_type const & s);
    -00180 
    -00181         template <typename T> 
    -00182         tmat3x3<T> operator- (
    -00183                 typename tmat3x3<T>::value_type const & s, 
    -00184                 tmat3x3<T> const & m);
    -00185 
    -00186         template <typename T> 
    -00187         tmat3x3<T> operator- (
    -00188                 tmat3x3<T> const & m1, 
    -00189                 tmat3x3<T> const & m2);
    -00190 
    -00191         template <typename T> 
    -00192         tmat3x3<T> operator* (
    -00193                 tmat3x3<T> const & m, 
    -00194                 typename tmat3x3<T>::value_type const & s);
    -00195 
    -00196         template <typename T> 
    -00197         tmat3x3<T> operator* (
    -00198                 typename tmat3x3<T>::value_type const & s, 
    -00199                 tmat3x3<T> const & m);
    -00200 
    -00201         template <typename T> 
    -00202         typename tmat3x3<T>::col_type operator* (
    -00203                 tmat3x3<T> const & m, 
    -00204                 typename tmat3x3<T>::row_type const & v);
    -00205 
    -00206         template <typename T> 
    -00207         typename tmat3x3<T>::row_type operator* (
    -00208                 typename tmat3x3<T>::col_type const & v, 
    -00209                 tmat3x3<T> const & m);
    -00210 
    -00211         template <typename T> 
    -00212         tmat3x3<T> operator* (
    -00213                 tmat3x3<T> const & m1, 
    -00214                 tmat3x3<T> const & m2);
    -00215                 
    -00216         template <typename T>
    -00217         tmat2x3<T> operator* (
    -00218                 tmat3x3<T> const & m1, 
    -00219                 tmat2x3<T> const & m2);
    -00220                 
    -00221         template <typename T>
    -00222         tmat4x3<T> operator* (
    -00223                 tmat3x3<T> const & m1, 
    -00224                 tmat4x3<T> const & m2);
    -00225 
    -00226         template <typename T> 
    -00227         tmat3x3<T> operator/ (
    -00228                 tmat3x3<T> const & m, 
    -00229                 typename tmat3x3<T>::value_type const & s);
    -00230 
    -00231         template <typename T> 
    -00232         tmat3x3<T> operator/ (
    -00233                 typename tmat3x3<T>::value_type const & s, 
    -00234                 tmat3x3<T> const & m);
    -00235 
    -00236         template <typename T> 
    -00237         typename tmat3x3<T>::col_type operator/ (
    -00238                 tmat3x3<T> const & m, 
    -00239                 typename tmat3x3<T>::row_type const & v);
    -00240 
    -00241         template <typename T> 
    -00242         typename tmat3x3<T>::row_type operator/ (
    -00243                 typename tmat3x3<T>::col_type const & v, 
    -00244                 tmat3x3<T> const & m);
    -00245 
    -00246         template <typename T> 
    -00247         tmat3x3<T> operator/ (
    -00248                 tmat3x3<T> const & m1, 
    -00249                 tmat3x3<T> const & m2);
    -00250 
    -00251         // Unary constant operators
    -00252         template <typename T> 
    -00253         tmat3x3<T> const operator-  (
    -00254                 tmat3x3<T> const & m);
    -00255 
    -00256         template <typename T> 
    -00257         tmat3x3<T> const operator-- (
    -00258                 tmat3x3<T> const & m, 
    -00259                 int);
    -00260 
    -00261         template <typename T> 
    -00262         tmat3x3<T> const operator++ (
    -00263                 tmat3x3<T> const & m, 
    -00264                 int);
    -00265 
    -00266 } //namespace detail
    -00267 
    -00270 
    -00276         typedef detail::tmat3x3<lowp_float>             lowp_mat3;
    -00277         
    -00283         typedef detail::tmat3x3<mediump_float>  mediump_mat3;
    -00284         
    -00290         typedef detail::tmat3x3<highp_float>    highp_mat3;
    -00291 
    -00297         typedef detail::tmat3x3<lowp_float>             lowp_mat3x3;
    -00298 
    -00304         typedef detail::tmat3x3<mediump_float>  mediump_mat3x3;
    -00305 
    -00311         typedef detail::tmat3x3<highp_float>    highp_mat3x3;
    -00312 
    -00314 }//namespace glm
    -00315 
    -00316 #ifndef GLM_EXTERNAL_TEMPLATE
    -00317 #include "type_mat3x3.inl"
    -00318 #endif
    -00319 
    -00320 #endif //glm_core_type_mat3x3
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat3x2
    +
    30 #define glm_core_type_mat3x2
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat3x2
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec2<T> col_type;
    +
    58  typedef tvec3<T> row_type;
    +
    59  typedef tmat3x2<T> type;
    +
    60  typedef tmat2x3<T> transpose_type;
    +
    61 
    +
    62  static GLM_FUNC_DECL size_type col_size();
    +
    63  static GLM_FUNC_DECL size_type row_size();
    +
    64 
    +
    65  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    66 
    +
    67  private:
    +
    68  // Data
    +
    69  col_type value[3];
    +
    70 
    +
    71  public:
    +
    72  // Constructors
    +
    73  GLM_FUNC_DECL tmat3x2();
    +
    74  GLM_FUNC_DECL tmat3x2(tmat3x2 const & m);
    +
    75 
    +
    76  GLM_FUNC_DECL explicit tmat3x2(
    +
    77  ctor);
    +
    78  GLM_FUNC_DECL explicit tmat3x2(
    +
    79  value_type const & s);
    +
    80  GLM_FUNC_DECL explicit tmat3x2(
    +
    81  value_type const & x0, value_type const & y0,
    +
    82  value_type const & x1, value_type const & y1,
    +
    83  value_type const & x2, value_type const & y2);
    +
    84  GLM_FUNC_DECL explicit tmat3x2(
    +
    85  col_type const & v0,
    +
    86  col_type const & v1,
    +
    87  col_type const & v2);
    +
    88 
    +
    90  // Conversions
    +
    91  template <typename U>
    +
    92  GLM_FUNC_DECL explicit tmat3x2(
    +
    93  U const & x);
    +
    94 
    +
    95  template
    +
    96  <
    +
    97  typename X1, typename Y1,
    +
    98  typename X2, typename Y2,
    +
    99  typename X3, typename Y3
    +
    100  >
    +
    101  GLM_FUNC_DECL explicit tmat3x2(
    +
    102  X1 const & x1, Y1 const & y1,
    +
    103  X2 const & x2, Y2 const & y2,
    +
    104  X3 const & x3, Y3 const & y3);
    +
    105 
    +
    106  template <typename V1, typename V2, typename V3>
    +
    107  GLM_FUNC_DECL explicit tmat3x2(
    +
    108  tvec2<V1> const & v1,
    +
    109  tvec2<V2> const & v2,
    +
    110  tvec2<V3> const & v3);
    +
    111 
    +
    112  // Matrix conversions
    +
    113  template <typename U>
    +
    114  GLM_FUNC_DECL explicit tmat3x2(tmat3x2<U> const & m);
    +
    115 
    +
    116  GLM_FUNC_DECL explicit tmat3x2(tmat2x2<T> const & x);
    +
    117  GLM_FUNC_DECL explicit tmat3x2(tmat3x3<T> const & x);
    +
    118  GLM_FUNC_DECL explicit tmat3x2(tmat4x4<T> const & x);
    +
    119  GLM_FUNC_DECL explicit tmat3x2(tmat2x3<T> const & x);
    +
    120  GLM_FUNC_DECL explicit tmat3x2(tmat2x4<T> const & x);
    +
    121  GLM_FUNC_DECL explicit tmat3x2(tmat3x4<T> const & x);
    +
    122  GLM_FUNC_DECL explicit tmat3x2(tmat4x2<T> const & x);
    +
    123  GLM_FUNC_DECL explicit tmat3x2(tmat4x3<T> const & x);
    +
    124 
    +
    125  // Accesses
    +
    126  GLM_FUNC_DECL col_type & operator[](size_type i);
    +
    127  GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    +
    128 
    +
    129  // Unary updatable operators
    +
    130  GLM_FUNC_DECL tmat3x2<T> & operator= (tmat3x2<T> const & m);
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL tmat3x2<T> & operator= (tmat3x2<U> const & m);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tmat3x2<T> & operator+= (U const & s);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tmat3x2<T> & operator+= (tmat3x2<U> const & m);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tmat3x2<T> & operator-= (U const & s);
    +
    139  template <typename U>
    +
    140  GLM_FUNC_DECL tmat3x2<T> & operator-= (tmat3x2<U> const & m);
    +
    141  template <typename U>
    +
    142  GLM_FUNC_DECL tmat3x2<T> & operator*= (U const & s);
    +
    143  template <typename U>
    +
    144  GLM_FUNC_DECL tmat3x2<T> & operator*= (tmat3x2<U> const & m);
    +
    145  template <typename U>
    +
    146  GLM_FUNC_DECL tmat3x2<T> & operator/= (U const & s);
    +
    147 
    +
    148  GLM_FUNC_DECL tmat3x2<T> & operator++ ();
    +
    149  GLM_FUNC_DECL tmat3x2<T> & operator-- ();
    +
    150  };
    +
    151 
    +
    152  // Binary operators
    +
    153  template <typename T>
    +
    154  tmat3x2<T> operator+ (
    +
    155  tmat3x2<T> const & m,
    +
    156  typename tmat3x2<T>::value_type const & s);
    +
    157 
    +
    158  template <typename T>
    +
    159  tmat3x2<T> operator+ (
    +
    160  tmat3x2<T> const & m1,
    +
    161  tmat3x2<T> const & m2);
    +
    162 
    +
    163  template <typename T>
    +
    164  tmat3x2<T> operator- (
    +
    165  tmat3x2<T> const & m,
    +
    166  typename tmat3x2<T>::value_type const & s);
    +
    167 
    +
    168  template <typename T>
    +
    169  tmat3x2<T> operator- (
    +
    170  tmat3x2<T> const & m1,
    +
    171  tmat3x2<T> const & m2);
    +
    172 
    +
    173  template <typename T>
    +
    174  tmat3x2<T> operator* (
    +
    175  tmat3x2<T> const & m,
    +
    176  typename tmat3x2<T>::value_type const & s);
    +
    177 
    +
    178  template <typename T>
    +
    179  tmat3x2<T> operator* (
    +
    180  typename tmat3x2<T>::value_type const & s,
    +
    181  tmat3x2<T> const & m);
    +
    182 
    +
    183  template <typename T>
    +
    184  typename tmat3x2<T>::col_type operator* (
    +
    185  tmat3x2<T> const & m,
    +
    186  typename tmat3x2<T>::row_type const & v);
    +
    187 
    +
    188  template <typename T>
    +
    189  typename tmat3x2<T>::row_type operator* (
    +
    190  typename tmat3x2<T>::col_type const & v,
    +
    191  tmat3x2<T> const & m);
    +
    192 
    +
    193  template <typename T>
    +
    194  tmat2x2<T> operator* (
    +
    195  tmat3x2<T> const & m1,
    +
    196  tmat2x3<T> const & m2);
    +
    197 
    +
    198  template <typename T>
    +
    199  tmat3x2<T> operator* (
    +
    200  tmat3x2<T> const & m1,
    +
    201  tmat3x3<T> const & m2);
    +
    202 
    +
    203  template <typename T>
    +
    204  tmat4x2<T> operator* (
    +
    205  tmat3x2<T> const & m1,
    +
    206  tmat4x3<T> const & m2);
    +
    207 
    +
    208  template <typename T>
    +
    209  tmat3x2<T> operator/ (
    +
    210  tmat3x2<T> const & m,
    +
    211  typename tmat3x2<T>::value_type const & s);
    +
    212 
    +
    213  template <typename T>
    +
    214  tmat3x2<T> operator/ (
    +
    215  typename tmat3x2<T>::value_type const & s,
    +
    216  tmat3x2<T> const & m);
    +
    217 
    +
    218  // Unary constant operators
    +
    219  template <typename T>
    +
    220  tmat3x2<T> const operator- (
    +
    221  tmat3x2<T> const & m);
    +
    222 
    +
    223  template <typename T>
    +
    224  tmat3x2<T> const operator-- (
    +
    225  tmat3x2<T> const & m,
    +
    226  int);
    +
    227 
    +
    228  template <typename T>
    +
    229  tmat3x2<T> const operator++ (
    +
    230  tmat3x2<T> const & m,
    +
    231  int);
    +
    232 } //namespace detail
    +
    233 
    +
    236 
    +
    242  typedef detail::tmat3x2<lowp_float> lowp_mat3x2;
    +
    243 
    +
    249  typedef detail::tmat3x2<mediump_float> mediump_mat3x2;
    +
    250 
    +
    256  typedef detail::tmat3x2<highp_float> highp_mat3x2;
    +
    257 
    +
    259 }//namespace glm
    +
    260 
    +
    261 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    262 #include "type_mat3x2.inl"
    +
    263 #endif
    +
    264 
    +
    265 #endif //glm_core_type_mat3x2
    +
    + - diff --git a/doc/api/a00103.html b/doc/api/a00103.html index a48cf7d7..a2bbe5bc 100644 --- a/doc/api/a00103.html +++ b/doc/api/a00103.html @@ -2,42 +2,31 @@ - -type_mat3x4.hpp File Reference + +type_mat3x3.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,44 +35,34 @@
  • File List
  • + +
    -
    -
    type_mat3x4.hpp File Reference
    -
    +
    type_mat3x3.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - -

    -Typedefs

    typedef detail::tmat3x4
    -< highp_float > 
    highp_mat3x4
    typedef detail::tmat3x4
    -< lowp_float > 
    lowp_mat3x4
    typedef detail::tmat3x4
    -< mediump_float > 
    mediump_mat3x4
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2006-08-05 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat3x4.hpp.

    -
    - +

    GLM Core

    +
    Date
    2005-01-27 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat3x3.hpp.

    + + - diff --git a/doc/api/a00103_source.html b/doc/api/a00103_source.html index 38d2ae47..e3fb9fc1 100644 --- a/doc/api/a00103_source.html +++ b/doc/api/a00103_source.html @@ -2,42 +2,31 @@ - -type_mat3x4.hpp Source File + +type_mat3x3.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,268 +35,303 @@
  • File List
  • + +
    -
    type_mat3x4.hpp
    -
    +
    type_mat3x3.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat3x4
    -00030 #define glm_core_type_mat3x4
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // \brief Template for 3 columns and 4 rows matrix of floating-point numbers.
    -00052         // \ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat3x4
    -00055         {
    -00056                 enum ctor{null};
    -00057                 typedef T value_type;
    -00058                 typedef std::size_t size_type;
    -00059                 typedef tvec4<T> col_type;
    -00060                 typedef tvec3<T> row_type;
    -00061         GLM_FUNC_DECL size_type length() const;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat3x4<T> type;
    -00066                 typedef tmat4x3<T> transpose_type;
    -00067 
    -00068         private:
    -00069                 // Data 
    -00070                 col_type value[3];
    -00071 
    -00072         public:
    -00073                 // Constructors
    -00074                 GLM_FUNC_DECL tmat3x4();
    -00075                 GLM_FUNC_DECL tmat3x4(tmat3x4 const & m);
    -00076 
    -00077                 GLM_FUNC_DECL explicit tmat3x4(
    -00078                         ctor Null);
    -00079                 GLM_FUNC_DECL explicit tmat3x4(
    -00080                         value_type const & s);
    -00081                 GLM_FUNC_DECL explicit tmat3x4(
    -00082                         value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
    -00083                         value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
    -00084                         value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2);
    -00085                 GLM_FUNC_DECL explicit tmat3x4(
    -00086                         col_type const & v0, 
    -00087                         col_type const & v1,
    -00088                         col_type const & v2);
    -00089 
    -00091                 // Conversions
    -00092                 template <typename U> 
    -00093                 GLM_FUNC_DECL explicit tmat3x4(
    -00094             U const & x);
    -00095                         
    -00096                 template 
    -00097         <
    -00098             typename X1, typename Y1, typename Z1, typename W1, 
    -00099             typename X2, typename Y2, typename Z2, typename W2, 
    -00100             typename X3, typename Y3, typename Z3, typename W3 
    -00101         > 
    -00102                 GLM_FUNC_DECL explicit tmat3x4(
    -00103             X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, 
    -00104             X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, 
    -00105             X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3);
    -00106                         
    -00107                 template <typename V1, typename V2, typename V3> 
    -00108                 GLM_FUNC_DECL explicit tmat3x4(
    -00109             tvec4<V1> const & v1, 
    -00110             tvec4<V2> const & v2,
    -00111             tvec4<V3> const & v3);
    -00112             
    -00113                 // Matrix conversion
    -00114                 template <typename U> 
    -00115                 GLM_FUNC_DECL explicit tmat3x4(tmat3x4<U> const & m);
    -00116 
    -00117                 GLM_FUNC_DECL explicit tmat3x4(tmat2x2<T> const & x);
    -00118                 GLM_FUNC_DECL explicit tmat3x4(tmat3x3<T> const & x);
    -00119                 GLM_FUNC_DECL explicit tmat3x4(tmat4x4<T> const & x);
    -00120                 GLM_FUNC_DECL explicit tmat3x4(tmat2x3<T> const & x);
    -00121                 GLM_FUNC_DECL explicit tmat3x4(tmat3x2<T> const & x);
    -00122                 GLM_FUNC_DECL explicit tmat3x4(tmat2x4<T> const & x);
    -00123                 GLM_FUNC_DECL explicit tmat3x4(tmat4x2<T> const & x);
    -00124                 GLM_FUNC_DECL explicit tmat3x4(tmat4x3<T> const & x);
    -00125 
    -00126                 // Accesses
    -00127                 col_type & operator[](size_type i);
    -00128                 col_type const & operator[](size_type i) const;
    -00129 
    -00130                 // Unary updatable operators
    -00131                 GLM_FUNC_DECL tmat3x4<T> & operator=  (tmat3x4<T> const & m);
    -00132                 template <typename U> 
    -00133                 GLM_FUNC_DECL tmat3x4<T> & operator=  (tmat3x4<U> const & m);
    -00134                 template <typename U> 
    -00135                 GLM_FUNC_DECL tmat3x4<T> & operator+= (U const & s);
    -00136                 template <typename U> 
    -00137                 GLM_FUNC_DECL tmat3x4<T> & operator+= (tmat3x4<U> const & m);
    -00138                 template <typename U> 
    -00139                 GLM_FUNC_DECL tmat3x4<T> & operator-= (U const & s);
    -00140                 template <typename U> 
    -00141                 GLM_FUNC_DECL tmat3x4<T> & operator-= (tmat3x4<U> const & m);
    -00142                 template <typename U> 
    -00143                 GLM_FUNC_DECL tmat3x4<T> & operator*= (U const & s);
    -00144                 template <typename U> 
    -00145                 GLM_FUNC_DECL tmat3x4<T> & operator*= (tmat3x4<U> const & m);
    -00146                 template <typename U> 
    -00147                 GLM_FUNC_DECL tmat3x4<T> & operator/= (U const & s);
    -00148 
    -00149                 GLM_FUNC_DECL tmat3x4<T> & operator++ ();
    -00150                 GLM_FUNC_DECL tmat3x4<T> & operator-- ();
    -00151         };
    -00152 
    -00153         // Binary operators
    -00154         template <typename T> 
    -00155         tmat3x4<T> operator+ (
    -00156                 tmat3x4<T> const & m, 
    -00157                 typename tmat3x4<T>::value_type const & s);
    -00158             
    -00159         template <typename T> 
    -00160         tmat3x4<T> operator+ (
    -00161                 tmat3x4<T> const & m1, 
    -00162                 tmat3x4<T> const & m2);
    -00163             
    -00164         template <typename T> 
    -00165         tmat3x4<T> operator- (
    -00166                 tmat3x4<T> const & m, 
    -00167                 typename tmat3x4<T>::value_type const & s);
    -00168 
    -00169         template <typename T> 
    -00170         tmat3x4<T> operator- (
    -00171                 tmat3x4<T> const & m1, 
    -00172                 tmat3x4<T> const & m2);
    -00173 
    -00174         template <typename T> 
    -00175         tmat3x4<T> operator* (
    -00176                 tmat3x4<T> const & m, 
    -00177                 typename tmat3x4<T>::value_type const & s);
    -00178 
    -00179         template <typename T> 
    -00180         tmat3x4<T> operator* (
    -00181                 typename tmat3x4<T>::value_type const & s, 
    -00182                 tmat3x4<T> const & m);
    -00183 
    -00184         template <typename T>
    -00185         typename tmat3x4<T>::col_type operator* (
    -00186                 tmat3x4<T> const & m, 
    -00187                 typename tmat3x4<T>::row_type const & v);
    -00188 
    -00189         template <typename T> 
    -00190         typename tmat3x4<T>::row_type operator* (
    -00191                 typename tmat3x4<T>::col_type const & v, 
    -00192                 tmat3x4<T> const & m);
    -00193 
    -00194         template <typename T>
    -00195         tmat4x4<T> operator* (
    -00196                 tmat3x4<T> const & m1, 
    -00197                 tmat4x3<T> const & m2);
    -00198                 
    -00199         template <typename T>
    -00200         tmat2x4<T> operator* (
    -00201                 tmat3x4<T> const & m1, 
    -00202                 tmat2x3<T> const & m2);
    -00203                 
    -00204         template <typename T>
    -00205         tmat3x4<T> operator* (
    -00206                 tmat3x4<T> const & m1, 
    -00207                 tmat3x3<T> const & m2);
    -00208 
    -00209         template <typename T> 
    -00210         tmat3x4<T> operator/ (
    -00211                 tmat3x4<T> const & m, 
    -00212                 typename tmat3x4<T>::value_type const & s);
    -00213 
    -00214         template <typename T> 
    -00215         tmat3x4<T> operator/ (
    -00216                 typename tmat3x4<T>::value_type const & s, 
    -00217                 tmat3x4<T> const & m);
    -00218 
    -00219         // Unary constant operators
    -00220         template <typename T> 
    -00221         tmat3x4<T> const operator-  (
    -00222                 tmat3x4<T> const & m);
    -00223 
    -00224         template <typename T> 
    -00225         tmat3x4<T> const operator-- (
    -00226                 tmat3x4<T> const & m, 
    -00227                 int);
    -00228 
    -00229         template <typename T> 
    -00230         tmat3x4<T> const operator++ (
    -00231                 tmat3x4<T> const & m, 
    -00232                 int);
    -00233 
    -00234 }//namespace detail
    -00235 
    -00238 
    -00244         typedef detail::tmat3x4<lowp_float>             lowp_mat3x4;
    -00245 
    -00251         typedef detail::tmat3x4<mediump_float>  mediump_mat3x4;
    -00252 
    -00258         typedef detail::tmat3x4<highp_float>    highp_mat3x4;
    -00259 
    -00261 }//namespace glm
    -00262 
    -00263 #ifndef GLM_EXTERNAL_TEMPLATE
    -00264 #include "type_mat3x4.inl"
    -00265 #endif
    -00266 
    -00267 #endif //glm_core_type_mat3x4
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat3x3
    +
    30 #define glm_core_type_mat3x3
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat3x3
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec3<T> col_type;
    +
    58  typedef tvec3<T> row_type;
    +
    59  typedef tmat3x3<T> type;
    +
    60  typedef tmat3x3<T> transpose_type;
    +
    61 
    +
    62  static GLM_FUNC_DECL size_type col_size();
    +
    63  static GLM_FUNC_DECL size_type row_size();
    +
    64 
    +
    65  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    66 
    +
    67  public:
    +
    70  GLM_FUNC_DECL tmat3x3<T> _inverse() const;
    +
    72 
    +
    73  private:
    +
    74  // Data
    +
    75  col_type value[3];
    +
    76 
    +
    77  public:
    +
    78  // Constructors
    +
    79  GLM_FUNC_DECL tmat3x3();
    +
    80  GLM_FUNC_DECL tmat3x3(tmat3x3 const & m);
    +
    81 
    +
    82  GLM_FUNC_DECL explicit tmat3x3(
    +
    83  ctor Null);
    +
    84  GLM_FUNC_DECL explicit tmat3x3(
    +
    85  value_type const & s);
    +
    86  GLM_FUNC_DECL explicit tmat3x3(
    +
    87  value_type const & x0, value_type const & y0, value_type const & z0,
    +
    88  value_type const & x1, value_type const & y1, value_type const & z1,
    +
    89  value_type const & x2, value_type const & y2, value_type const & z2);
    +
    90  GLM_FUNC_DECL explicit tmat3x3(
    +
    91  col_type const & v0,
    +
    92  col_type const & v1,
    +
    93  col_type const & v2);
    +
    94 
    +
    96  // Conversions
    +
    97  template <typename U>
    +
    98  GLM_FUNC_DECL explicit tmat3x3(
    +
    99  U const & x);
    +
    100 
    +
    101  template
    +
    102  <
    +
    103  typename X1, typename Y1, typename Z1,
    +
    104  typename X2, typename Y2, typename Z2,
    +
    105  typename X3, typename Y3, typename Z3
    +
    106  >
    +
    107  GLM_FUNC_DECL explicit tmat3x3(
    +
    108  X1 const & x1, Y1 const & y1, Z1 const & z1,
    +
    109  X2 const & x2, Y2 const & y2, Z2 const & z2,
    +
    110  X3 const & x3, Y3 const & y3, Z3 const & z3);
    +
    111 
    +
    112  template <typename V1, typename V2, typename V3>
    +
    113  GLM_FUNC_DECL explicit tmat3x3(
    +
    114  tvec3<V1> const & v1,
    +
    115  tvec3<V2> const & v2,
    +
    116  tvec3<V3> const & v3);
    +
    117 
    +
    118  // Matrix conversions
    +
    119  template <typename U>
    +
    120  GLM_FUNC_DECL explicit tmat3x3(tmat3x3<U> const & m);
    +
    121 
    +
    122  GLM_FUNC_DECL explicit tmat3x3(tmat2x2<T> const & x);
    +
    123  GLM_FUNC_DECL explicit tmat3x3(tmat4x4<T> const & x);
    +
    124  GLM_FUNC_DECL explicit tmat3x3(tmat2x3<T> const & x);
    +
    125  GLM_FUNC_DECL explicit tmat3x3(tmat3x2<T> const & x);
    +
    126  GLM_FUNC_DECL explicit tmat3x3(tmat2x4<T> const & x);
    +
    127  GLM_FUNC_DECL explicit tmat3x3(tmat4x2<T> const & x);
    +
    128  GLM_FUNC_DECL explicit tmat3x3(tmat3x4<T> const & x);
    +
    129  GLM_FUNC_DECL explicit tmat3x3(tmat4x3<T> const & x);
    +
    130 
    +
    131  // Accesses
    +
    132  GLM_FUNC_DECL col_type & operator[](size_type i);
    +
    133  GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    +
    134 
    +
    135  // Unary updatable operators
    +
    136  GLM_FUNC_DECL tmat3x3<T>& operator= (tmat3x3<T> const & m);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tmat3x3<T>& operator= (tmat3x3<U> const & m);
    +
    139  template <typename U>
    +
    140  GLM_FUNC_DECL tmat3x3<T>& operator+= (U const & s);
    +
    141  template <typename U>
    +
    142  GLM_FUNC_DECL tmat3x3<T>& operator+= (tmat3x3<U> const & m);
    +
    143  template <typename U>
    +
    144  GLM_FUNC_DECL tmat3x3<T>& operator-= (U const & s);
    +
    145  template <typename U>
    +
    146  GLM_FUNC_DECL tmat3x3<T>& operator-= (tmat3x3<U> const & m);
    +
    147  template <typename U>
    +
    148  GLM_FUNC_DECL tmat3x3<T>& operator*= (U const & s);
    +
    149  template <typename U>
    +
    150  GLM_FUNC_DECL tmat3x3<T>& operator*= (tmat3x3<U> const & m);
    +
    151  template <typename U>
    +
    152  GLM_FUNC_DECL tmat3x3<T>& operator/= (U const & s);
    +
    153  template <typename U>
    +
    154  GLM_FUNC_DECL tmat3x3<T>& operator/= (tmat3x3<U> const & m);
    +
    155  GLM_FUNC_DECL tmat3x3<T>& operator++ ();
    +
    156  GLM_FUNC_DECL tmat3x3<T>& operator-- ();
    +
    157  };
    +
    158 
    +
    159  // Binary operators
    +
    160  template <typename T>
    +
    161  tmat3x3<T> operator+ (
    +
    162  tmat3x3<T> const & m,
    +
    163  typename tmat3x3<T>::value_type const & s);
    +
    164 
    +
    165  template <typename T>
    +
    166  tmat3x3<T> operator+ (
    +
    167  typename tmat3x3<T>::value_type const & s,
    +
    168  tmat3x3<T> const & m);
    +
    169 
    +
    170  template <typename T>
    +
    171  tmat3x3<T> operator+ (
    +
    172  tmat3x3<T> const & m1,
    +
    173  tmat3x3<T> const & m2);
    +
    174 
    +
    175  template <typename T>
    +
    176  tmat3x3<T> operator- (
    +
    177  tmat3x3<T> const & m,
    +
    178  typename tmat3x3<T>::value_type const & s);
    +
    179 
    +
    180  template <typename T>
    +
    181  tmat3x3<T> operator- (
    +
    182  typename tmat3x3<T>::value_type const & s,
    +
    183  tmat3x3<T> const & m);
    +
    184 
    +
    185  template <typename T>
    +
    186  tmat3x3<T> operator- (
    +
    187  tmat3x3<T> const & m1,
    +
    188  tmat3x3<T> const & m2);
    +
    189 
    +
    190  template <typename T>
    +
    191  tmat3x3<T> operator* (
    +
    192  tmat3x3<T> const & m,
    +
    193  typename tmat3x3<T>::value_type const & s);
    +
    194 
    +
    195  template <typename T>
    +
    196  tmat3x3<T> operator* (
    +
    197  typename tmat3x3<T>::value_type const & s,
    +
    198  tmat3x3<T> const & m);
    +
    199 
    +
    200  template <typename T>
    +
    201  typename tmat3x3<T>::col_type operator* (
    +
    202  tmat3x3<T> const & m,
    +
    203  typename tmat3x3<T>::row_type const & v);
    +
    204 
    +
    205  template <typename T>
    +
    206  typename tmat3x3<T>::row_type operator* (
    +
    207  typename tmat3x3<T>::col_type const & v,
    +
    208  tmat3x3<T> const & m);
    +
    209 
    +
    210  template <typename T>
    +
    211  tmat3x3<T> operator* (
    +
    212  tmat3x3<T> const & m1,
    +
    213  tmat3x3<T> const & m2);
    +
    214 
    +
    215  template <typename T>
    +
    216  tmat2x3<T> operator* (
    +
    217  tmat3x3<T> const & m1,
    +
    218  tmat2x3<T> const & m2);
    +
    219 
    +
    220  template <typename T>
    +
    221  tmat4x3<T> operator* (
    +
    222  tmat3x3<T> const & m1,
    +
    223  tmat4x3<T> const & m2);
    +
    224 
    +
    225  template <typename T>
    +
    226  tmat3x3<T> operator/ (
    +
    227  tmat3x3<T> const & m,
    +
    228  typename tmat3x3<T>::value_type const & s);
    +
    229 
    +
    230  template <typename T>
    +
    231  tmat3x3<T> operator/ (
    +
    232  typename tmat3x3<T>::value_type const & s,
    +
    233  tmat3x3<T> const & m);
    +
    234 
    +
    235  template <typename T>
    +
    236  typename tmat3x3<T>::col_type operator/ (
    +
    237  tmat3x3<T> const & m,
    +
    238  typename tmat3x3<T>::row_type const & v);
    +
    239 
    +
    240  template <typename T>
    +
    241  typename tmat3x3<T>::row_type operator/ (
    +
    242  typename tmat3x3<T>::col_type const & v,
    +
    243  tmat3x3<T> const & m);
    +
    244 
    +
    245  template <typename T>
    +
    246  tmat3x3<T> operator/ (
    +
    247  tmat3x3<T> const & m1,
    +
    248  tmat3x3<T> const & m2);
    +
    249 
    +
    250  // Unary constant operators
    +
    251  template <typename T>
    +
    252  tmat3x3<T> const operator- (
    +
    253  tmat3x3<T> const & m);
    +
    254 
    +
    255  template <typename T>
    +
    256  tmat3x3<T> const operator-- (
    +
    257  tmat3x3<T> const & m,
    +
    258  int);
    +
    259 
    +
    260  template <typename T>
    +
    261  tmat3x3<T> const operator++ (
    +
    262  tmat3x3<T> const & m,
    +
    263  int);
    +
    264 } //namespace detail
    +
    265 
    +
    268 
    +
    274  typedef detail::tmat3x3<lowp_float> lowp_mat3;
    +
    275 
    +
    281  typedef detail::tmat3x3<mediump_float> mediump_mat3;
    +
    282 
    +
    288  typedef detail::tmat3x3<highp_float> highp_mat3;
    +
    289 
    +
    295  typedef detail::tmat3x3<lowp_float> lowp_mat3x3;
    +
    296 
    +
    302  typedef detail::tmat3x3<mediump_float> mediump_mat3x3;
    +
    303 
    +
    309  typedef detail::tmat3x3<highp_float> highp_mat3x3;
    +
    310 
    +
    312 }//namespace glm
    +
    313 
    +
    314 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    315 #include "type_mat3x3.inl"
    +
    316 #endif
    +
    317 
    +
    318 #endif //glm_core_type_mat3x3
    +
    + - diff --git a/doc/api/a00104.html b/doc/api/a00104.html index 8359bddd..d1988af7 100644 --- a/doc/api/a00104.html +++ b/doc/api/a00104.html @@ -2,42 +2,31 @@ - -type_mat4x2.hpp File Reference + +type_mat3x4.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,44 +35,49 @@
  • File List
  • + +
    -
    type_mat4x2.hpp File Reference
    -
    +
    type_mat3x4.hpp File Reference
    +

    Go to the source code of this file.

    - - - - + + + + + +

    +

    Typedefs

    typedef detail::tmat4x2
    -< highp_float > 
    highp_mat4x2
    typedef detail::tmat4x2
    -< lowp_float > 
    lowp_mat4x2
    typedef detail::tmat4x2
    -< mediump_float > 
    mediump_mat4x2
    typedef detail::tmat3x4
    +< highp_float > 
    highp_mat3x4
     
    typedef detail::tmat3x4
    +< lowp_float > 
    lowp_mat3x4
     
    typedef detail::tmat3x4
    +< mediump_float > 
    mediump_mat3x4
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2006-10-01 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat4x2.hpp.

    -
    - +

    GLM Core

    +
    Date
    2006-08-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat3x4.hpp.

    + + - diff --git a/doc/api/a00104_source.html b/doc/api/a00104_source.html index bc8cefae..1d6180a9 100644 --- a/doc/api/a00104_source.html +++ b/doc/api/a00104_source.html @@ -2,42 +2,31 @@ - -type_mat4x2.hpp Source File + +type_mat3x4.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,273 +35,269 @@
  • File List
  • + +
    -
    type_mat4x2.hpp
    -
    +
    type_mat3x4.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat4x2
    -00030 #define glm_core_type_mat4x2
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // \brief Template for 4 columns and 2 rows matrix of floating-point numbers.
    -00052         // \ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat4x2
    -00055         {
    -00056                 enum ctor{null};
    -00057                 typedef T value_type;
    -00058                 typedef std::size_t size_type;
    -00059                 typedef tvec2<T> col_type;
    -00060                 typedef tvec4<T> row_type;
    -00061         GLM_FUNC_DECL size_type length() const;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat4x2<T> type;
    -00066                 typedef tmat2x4<T> transpose_type;
    -00067 
    -00068         private:
    -00069                 // Data 
    -00070                 col_type value[4];
    -00071 
    -00072         public:
    -00073                 // Constructors
    -00074                 GLM_FUNC_DECL tmat4x2();
    -00075                 GLM_FUNC_DECL tmat4x2(tmat4x2 const & m);
    -00076 
    -00077                 GLM_FUNC_DECL explicit tmat4x2(
    -00078                         ctor Null);
    -00079                 GLM_FUNC_DECL explicit tmat4x2(
    -00080                         value_type const & x);
    -00081                 GLM_FUNC_DECL explicit tmat4x2(
    -00082                         value_type const & x0, value_type const & y0,
    -00083                         value_type const & x1, value_type const & y1,
    -00084                         value_type const & x2, value_type const & y2,
    -00085                         value_type const & x3, value_type const & y3);
    -00086                 GLM_FUNC_DECL explicit tmat4x2(
    -00087                         col_type const & v0, 
    -00088                         col_type const & v1,
    -00089                         col_type const & v2,
    -00090                         col_type const & v3);
    -00091             
    -00093                 // Conversions
    -00094                 template <typename U> 
    -00095                 GLM_FUNC_DECL explicit tmat4x2(
    -00096             U const & x);
    -00097                         
    -00098                 template 
    -00099         <
    -00100             typename X1, typename Y1, 
    -00101             typename X2, typename Y2, 
    -00102             typename X3, typename Y3,
    -00103             typename X4, typename Y4
    -00104         > 
    -00105                 GLM_FUNC_DECL explicit tmat4x2(
    -00106             X1 const & x1, Y1 const & y1, 
    -00107             X2 const & x2, Y2 const & y2,
    -00108             X3 const & x3, Y3 const & y3,
    -00109             X4 const & x4, Y4 const & y4);
    -00110                         
    -00111                 template <typename V1, typename V2, typename V3, typename V4> 
    -00112                 GLM_FUNC_DECL explicit tmat4x2(
    -00113             tvec2<V1> const & v1, 
    -00114             tvec2<V2> const & v2,
    -00115             tvec2<V3> const & v3,
    -00116             tvec2<V4> const & v4);
    -00117             
    -00118                 // Matrix conversions
    -00119                 template <typename U> 
    -00120                 GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U> const & m);
    -00121                         
    -00122                 GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T> const & x);
    -00123                 GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T> const & x);
    -00124                 GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T> const & x);
    -00125                 GLM_FUNC_DECL explicit tmat4x2(tmat2x3<T> const & x);
    -00126                 GLM_FUNC_DECL explicit tmat4x2(tmat3x2<T> const & x);
    -00127                 GLM_FUNC_DECL explicit tmat4x2(tmat2x4<T> const & x);
    -00128                 GLM_FUNC_DECL explicit tmat4x2(tmat4x3<T> const & x);
    -00129                 GLM_FUNC_DECL explicit tmat4x2(tmat3x4<T> const & x);
    -00130 
    -00131                 // Accesses
    -00132                 GLM_FUNC_DECL col_type & operator[](size_type i);
    -00133                 GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    -00134 
    -00135                 // Unary updatable operators
    -00136                 GLM_FUNC_DECL tmat4x2<T>& operator=  (tmat4x2<T> const & m);
    -00137                 template <typename U> 
    -00138                 GLM_FUNC_DECL tmat4x2<T>& operator=  (tmat4x2<U> const & m);
    -00139                 template <typename U> 
    -00140                 GLM_FUNC_DECL tmat4x2<T>& operator+= (U const & s);
    -00141                 template <typename U> 
    -00142                 GLM_FUNC_DECL tmat4x2<T>& operator+= (tmat4x2<U> const & m);
    -00143                 template <typename U> 
    -00144                 GLM_FUNC_DECL tmat4x2<T>& operator-= (U const & s);
    -00145                 template <typename U> 
    -00146                 GLM_FUNC_DECL tmat4x2<T>& operator-= (tmat4x2<U> const & m);
    -00147                 template <typename U> 
    -00148                 GLM_FUNC_DECL tmat4x2<T>& operator*= (U const & s);
    -00149                 template <typename U> 
    -00150                 GLM_FUNC_DECL tmat4x2<T>& operator*= (tmat4x2<U> const & m);
    -00151                 template <typename U> 
    -00152                 GLM_FUNC_DECL tmat4x2<T>& operator/= (U const & s);
    -00153 
    -00154                 GLM_FUNC_DECL tmat4x2<T>& operator++ ();
    -00155                 GLM_FUNC_DECL tmat4x2<T>& operator-- ();
    -00156         };
    -00157 
    -00158         // Binary operators
    -00159         template <typename T> 
    -00160         tmat4x2<T> operator+ (
    -00161                 tmat4x2<T> const & m, 
    -00162                 typename tmat4x2<T>::value_type const & s);
    -00163             
    -00164         template <typename T> 
    -00165         tmat4x2<T> operator+ (
    -00166                 tmat4x2<T> const & m1, 
    -00167                 tmat4x2<T> const & m2);
    -00168             
    -00169         template <typename T> 
    -00170         tmat4x2<T> operator- (
    -00171                 tmat4x2<T> const & m, 
    -00172                 typename tmat4x2<T>::value_type const & s);
    -00173 
    -00174         template <typename T> 
    -00175         tmat4x2<T> operator- (
    -00176                 tmat4x2<T> const & m1, 
    -00177                 tmat4x2<T> const & m2);
    -00178 
    -00179         template <typename T> 
    -00180         tmat4x2<T> operator* (
    -00181                 tmat4x2<T> const & m, 
    -00182                 typename tmat4x2<T>::value_type const & s);
    -00183 
    -00184         template <typename T> 
    -00185         tmat4x2<T> operator* (
    -00186                 typename tmat4x2<T>::value_type const & s, 
    -00187                 tmat4x2<T> const & m);
    -00188 
    -00189         template <typename T>
    -00190         typename tmat4x2<T>::col_type operator* (
    -00191                 tmat4x2<T> const & m, 
    -00192                 typename tmat4x2<T>::row_type const & v);
    -00193 
    -00194         template <typename T> 
    -00195         typename tmat4x2<T>::row_type operator* (
    -00196                 typename tmat4x2<T>::col_type const & v, 
    -00197                 tmat4x2<T> const & m);
    -00198 
    -00199         template <typename T>
    -00200         tmat3x2<T> operator* (
    -00201                 tmat4x2<T> const & m1, 
    -00202                 tmat3x4<T> const & m2);
    -00203                 
    -00204         template <typename T>
    -00205         tmat4x2<T> operator* (
    -00206                 tmat4x2<T> const & m1, 
    -00207                 tmat4x4<T> const & m2);
    -00208                 
    -00209         template <typename T>
    -00210         tmat2x3<T> operator* (
    -00211                 tmat4x3<T> const & m1, 
    -00212                 tmat2x4<T> const & m2);
    -00213 
    -00214         template <typename T> 
    -00215         tmat4x2<T> operator/ (
    -00216                 tmat4x2<T> const & m, 
    -00217                 typename tmat4x2<T>::value_type const & s);
    -00218 
    -00219         template <typename T> 
    -00220         tmat4x2<T> operator/ (
    -00221                 typename tmat4x2<T>::value_type const & s, 
    -00222                 tmat4x2<T> const & m);
    -00223 
    -00224         // Unary constant operators
    -00225         template <typename T> 
    -00226         tmat4x2<T> const operator-  (
    -00227                 tmat4x2<T> const & m);
    -00228 
    -00229         template <typename T> 
    -00230         tmat4x2<T> const operator-- (
    -00231                 tmat4x2<T> const & m, 
    -00232                 int);
    -00233 
    -00234         template <typename T> 
    -00235         tmat4x2<T> const operator++ (
    -00236                 tmat4x2<T> const & m, 
    -00237                 int);
    -00238 
    -00239 } //namespace detail
    -00240 
    -00243 
    -00249         typedef detail::tmat4x2<lowp_float>             lowp_mat4x2;
    -00250 
    -00256         typedef detail::tmat4x2<mediump_float>  mediump_mat4x2;
    -00257 
    -00263         typedef detail::tmat4x2<highp_float>    highp_mat4x2;
    -00264 
    -00266 }//namespace glm
    -00267 
    -00268 #ifndef GLM_EXTERNAL_TEMPLATE
    -00269 #include "type_mat4x2.inl"
    -00270 #endif
    -00271 
    -00272 #endif //glm_core_type_mat4x2
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat3x4
    +
    30 #define glm_core_type_mat3x4
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat3x4
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec4<T> col_type;
    +
    58  typedef tvec3<T> row_type;
    +
    59  typedef tmat3x4<T> type;
    +
    60  typedef tmat4x3<T> transpose_type;
    +
    61 
    +
    62  static GLM_FUNC_DECL size_type col_size();
    +
    63  static GLM_FUNC_DECL size_type row_size();
    +
    64 
    +
    65  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    66 
    +
    67  private:
    +
    68  // Data
    +
    69  col_type value[3];
    +
    70 
    +
    71  public:
    +
    72  // Constructors
    +
    73  GLM_FUNC_DECL tmat3x4();
    +
    74  GLM_FUNC_DECL tmat3x4(tmat3x4 const & m);
    +
    75 
    +
    76  GLM_FUNC_DECL explicit tmat3x4(
    +
    77  ctor Null);
    +
    78  GLM_FUNC_DECL explicit tmat3x4(
    +
    79  value_type const & s);
    +
    80  GLM_FUNC_DECL explicit tmat3x4(
    +
    81  value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
    +
    82  value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
    +
    83  value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2);
    +
    84  GLM_FUNC_DECL explicit tmat3x4(
    +
    85  col_type const & v0,
    +
    86  col_type const & v1,
    +
    87  col_type const & v2);
    +
    88 
    +
    90  // Conversions
    +
    91  template <typename U>
    +
    92  GLM_FUNC_DECL explicit tmat3x4(
    +
    93  U const & x);
    +
    94 
    +
    95  template
    +
    96  <
    +
    97  typename X1, typename Y1, typename Z1, typename W1,
    +
    98  typename X2, typename Y2, typename Z2, typename W2,
    +
    99  typename X3, typename Y3, typename Z3, typename W3
    +
    100  >
    +
    101  GLM_FUNC_DECL explicit tmat3x4(
    +
    102  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    +
    103  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
    +
    104  X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3);
    +
    105 
    +
    106  template <typename V1, typename V2, typename V3>
    +
    107  GLM_FUNC_DECL explicit tmat3x4(
    +
    108  tvec4<V1> const & v1,
    +
    109  tvec4<V2> const & v2,
    +
    110  tvec4<V3> const & v3);
    +
    111 
    +
    112  // Matrix conversion
    +
    113  template <typename U>
    +
    114  GLM_FUNC_DECL explicit tmat3x4(tmat3x4<U> const & m);
    +
    115 
    +
    116  GLM_FUNC_DECL explicit tmat3x4(tmat2x2<T> const & x);
    +
    117  GLM_FUNC_DECL explicit tmat3x4(tmat3x3<T> const & x);
    +
    118  GLM_FUNC_DECL explicit tmat3x4(tmat4x4<T> const & x);
    +
    119  GLM_FUNC_DECL explicit tmat3x4(tmat2x3<T> const & x);
    +
    120  GLM_FUNC_DECL explicit tmat3x4(tmat3x2<T> const & x);
    +
    121  GLM_FUNC_DECL explicit tmat3x4(tmat2x4<T> const & x);
    +
    122  GLM_FUNC_DECL explicit tmat3x4(tmat4x2<T> const & x);
    +
    123  GLM_FUNC_DECL explicit tmat3x4(tmat4x3<T> const & x);
    +
    124 
    +
    125  // Accesses
    +
    126  col_type & operator[](size_type i);
    +
    127  col_type const & operator[](size_type i) const;
    +
    128 
    +
    129  // Unary updatable operators
    +
    130  GLM_FUNC_DECL tmat3x4<T> & operator= (tmat3x4<T> const & m);
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL tmat3x4<T> & operator= (tmat3x4<U> const & m);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tmat3x4<T> & operator+= (U const & s);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tmat3x4<T> & operator+= (tmat3x4<U> const & m);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tmat3x4<T> & operator-= (U const & s);
    +
    139  template <typename U>
    +
    140  GLM_FUNC_DECL tmat3x4<T> & operator-= (tmat3x4<U> const & m);
    +
    141  template <typename U>
    +
    142  GLM_FUNC_DECL tmat3x4<T> & operator*= (U const & s);
    +
    143  template <typename U>
    +
    144  GLM_FUNC_DECL tmat3x4<T> & operator*= (tmat3x4<U> const & m);
    +
    145  template <typename U>
    +
    146  GLM_FUNC_DECL tmat3x4<T> & operator/= (U const & s);
    +
    147 
    +
    148  GLM_FUNC_DECL tmat3x4<T> & operator++ ();
    +
    149  GLM_FUNC_DECL tmat3x4<T> & operator-- ();
    +
    150  };
    +
    151 
    +
    152  // Binary operators
    +
    153  template <typename T>
    +
    154  tmat3x4<T> operator+ (
    +
    155  tmat3x4<T> const & m,
    +
    156  typename tmat3x4<T>::value_type const & s);
    +
    157 
    +
    158  template <typename T>
    +
    159  tmat3x4<T> operator+ (
    +
    160  tmat3x4<T> const & m1,
    +
    161  tmat3x4<T> const & m2);
    +
    162 
    +
    163  template <typename T>
    +
    164  tmat3x4<T> operator- (
    +
    165  tmat3x4<T> const & m,
    +
    166  typename tmat3x4<T>::value_type const & s);
    +
    167 
    +
    168  template <typename T>
    +
    169  tmat3x4<T> operator- (
    +
    170  tmat3x4<T> const & m1,
    +
    171  tmat3x4<T> const & m2);
    +
    172 
    +
    173  template <typename T>
    +
    174  tmat3x4<T> operator* (
    +
    175  tmat3x4<T> const & m,
    +
    176  typename tmat3x4<T>::value_type const & s);
    +
    177 
    +
    178  template <typename T>
    +
    179  tmat3x4<T> operator* (
    +
    180  typename tmat3x4<T>::value_type const & s,
    +
    181  tmat3x4<T> const & m);
    +
    182 
    +
    183  template <typename T>
    +
    184  typename tmat3x4<T>::col_type operator* (
    +
    185  tmat3x4<T> const & m,
    +
    186  typename tmat3x4<T>::row_type const & v);
    +
    187 
    +
    188  template <typename T>
    +
    189  typename tmat3x4<T>::row_type operator* (
    +
    190  typename tmat3x4<T>::col_type const & v,
    +
    191  tmat3x4<T> const & m);
    +
    192 
    +
    193  template <typename T>
    +
    194  tmat4x4<T> operator* (
    +
    195  tmat3x4<T> const & m1,
    +
    196  tmat4x3<T> const & m2);
    +
    197 
    +
    198  template <typename T>
    +
    199  tmat2x4<T> operator* (
    +
    200  tmat3x4<T> const & m1,
    +
    201  tmat2x3<T> const & m2);
    +
    202 
    +
    203  template <typename T>
    +
    204  tmat3x4<T> operator* (
    +
    205  tmat3x4<T> const & m1,
    +
    206  tmat3x3<T> const & m2);
    +
    207 
    +
    208  template <typename T>
    +
    209  tmat3x4<T> operator/ (
    +
    210  tmat3x4<T> const & m,
    +
    211  typename tmat3x4<T>::value_type const & s);
    +
    212 
    +
    213  template <typename T>
    +
    214  tmat3x4<T> operator/ (
    +
    215  typename tmat3x4<T>::value_type const & s,
    +
    216  tmat3x4<T> const & m);
    +
    217 
    +
    218  // Unary constant operators
    +
    219  template <typename T>
    +
    220  tmat3x4<T> const operator- (
    +
    221  tmat3x4<T> const & m);
    +
    222 
    +
    223  template <typename T>
    +
    224  tmat3x4<T> const operator-- (
    +
    225  tmat3x4<T> const & m,
    +
    226  int);
    +
    227 
    +
    228  template <typename T>
    +
    229  tmat3x4<T> const operator++ (
    +
    230  tmat3x4<T> const & m,
    +
    231  int);
    +
    232 
    +
    233 }//namespace detail
    +
    234 
    +
    237 
    +
    243  typedef detail::tmat3x4<lowp_float> lowp_mat3x4;
    +
    244 
    +
    250  typedef detail::tmat3x4<mediump_float> mediump_mat3x4;
    +
    251 
    +
    257  typedef detail::tmat3x4<highp_float> highp_mat3x4;
    +
    258 
    +
    260 }//namespace glm
    +
    261 
    +
    262 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    263 #include "type_mat3x4.inl"
    +
    264 #endif
    +
    265 
    +
    266 #endif //glm_core_type_mat3x4
    +
    + - diff --git a/doc/api/a00105.html b/doc/api/a00105.html index 7689c423..0aecdb34 100644 --- a/doc/api/a00105.html +++ b/doc/api/a00105.html @@ -2,42 +2,31 @@ - -type_mat4x3.hpp File Reference + +type_mat4x2.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,44 +35,49 @@
  • File List
  • + +
    -
    type_mat4x3.hpp File Reference
    -
    +
    type_mat4x2.hpp File Reference
    +

    Go to the source code of this file.

    - - - - + + + + + +

    +

    Typedefs

    typedef detail::tmat4x3
    -< highp_float > 
    highp_mat4x3
    typedef detail::tmat4x3
    -< lowp_float > 
    lowp_mat4x3
    typedef detail::tmat4x3
    -< mediump_float > 
    mediump_mat4x3
    typedef detail::tmat4x2
    +< highp_float > 
    highp_mat4x2
     
    typedef detail::tmat4x2
    +< lowp_float > 
    lowp_mat4x2
     
    typedef detail::tmat4x2
    +< mediump_float > 
    mediump_mat4x2
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2006-08-04 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat4x3.hpp.

    -
    - +

    GLM Core

    +
    Date
    2006-10-01 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat4x2.hpp.

    + + - diff --git a/doc/api/a00105_source.html b/doc/api/a00105_source.html index ffbb373c..9fca29ea 100644 --- a/doc/api/a00105_source.html +++ b/doc/api/a00105_source.html @@ -2,42 +2,31 @@ - -type_mat4x3.hpp Source File + +type_mat4x2.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,271 +35,273 @@
  • File List
  • + +
    -
    type_mat4x3.hpp
    -
    +
    type_mat4x2.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat4x3
    -00030 #define glm_core_type_mat4x3
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // \brief Template for 4 columns and 3 rows matrix of floating-point numbers.
    -00052         // \ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat4x3
    -00055         {
    -00056                 enum ctor{null};
    -00057                 typedef T value_type;
    -00058                 typedef std::size_t size_type;
    -00059                 typedef tvec3<T> col_type;
    -00060                 typedef tvec4<T> row_type;
    -00061         GLM_FUNC_DECL size_type length() const;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat4x3<T> type;
    -00066                 typedef tmat3x4<T> transpose_type;
    -00067 
    -00068         private:
    -00069                 // Data 
    -00070                 col_type value[4];
    -00071 
    -00072         public:
    -00073                 // Constructors
    -00074                 GLM_FUNC_DECL tmat4x3();
    -00075                 GLM_FUNC_DECL tmat4x3(tmat4x3 const & m);
    -00076 
    -00077                 GLM_FUNC_DECL explicit tmat4x3(
    -00078                         ctor Null);
    -00079                 GLM_FUNC_DECL explicit tmat4x3(
    -00080                         value_type const & x);
    -00081                 GLM_FUNC_DECL explicit tmat4x3(
    -00082                         value_type const & x0, value_type const & y0, value_type const & z0,
    -00083                         value_type const & x1, value_type const & y1, value_type const & z1,
    -00084                         value_type const & x2, value_type const & y2, value_type const & z2,
    -00085                         value_type const & x3, value_type const & y3, value_type const & z3);
    -00086                 GLM_FUNC_DECL explicit tmat4x3(
    -00087                         col_type const & v0, 
    -00088                         col_type const & v1,
    -00089                         col_type const & v2,
    -00090             col_type const & v3);
    -00091             
    -00093                 // Conversions
    -00094                 template <typename U> 
    -00095                 GLM_FUNC_DECL explicit tmat4x3(
    -00096             U const & x);
    -00097                         
    -00098                 template <
    -00099             typename X1, typename Y1, typename Z1, 
    -00100             typename X2, typename Y2, typename Z2, 
    -00101             typename X3, typename Y3, typename Z3, 
    -00102             typename X4, typename Y4, typename Z4> 
    -00103                 GLM_FUNC_DECL explicit tmat4x3(
    -00104             X1 const & x1, Y1 const & y1, Z1 const & z1, 
    -00105             X2 const & x2, Y2 const & y2, Z2 const & z2, 
    -00106             X3 const & x3, Y3 const & y3, Z3 const & z3, 
    -00107             X4 const & x4, Y4 const & y4, Z4 const & z4);
    -00108                         
    -00109                 template <typename V1, typename V2, typename V3, typename V4> 
    -00110                 GLM_FUNC_DECL explicit tmat4x3(
    -00111             tvec3<V1> const & v1, 
    -00112             tvec3<V2> const & v2,
    -00113             tvec3<V3> const & v3,
    -00114             tvec3<V4> const & v4);
    -00115             
    -00116                 // Matrix conversions
    -00117                 template <typename U> 
    -00118                 GLM_FUNC_DECL explicit tmat4x3(tmat4x3<U> const & m);
    -00119                         
    -00120                 GLM_FUNC_DECL explicit tmat4x3(tmat2x2<T> const & x);
    -00121                 GLM_FUNC_DECL explicit tmat4x3(tmat3x3<T> const & x);
    -00122                 GLM_FUNC_DECL explicit tmat4x3(tmat4x4<T> const & x);
    -00123                 GLM_FUNC_DECL explicit tmat4x3(tmat2x3<T> const & x);
    -00124                 GLM_FUNC_DECL explicit tmat4x3(tmat3x2<T> const & x);
    -00125                 GLM_FUNC_DECL explicit tmat4x3(tmat2x4<T> const & x);
    -00126                 GLM_FUNC_DECL explicit tmat4x3(tmat4x2<T> const & x);
    -00127                 GLM_FUNC_DECL explicit tmat4x3(tmat3x4<T> const & x);
    -00128 
    -00129                 // Accesses
    -00130                 col_type & operator[](size_type i);
    -00131                 col_type const & operator[](size_type i) const;
    -00132 
    -00133                 // Unary updatable operators
    -00134                 GLM_FUNC_DECL tmat4x3<T> & operator=  (tmat4x3<T> const & m);
    -00135                 template <typename U> 
    -00136                 GLM_FUNC_DECL tmat4x3<T> & operator=  (tmat4x3<U> const & m);
    -00137                 template <typename U> 
    -00138                 GLM_FUNC_DECL tmat4x3<T> & operator+= (U const & s);
    -00139                 template <typename U> 
    -00140                 GLM_FUNC_DECL tmat4x3<T> & operator+= (tmat4x3<U> const & m);
    -00141                 template <typename U> 
    -00142                 GLM_FUNC_DECL tmat4x3<T> & operator-= (U const & s);
    -00143                 template <typename U> 
    -00144                 GLM_FUNC_DECL tmat4x3<T> & operator-= (tmat4x3<U> const & m);
    -00145                 template <typename U> 
    -00146                 GLM_FUNC_DECL tmat4x3<T> & operator*= (U const & s);
    -00147                 template <typename U> 
    -00148                 GLM_FUNC_DECL tmat4x3<T> & operator*= (tmat4x3<U> const & m);
    -00149                 template <typename U> 
    -00150                 GLM_FUNC_DECL tmat4x3<T> & operator/= (U const & s);
    -00151 
    -00152                 GLM_FUNC_DECL tmat4x3<T> & operator++ ();
    -00153                 GLM_FUNC_DECL tmat4x3<T> & operator-- ();
    -00154         };
    -00155 
    -00156         // Binary operators
    -00157         template <typename T> 
    -00158         tmat4x3<T> operator+ (
    -00159                 tmat4x3<T> const & m, 
    -00160                 typename tmat4x3<T>::value_type const & s);
    -00161             
    -00162         template <typename T> 
    -00163         tmat4x3<T> operator+ (
    -00164                 tmat4x3<T> const & m1, 
    -00165                 tmat4x3<T> const & m2);
    -00166             
    -00167         template <typename T> 
    -00168         tmat4x3<T> operator- (
    -00169                 tmat4x3<T> const & m, 
    -00170                 typename tmat4x3<T>::value_type const & s);
    -00171 
    -00172         template <typename T> 
    -00173         tmat4x3<T> operator- (
    -00174                 tmat4x3<T> const & m1, 
    -00175                 tmat4x3<T> const & m2);
    -00176 
    -00177         template <typename T> 
    -00178         tmat4x3<T> operator* (
    -00179                 tmat4x3<T> const & m, 
    -00180                 typename tmat4x3<T>::value_type const & s);
    -00181 
    -00182         template <typename T> 
    -00183         tmat4x3<T> operator* (
    -00184                 typename tmat4x3<T>::value_type const & s, 
    -00185                 tmat4x3<T> const & m);
    -00186 
    -00187         template <typename T>
    -00188         typename tmat4x3<T>::col_type operator* (
    -00189                 tmat4x3<T> const & m, 
    -00190                 typename tmat4x3<T>::row_type const & v);
    -00191 
    -00192         template <typename T> 
    -00193         typename tmat4x3<T>::row_type operator* (
    -00194                 typename tmat4x3<T>::col_type const & v, 
    -00195                 tmat4x3<T> const & m);
    -00196 
    -00197         template <typename T> 
    -00198         tmat2x3<T> operator* (
    -00199                 tmat4x3<T> const & m1, 
    -00200                 tmat2x4<T> const & m2);
    -00201 
    -00202         template <typename T> 
    -00203         tmat3x3<T> operator* (
    -00204                 tmat4x3<T> const & m1, 
    -00205                 tmat3x4<T> const & m2);
    -00206                 
    -00207         template <typename T>
    -00208         tmat4x3<T> operator* (
    -00209                 tmat4x3<T> const & m1, 
    -00210                 tmat4x4<T> const & m2);
    -00211 
    -00212         template <typename T> 
    -00213         tmat4x3<T> operator/ (
    -00214                 tmat4x3<T> const & m, 
    -00215                 typename tmat4x3<T>::value_type const & s);
    -00216 
    -00217         template <typename T> 
    -00218         tmat4x3<T> operator/ (
    -00219                 typename tmat4x3<T>::value_type const & s, 
    -00220                 tmat4x3<T> const & m);
    -00221 
    -00222         // Unary constant operators
    -00223         template <typename T> 
    -00224         tmat4x3<T> const operator- (
    -00225                 tmat4x3<T> const & m);
    -00226 
    -00227         template <typename T> 
    -00228         tmat4x3<T> const operator-- (
    -00229                 tmat4x3<T> const & m, 
    -00230                 int);
    -00231 
    -00232         template <typename T> 
    -00233         tmat4x3<T> const operator++ (
    -00234                 tmat4x3<T> const & m, 
    -00235                 int);
    -00236 
    -00237 }//namespace detail
    -00238 
    -00241 
    -00247         typedef detail::tmat4x3<lowp_float>             lowp_mat4x3;
    -00248 
    -00254         typedef detail::tmat4x3<mediump_float>  mediump_mat4x3;
    -00255 
    -00261         typedef detail::tmat4x3<highp_float>    highp_mat4x3;
    -00262 
    -00264 }//namespace glm
    -00265 
    -00266 #ifndef GLM_EXTERNAL_TEMPLATE
    -00267 #include "type_mat4x3.inl"
    -00268 #endif //GLM_EXTERNAL_TEMPLATE
    -00269 
    -00270 #endif//glm_core_type_mat4x3
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat4x2
    +
    30 #define glm_core_type_mat4x2
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat4x2
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec2<T> col_type;
    +
    58  typedef tvec4<T> row_type;
    +
    59  typedef tmat4x2<T> type;
    +
    60  typedef tmat2x4<T> transpose_type;
    +
    61 
    +
    62  static GLM_FUNC_DECL size_type col_size();
    +
    63  static GLM_FUNC_DECL size_type row_size();
    +
    64 
    +
    65  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    66 
    +
    67  private:
    +
    68  // Data
    +
    69  col_type value[4];
    +
    70 
    +
    71  public:
    +
    72  // Constructors
    +
    73  GLM_FUNC_DECL tmat4x2();
    +
    74  GLM_FUNC_DECL tmat4x2(tmat4x2 const & m);
    +
    75 
    +
    76  GLM_FUNC_DECL explicit tmat4x2(
    +
    77  ctor Null);
    +
    78  GLM_FUNC_DECL explicit tmat4x2(
    +
    79  value_type const & x);
    +
    80  GLM_FUNC_DECL explicit tmat4x2(
    +
    81  value_type const & x0, value_type const & y0,
    +
    82  value_type const & x1, value_type const & y1,
    +
    83  value_type const & x2, value_type const & y2,
    +
    84  value_type const & x3, value_type const & y3);
    +
    85  GLM_FUNC_DECL explicit tmat4x2(
    +
    86  col_type const & v0,
    +
    87  col_type const & v1,
    +
    88  col_type const & v2,
    +
    89  col_type const & v3);
    +
    90 
    +
    92  // Conversions
    +
    93  template <typename U>
    +
    94  GLM_FUNC_DECL explicit tmat4x2(
    +
    95  U const & x);
    +
    96 
    +
    97  template
    +
    98  <
    +
    99  typename X1, typename Y1,
    +
    100  typename X2, typename Y2,
    +
    101  typename X3, typename Y3,
    +
    102  typename X4, typename Y4
    +
    103  >
    +
    104  GLM_FUNC_DECL explicit tmat4x2(
    +
    105  X1 const & x1, Y1 const & y1,
    +
    106  X2 const & x2, Y2 const & y2,
    +
    107  X3 const & x3, Y3 const & y3,
    +
    108  X4 const & x4, Y4 const & y4);
    +
    109 
    +
    110  template <typename V1, typename V2, typename V3, typename V4>
    +
    111  GLM_FUNC_DECL explicit tmat4x2(
    +
    112  tvec2<V1> const & v1,
    +
    113  tvec2<V2> const & v2,
    +
    114  tvec2<V3> const & v3,
    +
    115  tvec2<V4> const & v4);
    +
    116 
    +
    117  // Matrix conversions
    +
    118  template <typename U>
    +
    119  GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U> const & m);
    +
    120 
    +
    121  GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T> const & x);
    +
    122  GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T> const & x);
    +
    123  GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T> const & x);
    +
    124  GLM_FUNC_DECL explicit tmat4x2(tmat2x3<T> const & x);
    +
    125  GLM_FUNC_DECL explicit tmat4x2(tmat3x2<T> const & x);
    +
    126  GLM_FUNC_DECL explicit tmat4x2(tmat2x4<T> const & x);
    +
    127  GLM_FUNC_DECL explicit tmat4x2(tmat4x3<T> const & x);
    +
    128  GLM_FUNC_DECL explicit tmat4x2(tmat3x4<T> const & x);
    +
    129 
    +
    130  // Accesses
    +
    131  GLM_FUNC_DECL col_type & operator[](size_type i);
    +
    132  GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    +
    133 
    +
    134  // Unary updatable operators
    +
    135  GLM_FUNC_DECL tmat4x2<T>& operator= (tmat4x2<T> const & m);
    +
    136  template <typename U>
    +
    137  GLM_FUNC_DECL tmat4x2<T>& operator= (tmat4x2<U> const & m);
    +
    138  template <typename U>
    +
    139  GLM_FUNC_DECL tmat4x2<T>& operator+= (U const & s);
    +
    140  template <typename U>
    +
    141  GLM_FUNC_DECL tmat4x2<T>& operator+= (tmat4x2<U> const & m);
    +
    142  template <typename U>
    +
    143  GLM_FUNC_DECL tmat4x2<T>& operator-= (U const & s);
    +
    144  template <typename U>
    +
    145  GLM_FUNC_DECL tmat4x2<T>& operator-= (tmat4x2<U> const & m);
    +
    146  template <typename U>
    +
    147  GLM_FUNC_DECL tmat4x2<T>& operator*= (U const & s);
    +
    148  template <typename U>
    +
    149  GLM_FUNC_DECL tmat4x2<T>& operator*= (tmat4x2<U> const & m);
    +
    150  template <typename U>
    +
    151  GLM_FUNC_DECL tmat4x2<T>& operator/= (U const & s);
    +
    152 
    +
    153  GLM_FUNC_DECL tmat4x2<T>& operator++ ();
    +
    154  GLM_FUNC_DECL tmat4x2<T>& operator-- ();
    +
    155  };
    +
    156 
    +
    157  // Binary operators
    +
    158  template <typename T>
    +
    159  tmat4x2<T> operator+ (
    +
    160  tmat4x2<T> const & m,
    +
    161  typename tmat4x2<T>::value_type const & s);
    +
    162 
    +
    163  template <typename T>
    +
    164  tmat4x2<T> operator+ (
    +
    165  tmat4x2<T> const & m1,
    +
    166  tmat4x2<T> const & m2);
    +
    167 
    +
    168  template <typename T>
    +
    169  tmat4x2<T> operator- (
    +
    170  tmat4x2<T> const & m,
    +
    171  typename tmat4x2<T>::value_type const & s);
    +
    172 
    +
    173  template <typename T>
    +
    174  tmat4x2<T> operator- (
    +
    175  tmat4x2<T> const & m1,
    +
    176  tmat4x2<T> const & m2);
    +
    177 
    +
    178  template <typename T>
    +
    179  tmat4x2<T> operator* (
    +
    180  tmat4x2<T> const & m,
    +
    181  typename tmat4x2<T>::value_type const & s);
    +
    182 
    +
    183  template <typename T>
    +
    184  tmat4x2<T> operator* (
    +
    185  typename tmat4x2<T>::value_type const & s,
    +
    186  tmat4x2<T> const & m);
    +
    187 
    +
    188  template <typename T>
    +
    189  typename tmat4x2<T>::col_type operator* (
    +
    190  tmat4x2<T> const & m,
    +
    191  typename tmat4x2<T>::row_type const & v);
    +
    192 
    +
    193  template <typename T>
    +
    194  typename tmat4x2<T>::row_type operator* (
    +
    195  typename tmat4x2<T>::col_type const & v,
    +
    196  tmat4x2<T> const & m);
    +
    197 
    +
    198  template <typename T>
    +
    199  tmat3x2<T> operator* (
    +
    200  tmat4x2<T> const & m1,
    +
    201  tmat3x4<T> const & m2);
    +
    202 
    +
    203  template <typename T>
    +
    204  tmat4x2<T> operator* (
    +
    205  tmat4x2<T> const & m1,
    +
    206  tmat4x4<T> const & m2);
    +
    207 
    +
    208  template <typename T>
    +
    209  tmat2x3<T> operator* (
    +
    210  tmat4x3<T> const & m1,
    +
    211  tmat2x4<T> const & m2);
    +
    212 
    +
    213  template <typename T>
    +
    214  tmat4x2<T> operator/ (
    +
    215  tmat4x2<T> const & m,
    +
    216  typename tmat4x2<T>::value_type const & s);
    +
    217 
    +
    218  template <typename T>
    +
    219  tmat4x2<T> operator/ (
    +
    220  typename tmat4x2<T>::value_type const & s,
    +
    221  tmat4x2<T> const & m);
    +
    222 
    +
    223  // Unary constant operators
    +
    224  template <typename T>
    +
    225  tmat4x2<T> const operator- (
    +
    226  tmat4x2<T> const & m);
    +
    227 
    +
    228  template <typename T>
    +
    229  tmat4x2<T> const operator-- (
    +
    230  tmat4x2<T> const & m,
    +
    231  int);
    +
    232 
    +
    233  template <typename T>
    +
    234  tmat4x2<T> const operator++ (
    +
    235  tmat4x2<T> const & m,
    +
    236  int);
    +
    237 } //namespace detail
    +
    238 
    +
    241 
    +
    247  typedef detail::tmat4x2<lowp_float> lowp_mat4x2;
    +
    248 
    +
    254  typedef detail::tmat4x2<mediump_float> mediump_mat4x2;
    +
    255 
    +
    261  typedef detail::tmat4x2<highp_float> highp_mat4x2;
    +
    262 
    +
    264 }//namespace glm
    +
    265 
    +
    266 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    267 #include "type_mat4x2.inl"
    +
    268 #endif
    +
    269 
    +
    270 #endif //glm_core_type_mat4x2
    +
    + - diff --git a/doc/api/a00106.html b/doc/api/a00106.html index 8cb96c6a..f7f49628 100644 --- a/doc/api/a00106.html +++ b/doc/api/a00106.html @@ -2,42 +2,31 @@ - -type_mat4x4.hpp File Reference + +type_mat4x3.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,50 +35,49 @@
  • File List
  • + +
    -
    type_mat4x4.hpp File Reference
    -
    +
    type_mat4x3.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - + + + + + +

    +

    Typedefs

    typedef detail::tmat4x4
    -< highp_float > 
    highp_mat4
    typedef detail::tmat4x4
    -< highp_float > 
    highp_mat4x4
    typedef detail::tmat4x4
    -< lowp_float > 
    lowp_mat4
    typedef detail::tmat4x4
    -< lowp_float > 
    lowp_mat4x4
    typedef detail::tmat4x4
    -< mediump_float > 
    mediump_mat4
    typedef detail::tmat4x4
    -< mediump_float > 
    mediump_mat4x4
    typedef detail::tmat4x3
    +< highp_float > 
    highp_mat4x3
     
    typedef detail::tmat4x3
    +< lowp_float > 
    lowp_mat4x3
     
    typedef detail::tmat4x3
    +< mediump_float > 
    mediump_mat4x3
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2005-01-27 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_mat4x4.hpp.

    -
    - +

    GLM Core

    +
    Date
    2006-08-04 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat4x3.hpp.

    + + - diff --git a/doc/api/a00106_source.html b/doc/api/a00106_source.html index 7f8a9792..d311ef78 100644 --- a/doc/api/a00106_source.html +++ b/doc/api/a00106_source.html @@ -2,42 +2,31 @@ - -type_mat4x4.hpp Source File + +type_mat4x3.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,304 +35,271 @@
  • File List
  • + +
    -
    type_mat4x4.hpp
    -
    +
    type_mat4x3.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_mat4x4
    -00030 #define glm_core_type_mat4x4
    -00031 
    -00032 #include "type_mat.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         template <typename T> struct tvec1;
    -00038         template <typename T> struct tvec2;
    -00039         template <typename T> struct tvec3;
    -00040         template <typename T> struct tvec4;
    -00041         template <typename T> struct tmat2x2;
    -00042         template <typename T> struct tmat2x3;
    -00043         template <typename T> struct tmat2x4;
    -00044         template <typename T> struct tmat3x2;
    -00045         template <typename T> struct tmat3x3;
    -00046         template <typename T> struct tmat3x4;
    -00047         template <typename T> struct tmat4x2;
    -00048         template <typename T> struct tmat4x3;
    -00049         template <typename T> struct tmat4x4;
    -00050 
    -00051         // \brief Template for 4 * 4 matrix of floating-point numbers.
    -00052         // \ingroup core_template
    -00053         template <typename T> 
    -00054         struct tmat4x4
    -00055         {
    -00056                 enum ctor{null};
    -00057                 typedef T value_type;
    -00058                 typedef std::size_t size_type;
    -00059                 typedef tvec4<T> col_type;
    -00060                 typedef tvec4<T> row_type;
    -00061         GLM_FUNC_DECL size_type length() const;
    -00062                 static GLM_FUNC_DECL size_type col_size();
    -00063                 static GLM_FUNC_DECL size_type row_size();
    -00064 
    -00065                 typedef tmat4x4<T> type;
    -00066                 typedef tmat4x4<T> transpose_type;
    -00067 
    -00068         public:
    -00071                 GLM_FUNC_DECL tmat4x4<T> _inverse() const;
    -00073 
    -00074         private:
    -00075                 // Data 
    -00076                 col_type value[4];
    -00077 
    -00078         public:
    -00079                 // Constructors
    -00080                 GLM_FUNC_DECL tmat4x4();
    -00081                 GLM_FUNC_DECL tmat4x4(tmat4x4 const & m);
    -00082 
    -00083                 GLM_FUNC_DECL explicit tmat4x4(
    -00084                         ctor Null);
    -00085                 GLM_FUNC_DECL explicit tmat4x4(
    -00086                         value_type const & x);
    -00087                 GLM_FUNC_DECL explicit tmat4x4(
    -00088                         value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
    -00089                         value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
    -00090                         value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2,
    -00091                         value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3);
    -00092                 GLM_FUNC_DECL explicit tmat4x4(
    -00093                         col_type const & v0, 
    -00094                         col_type const & v1,
    -00095                         col_type const & v2,
    -00096                         col_type const & v3);
    -00097 
    -00099                 // Conversions
    -00100                 template <typename U> 
    -00101                 GLM_FUNC_DECL explicit tmat4x4(
    -00102             U const & x);
    -00103                         
    -00104                 template <
    -00105             typename X1, typename Y1, typename Z1, typename W1, 
    -00106             typename X2, typename Y2, typename Z2, typename W2, 
    -00107             typename X3, typename Y3, typename Z3, typename W3, 
    -00108             typename X4, typename Y4, typename Z4, typename W4> 
    -00109                 GLM_FUNC_DECL explicit tmat4x4(
    -00110             X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, 
    -00111             X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, 
    -00112             X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3, 
    -00113             X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4);
    -00114                         
    -00115                 template <typename V1, typename V2, typename V3, typename V4> 
    -00116                 GLM_FUNC_DECL explicit tmat4x4(
    -00117             tvec4<V1> const & v1, 
    -00118             tvec4<V2> const & v2,
    -00119             tvec4<V3> const & v3,
    -00120             tvec4<V4> const & v4);
    -00121             
    -00122                 // Matrix conversions
    -00123                 template <typename U> 
    -00124                 GLM_FUNC_DECL explicit tmat4x4(tmat4x4<U> const & m);
    -00125 
    -00126                 GLM_FUNC_DECL explicit tmat4x4(tmat2x2<T> const & x);
    -00127                 GLM_FUNC_DECL explicit tmat4x4(tmat3x3<T> const & x);
    -00128                 GLM_FUNC_DECL explicit tmat4x4(tmat2x3<T> const & x);
    -00129                 GLM_FUNC_DECL explicit tmat4x4(tmat3x2<T> const & x);
    -00130                 GLM_FUNC_DECL explicit tmat4x4(tmat2x4<T> const & x);
    -00131                 GLM_FUNC_DECL explicit tmat4x4(tmat4x2<T> const & x);
    -00132                 GLM_FUNC_DECL explicit tmat4x4(tmat3x4<T> const & x);
    -00133                 GLM_FUNC_DECL explicit tmat4x4(tmat4x3<T> const & x);
    -00134 
    -00135                 // Accesses
    -00136                 GLM_FUNC_DECL col_type & operator[](size_type i);
    -00137                 GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    -00138 
    -00139                 // Unary updatable operators
    -00140                 GLM_FUNC_DECL tmat4x4<T> & operator=  (tmat4x4<T> const & m);
    -00141                 template <typename U>
    -00142                 GLM_FUNC_DECL tmat4x4<T> & operator=  (tmat4x4<U> const & m);
    -00143                 template <typename U>
    -00144                 GLM_FUNC_DECL tmat4x4<T> & operator+= (U const & s);
    -00145                 template <typename U>
    -00146                 GLM_FUNC_DECL tmat4x4<T> & operator+= (tmat4x4<U> const & m);
    -00147                 template <typename U>
    -00148                 GLM_FUNC_DECL tmat4x4<T> & operator-= (U const & s);
    -00149                 template <typename U>
    -00150                 GLM_FUNC_DECL tmat4x4<T> & operator-= (tmat4x4<U> const & m);
    -00151                 template <typename U>
    -00152                 GLM_FUNC_DECL tmat4x4<T> & operator*= (U const & s);
    -00153                 template <typename U>
    -00154                 GLM_FUNC_DECL tmat4x4<T> & operator*= (tmat4x4<U> const & m);
    -00155                 template <typename U>
    -00156                 GLM_FUNC_DECL tmat4x4<T> & operator/= (U const & s);
    -00157                 template <typename U>
    -00158                 GLM_FUNC_DECL tmat4x4<T> & operator/= (tmat4x4<U> const & m);
    -00159                 GLM_FUNC_DECL tmat4x4<T> & operator++ ();
    -00160                 GLM_FUNC_DECL tmat4x4<T> & operator-- ();
    -00161         };
    -00162 
    -00163         // Binary operators
    -00164         template <typename T> 
    -00165         tmat4x4<T> operator+ (
    -00166                 tmat4x4<T> const & m, 
    -00167                 typename tmat4x4<T>::value_type const & s);
    -00168 
    -00169         template <typename T> 
    -00170         tmat4x4<T> operator+ (
    -00171                 typename tmat4x4<T>::value_type const & s, 
    -00172                 tmat4x4<T> const & m);
    -00173 
    -00174         template <typename T> 
    -00175         tmat4x4<T> operator+ (
    -00176                 tmat4x4<T> const & m1, 
    -00177                 tmat4x4<T> const & m2);
    -00178             
    -00179         template <typename T> 
    -00180         tmat4x4<T> operator- (
    -00181                 tmat4x4<T> const & m, 
    -00182                 typename tmat4x4<T>::value_type const & s);
    -00183 
    -00184         template <typename T> 
    -00185         tmat4x4<T> operator- (
    -00186                 typename tmat4x4<T>::value_type const & s, 
    -00187                 tmat4x4<T> const & m);
    -00188 
    -00189         template <typename T> 
    -00190         tmat4x4<T> operator- (
    -00191                 tmat4x4<T> const & m1, 
    -00192                 tmat4x4<T> const & m2);
    -00193 
    -00194         template <typename T> 
    -00195         tmat4x4<T> operator* (
    -00196                 tmat4x4<T> const & m, 
    -00197                 typename tmat4x4<T>::value_type const & s);
    -00198 
    -00199         template <typename T> 
    -00200         tmat4x4<T> operator* (
    -00201                 typename tmat4x4<T>::value_type const & s, 
    -00202                 tmat4x4<T> const & m);
    -00203 
    -00204         template <typename T> 
    -00205         typename tmat4x4<T>::col_type operator* (
    -00206                 tmat4x4<T> const & m, 
    -00207                 typename tmat4x4<T>::row_type const & v);
    -00208 
    -00209         template <typename T> 
    -00210         typename tmat4x4<T>::row_type operator* (
    -00211                 typename tmat4x4<T>::col_type const & v, 
    -00212                 tmat4x4<T> const & m);
    -00213                 
    -00214         template <typename T>
    -00215         tmat2x4<T> operator* (
    -00216                 tmat4x4<T> const & m1, 
    -00217                 tmat2x4<T> const & m2);
    -00218 
    -00219         template <typename T>
    -00220         tmat3x4<T> operator* (
    -00221                 tmat4x4<T> const & m1, 
    -00222                 tmat3x4<T> const & m2);
    -00223 
    -00224         template <typename T> 
    -00225         tmat4x4<T> operator* (
    -00226                 tmat4x4<T> const & m1, 
    -00227                 tmat4x4<T> const & m2);
    -00228 
    -00229         template <typename T> 
    -00230         tmat4x4<T> operator/ (
    -00231                 tmat4x4<T> const & m, 
    -00232                 typename tmat4x4<T>::value_type const & s);
    -00233 
    -00234         template <typename T> 
    -00235         tmat4x4<T> operator/ (
    -00236                 typename tmat4x4<T>::value_type const & s, 
    -00237                 tmat4x4<T> const & m);
    -00238 
    -00239         template <typename T> 
    -00240         typename tmat4x4<T>::col_type operator/ (
    -00241                 tmat4x4<T> const & m, 
    -00242                 typename tmat4x4<T>::row_type const & v);
    -00243 
    -00244         template <typename T> 
    -00245         typename tmat4x4<T>::row_type operator/ (
    -00246                 typename tmat4x4<T>::col_type & v, 
    -00247                 tmat4x4<T> const & m);
    -00248 
    -00249         template <typename T> 
    -00250         tmat4x4<T> operator/ (
    -00251                 tmat4x4<T> const & m1, 
    -00252                 tmat4x4<T> const & m2);
    -00253 
    -00254         // Unary constant operators
    -00255         template <typename T> 
    -00256         tmat4x4<T> const operator-  (
    -00257                 tmat4x4<T> const & m);
    -00258 
    -00259         template <typename T> 
    -00260         tmat4x4<T> const operator-- (
    -00261                 tmat4x4<T> const & m, int);
    -00262 
    -00263         template <typename T> 
    -00264         tmat4x4<T> const operator++ (
    -00265                 tmat4x4<T> const & m, int);
    -00266 
    -00267 } //namespace detail
    -00268 
    -00271 
    -00277         typedef detail::tmat4x4<lowp_float>             lowp_mat4;
    -00278 
    -00284         typedef detail::tmat4x4<mediump_float>  mediump_mat4;
    -00285 
    -00291         typedef detail::tmat4x4<highp_float>    highp_mat4;
    -00292 
    -00298         typedef detail::tmat4x4<lowp_float>             lowp_mat4x4;
    -00299 
    -00305         typedef detail::tmat4x4<mediump_float>  mediump_mat4x4;
    -00306 
    -00312         typedef detail::tmat4x4<highp_float>    highp_mat4x4;
    -00313 
    -00315 }//namespace glm
    -00316 
    -00317 #ifndef GLM_EXTERNAL_TEMPLATE
    -00318 #include "type_mat4x4.inl"
    -00319 #endif//GLM_EXTERNAL_TEMPLATE
    -00320 
    -00321 #endif//glm_core_type_mat4x4
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat4x3
    +
    30 #define glm_core_type_mat4x3
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat4x3
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec3<T> col_type;
    +
    58  typedef tvec4<T> row_type;
    +
    59  typedef tmat4x3<T> type;
    +
    60  typedef tmat3x4<T> transpose_type;
    +
    61 
    +
    62  static GLM_FUNC_DECL size_type col_size();
    +
    63  static GLM_FUNC_DECL size_type row_size();
    +
    64 
    +
    65  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    66 
    +
    67  private:
    +
    68  // Data
    +
    69  col_type value[4];
    +
    70 
    +
    71  public:
    +
    72  // Constructors
    +
    73  GLM_FUNC_DECL tmat4x3();
    +
    74  GLM_FUNC_DECL tmat4x3(tmat4x3 const & m);
    +
    75 
    +
    76  GLM_FUNC_DECL explicit tmat4x3(
    +
    77  ctor Null);
    +
    78  GLM_FUNC_DECL explicit tmat4x3(
    +
    79  value_type const & x);
    +
    80  GLM_FUNC_DECL explicit tmat4x3(
    +
    81  value_type const & x0, value_type const & y0, value_type const & z0,
    +
    82  value_type const & x1, value_type const & y1, value_type const & z1,
    +
    83  value_type const & x2, value_type const & y2, value_type const & z2,
    +
    84  value_type const & x3, value_type const & y3, value_type const & z3);
    +
    85  GLM_FUNC_DECL explicit tmat4x3(
    +
    86  col_type const & v0,
    +
    87  col_type const & v1,
    +
    88  col_type const & v2,
    +
    89  col_type const & v3);
    +
    90 
    +
    92  // Conversions
    +
    93  template <typename U>
    +
    94  GLM_FUNC_DECL explicit tmat4x3(
    +
    95  U const & x);
    +
    96 
    +
    97  template <
    +
    98  typename X1, typename Y1, typename Z1,
    +
    99  typename X2, typename Y2, typename Z2,
    +
    100  typename X3, typename Y3, typename Z3,
    +
    101  typename X4, typename Y4, typename Z4>
    +
    102  GLM_FUNC_DECL explicit tmat4x3(
    +
    103  X1 const & x1, Y1 const & y1, Z1 const & z1,
    +
    104  X2 const & x2, Y2 const & y2, Z2 const & z2,
    +
    105  X3 const & x3, Y3 const & y3, Z3 const & z3,
    +
    106  X4 const & x4, Y4 const & y4, Z4 const & z4);
    +
    107 
    +
    108  template <typename V1, typename V2, typename V3, typename V4>
    +
    109  GLM_FUNC_DECL explicit tmat4x3(
    +
    110  tvec3<V1> const & v1,
    +
    111  tvec3<V2> const & v2,
    +
    112  tvec3<V3> const & v3,
    +
    113  tvec3<V4> const & v4);
    +
    114 
    +
    115  // Matrix conversions
    +
    116  template <typename U>
    +
    117  GLM_FUNC_DECL explicit tmat4x3(tmat4x3<U> const & m);
    +
    118 
    +
    119  GLM_FUNC_DECL explicit tmat4x3(tmat2x2<T> const & x);
    +
    120  GLM_FUNC_DECL explicit tmat4x3(tmat3x3<T> const & x);
    +
    121  GLM_FUNC_DECL explicit tmat4x3(tmat4x4<T> const & x);
    +
    122  GLM_FUNC_DECL explicit tmat4x3(tmat2x3<T> const & x);
    +
    123  GLM_FUNC_DECL explicit tmat4x3(tmat3x2<T> const & x);
    +
    124  GLM_FUNC_DECL explicit tmat4x3(tmat2x4<T> const & x);
    +
    125  GLM_FUNC_DECL explicit tmat4x3(tmat4x2<T> const & x);
    +
    126  GLM_FUNC_DECL explicit tmat4x3(tmat3x4<T> const & x);
    +
    127 
    +
    128  // Accesses
    +
    129  col_type & operator[](size_type i);
    +
    130  col_type const & operator[](size_type i) const;
    +
    131 
    +
    132  // Unary updatable operators
    +
    133  GLM_FUNC_DECL tmat4x3<T> & operator= (tmat4x3<T> const & m);
    +
    134  template <typename U>
    +
    135  GLM_FUNC_DECL tmat4x3<T> & operator= (tmat4x3<U> const & m);
    +
    136  template <typename U>
    +
    137  GLM_FUNC_DECL tmat4x3<T> & operator+= (U const & s);
    +
    138  template <typename U>
    +
    139  GLM_FUNC_DECL tmat4x3<T> & operator+= (tmat4x3<U> const & m);
    +
    140  template <typename U>
    +
    141  GLM_FUNC_DECL tmat4x3<T> & operator-= (U const & s);
    +
    142  template <typename U>
    +
    143  GLM_FUNC_DECL tmat4x3<T> & operator-= (tmat4x3<U> const & m);
    +
    144  template <typename U>
    +
    145  GLM_FUNC_DECL tmat4x3<T> & operator*= (U const & s);
    +
    146  template <typename U>
    +
    147  GLM_FUNC_DECL tmat4x3<T> & operator*= (tmat4x3<U> const & m);
    +
    148  template <typename U>
    +
    149  GLM_FUNC_DECL tmat4x3<T> & operator/= (U const & s);
    +
    150 
    +
    151  GLM_FUNC_DECL tmat4x3<T> & operator++ ();
    +
    152  GLM_FUNC_DECL tmat4x3<T> & operator-- ();
    +
    153  };
    +
    154 
    +
    155  // Binary operators
    +
    156  template <typename T>
    +
    157  tmat4x3<T> operator+ (
    +
    158  tmat4x3<T> const & m,
    +
    159  typename tmat4x3<T>::value_type const & s);
    +
    160 
    +
    161  template <typename T>
    +
    162  tmat4x3<T> operator+ (
    +
    163  tmat4x3<T> const & m1,
    +
    164  tmat4x3<T> const & m2);
    +
    165 
    +
    166  template <typename T>
    +
    167  tmat4x3<T> operator- (
    +
    168  tmat4x3<T> const & m,
    +
    169  typename tmat4x3<T>::value_type const & s);
    +
    170 
    +
    171  template <typename T>
    +
    172  tmat4x3<T> operator- (
    +
    173  tmat4x3<T> const & m1,
    +
    174  tmat4x3<T> const & m2);
    +
    175 
    +
    176  template <typename T>
    +
    177  tmat4x3<T> operator* (
    +
    178  tmat4x3<T> const & m,
    +
    179  typename tmat4x3<T>::value_type const & s);
    +
    180 
    +
    181  template <typename T>
    +
    182  tmat4x3<T> operator* (
    +
    183  typename tmat4x3<T>::value_type const & s,
    +
    184  tmat4x3<T> const & m);
    +
    185 
    +
    186  template <typename T>
    +
    187  typename tmat4x3<T>::col_type operator* (
    +
    188  tmat4x3<T> const & m,
    +
    189  typename tmat4x3<T>::row_type const & v);
    +
    190 
    +
    191  template <typename T>
    +
    192  typename tmat4x3<T>::row_type operator* (
    +
    193  typename tmat4x3<T>::col_type const & v,
    +
    194  tmat4x3<T> const & m);
    +
    195 
    +
    196  template <typename T>
    +
    197  tmat2x3<T> operator* (
    +
    198  tmat4x3<T> const & m1,
    +
    199  tmat2x4<T> const & m2);
    +
    200 
    +
    201  template <typename T>
    +
    202  tmat3x3<T> operator* (
    +
    203  tmat4x3<T> const & m1,
    +
    204  tmat3x4<T> const & m2);
    +
    205 
    +
    206  template <typename T>
    +
    207  tmat4x3<T> operator* (
    +
    208  tmat4x3<T> const & m1,
    +
    209  tmat4x4<T> const & m2);
    +
    210 
    +
    211  template <typename T>
    +
    212  tmat4x3<T> operator/ (
    +
    213  tmat4x3<T> const & m,
    +
    214  typename tmat4x3<T>::value_type const & s);
    +
    215 
    +
    216  template <typename T>
    +
    217  tmat4x3<T> operator/ (
    +
    218  typename tmat4x3<T>::value_type const & s,
    +
    219  tmat4x3<T> const & m);
    +
    220 
    +
    221  // Unary constant operators
    +
    222  template <typename T>
    +
    223  tmat4x3<T> const operator- (
    +
    224  tmat4x3<T> const & m);
    +
    225 
    +
    226  template <typename T>
    +
    227  tmat4x3<T> const operator-- (
    +
    228  tmat4x3<T> const & m,
    +
    229  int);
    +
    230 
    +
    231  template <typename T>
    +
    232  tmat4x3<T> const operator++ (
    +
    233  tmat4x3<T> const & m,
    +
    234  int);
    +
    235 }//namespace detail
    +
    236 
    +
    239 
    +
    245  typedef detail::tmat4x3<lowp_float> lowp_mat4x3;
    +
    246 
    +
    252  typedef detail::tmat4x3<mediump_float> mediump_mat4x3;
    +
    253 
    +
    259  typedef detail::tmat4x3<highp_float> highp_mat4x3;
    +
    260 
    +
    262 }//namespace glm
    +
    263 
    +
    264 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    265 #include "type_mat4x3.inl"
    +
    266 #endif //GLM_EXTERNAL_TEMPLATE
    +
    267 
    +
    268 #endif//glm_core_type_mat4x3
    +
    + - diff --git a/doc/api/a00107.html b/doc/api/a00107.html index a74fc0e7..6896a726 100644 --- a/doc/api/a00107.html +++ b/doc/api/a00107.html @@ -2,42 +2,31 @@ - -type_precision.hpp File Reference + +type_mat4x4.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,175 +35,34 @@
  • File List
  • + +
    -
    -
    type_precision.hpp File Reference
    -
    +
    type_mat4x4.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    typedef float16 f16
    typedef detail::tmat2x2< f16 > f16mat2
    typedef detail::tmat2x2< f16 > f16mat2x2
    typedef detail::tmat2x3< f16 > f16mat2x3
    typedef detail::tmat2x4< f16 > f16mat2x4
    typedef detail::tmat3x3< f16 > f16mat3
    typedef detail::tmat3x2< f16 > f16mat3x2
    typedef detail::tmat3x3< f16 > f16mat3x3
    typedef detail::tmat3x4< f16 > f16mat3x4
    typedef detail::tmat4x4< f16 > f16mat4
    typedef detail::tmat4x2< f16 > f16mat4x2
    typedef detail::tmat4x3< f16 > f16mat4x3
    typedef detail::tmat4x4< f16 > f16mat4x4
    typedef detail::tquat< f16 > f16quat
    typedef detail::tvec1< f16 > f16vec1
    typedef detail::tvec2< f16 > f16vec2
    typedef detail::tvec3< f16 > f16vec3
    typedef detail::tvec4< f16 > f16vec4
    typedef float32 f32
    typedef detail::tmat2x2< f32 > f32mat2
    typedef detail::tmat2x2< f32 > f32mat2x2
    typedef detail::tmat2x3< f32 > f32mat2x3
    typedef detail::tmat2x4< f32 > f32mat2x4
    typedef detail::tmat3x3< f32 > f32mat3
    typedef detail::tmat3x2< f32 > f32mat3x2
    typedef detail::tmat3x3< f32 > f32mat3x3
    typedef detail::tmat3x4< f32 > f32mat3x4
    typedef detail::tmat4x4< f32 > f32mat4
    typedef detail::tmat4x2< f32 > f32mat4x2
    typedef detail::tmat4x3< f32 > f32mat4x3
    typedef detail::tmat4x4< f32 > f32mat4x4
    typedef detail::tquat< f32 > f32quat
    typedef detail::tvec1< f32 > f32vec1
    typedef detail::tvec2< f32 > f32vec2
    typedef detail::tvec3< f32 > f32vec3
    typedef detail::tvec4< f32 > f32vec4
    typedef float64 f64
    typedef detail::tmat2x2< f64 > f64mat2
    typedef detail::tmat2x2< f64 > f64mat2x2
    typedef detail::tmat2x3< f64 > f64mat2x3
    typedef detail::tmat2x4< f64 > f64mat2x4
    typedef detail::tmat3x3< f64 > f64mat3
    typedef detail::tmat3x2< f64 > f64mat3x2
    typedef detail::tmat3x3< f64 > f64mat3x3
    typedef detail::tmat3x4< f64 > f64mat3x4
    typedef detail::tmat4x4< f64 > f64mat4
    typedef detail::tmat4x2< f64 > f64mat4x2
    typedef detail::tmat4x3< f64 > f64mat4x3
    typedef detail::tmat4x4< f64 > f64mat4x4
    typedef detail::tquat< f64 > f64quat
    typedef detail::tvec1< f64 > f64vec1
    typedef detail::tvec2< f64 > f64vec2
    typedef detail::tvec3< f64 > f64vec3
    typedef detail::tvec4< f64 > f64vec4
    typedef detail::float16 float16
    typedef detail::float16 float16_t
    typedef detail::float32 float32
    typedef detail::float32 float32_t
    typedef detail::float64 float64
    typedef detail::float64 float64_t
    typedef detail::tmat2x2< f32 > fmat2
    typedef detail::tmat2x2< f32 > fmat2x2
    typedef detail::tmat2x3< f32 > fmat2x3
    typedef detail::tmat2x4< f32 > fmat2x4
    typedef detail::tmat3x3< f32 > fmat3
    typedef detail::tmat3x2< f32 > fmat3x2
    typedef detail::tmat3x3< f32 > fmat3x3
    typedef detail::tmat3x4< f32 > fmat3x4
    typedef detail::tmat4x4< f32 > fmat4
    typedef detail::tmat4x2< f32 > fmat4x2
    typedef detail::tmat4x3< f32 > fmat4x3
    typedef detail::tmat4x4< f32 > fmat4x4
    typedef detail::tvec1< float > fvec1
    typedef detail::tvec2< float > fvec2
    typedef detail::tvec3< float > fvec3
    typedef detail::tvec4< float > fvec4
    typedef detail::int16 i16
    typedef detail::tvec1< i16 > i16vec1
    typedef detail::tvec2< i16 > i16vec2
    typedef detail::tvec3< i16 > i16vec3
    typedef detail::tvec4< i16 > i16vec4
    typedef detail::int32 i32
    typedef detail::tvec1< i32 > i32vec1
    typedef detail::tvec2< i32 > i32vec2
    typedef detail::tvec3< i32 > i32vec3
    typedef detail::tvec4< i32 > i32vec4
    typedef detail::int64 i64
    typedef detail::tvec1< i64 > i64vec1
    typedef detail::tvec2< i64 > i64vec2
    typedef detail::tvec3< i64 > i64vec3
    typedef detail::tvec4< i64 > i64vec4
    typedef detail::int8 i8
    typedef detail::tvec1< i8 > i8vec1
    typedef detail::tvec2< i8 > i8vec2
    typedef detail::tvec3< i8 > i8vec3
    typedef detail::tvec4< i8 > i8vec4
    typedef detail::int16 int16
    typedef detail::int16 int16_t
    typedef detail::int32 int32
    typedef detail::int32 int32_t
    typedef detail::int64 int64
    typedef detail::int64 int64_t
    typedef detail::int8 int8
    typedef detail::int8 int8_t
    typedef detail::uint16 u16
    typedef detail::tvec1< u16 > u16vec1
    typedef detail::tvec2< u16 > u16vec2
    typedef detail::tvec3< u16 > u16vec3
    typedef detail::tvec4< u16 > u16vec4
    typedef detail::uint32 u32
    typedef detail::tvec1< u32 > u32vec1
    typedef detail::tvec2< u32 > u32vec2
    typedef detail::tvec3< u32 > u32vec3
    typedef detail::tvec4< u32 > u32vec4
    typedef detail::uint64 u64
    typedef detail::tvec1< u64 > u64vec1
    typedef detail::tvec2< u64 > u64vec2
    typedef detail::tvec3< u64 > u64vec3
    typedef detail::tvec4< u64 > u64vec4
    typedef detail::uint8 u8
    typedef detail::tvec1< u8 > u8vec1
    typedef detail::tvec2< u8 > u8vec2
    typedef detail::tvec3< u8 > u8vec3
    typedef detail::tvec4< u8 > u8vec4
    typedef detail::uint16 uint16
    typedef detail::uint16 uint16_t
    typedef detail::uint32 uint32
    typedef detail::uint32 uint32_t
    typedef detail::uint64 uint64
    typedef detail::uint64 uint64_t
    typedef detail::uint8 uint8
    typedef detail::uint8 uint8_t
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_type_precision: Vector and matrix types with defined precisions

    -
    Date:
    2009-06-04 / 2011-12-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    -
    -GLM_GTC_quaternion: Quaternion types and functions (dependence)
    - -

    Definition in file type_precision.hpp.

    -
    - +

    GLM Core

    +
    Date
    2005-01-27 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_mat4x4.hpp.

    + + - diff --git a/doc/api/a00107_source.html b/doc/api/a00107_source.html index 4e3f845b..eda24fa6 100644 --- a/doc/api/a00107_source.html +++ b/doc/api/a00107_source.html @@ -2,42 +2,31 @@ - -type_precision.hpp Source File + +type_mat4x4.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,401 +35,305 @@
  • File List
  • + +
    -
    type_precision.hpp
    -
    +
    type_mat4x4.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 
    -00042 
    -00043 #ifndef GLM_GTC_type_precision
    -00044 #define GLM_GTC_type_precision GLM_VERSION
    -00045 
    -00046 // Dependency:
    -00047 #include "../glm.hpp"
    -00048 #include "../gtc/half_float.hpp"
    -00049 #include "../gtc/quaternion.hpp"
    -00050 
    -00051 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00052 #       pragma message("GLM: GLM_GTC_type_precision extension included")
    -00053 #endif
    -00054 
    -00055 namespace glm
    -00056 {
    -00058         // Signed int vector types 
    -00059 
    -00062 
    -00065         typedef detail::int8 int8;
    -00066         
    -00069         typedef detail::int16 int16;
    -00070 
    -00073         typedef detail::int32 int32;
    -00074 
    -00077         typedef detail::int64 int64;
    -00078 
    -00079 
    -00082         typedef detail::int8 int8_t;
    -00083         
    -00086         typedef detail::int16 int16_t;
    -00087 
    -00090         typedef detail::int32 int32_t;
    -00091 
    -00094         typedef detail::int64 int64_t;
    -00095 
    -00096 
    -00099         typedef detail::int8 i8;
    -00100         
    -00103         typedef detail::int16 i16;
    -00104 
    -00107         typedef detail::int32 i32;
    -00108 
    -00111         typedef detail::int64 i64;
    -00112 
    -00113 
    -00116         typedef detail::tvec1<i8> i8vec1;
    -00117         
    -00120         typedef detail::tvec2<i8> i8vec2;
    -00121 
    -00124         typedef detail::tvec3<i8> i8vec3;
    -00125 
    -00128         typedef detail::tvec4<i8> i8vec4;
    -00129 
    -00130 
    -00133         typedef detail::tvec1<i16> i16vec1;
    -00134         
    -00137         typedef detail::tvec2<i16> i16vec2;
    -00138 
    -00141         typedef detail::tvec3<i16> i16vec3;
    -00142 
    -00145         typedef detail::tvec4<i16> i16vec4;
    -00146 
    -00147 
    -00150         typedef detail::tvec1<i32> i32vec1;
    -00151         
    -00154         typedef detail::tvec2<i32> i32vec2;
    -00155 
    -00158         typedef detail::tvec3<i32> i32vec3;
    -00159 
    -00162         typedef detail::tvec4<i32> i32vec4;
    -00163 
    -00164 
    -00167         typedef detail::tvec1<i64> i64vec1;
    -00168         
    -00171         typedef detail::tvec2<i64> i64vec2;
    -00172 
    -00175         typedef detail::tvec3<i64> i64vec3;
    -00176 
    -00179         typedef detail::tvec4<i64> i64vec4;
    -00180 
    -00181 
    -00183         // Unsigned int vector types 
    -00184 
    -00187         typedef detail::uint8 uint8;
    -00188         
    -00191         typedef detail::uint16 uint16;
    -00192 
    -00195         typedef detail::uint32 uint32;
    -00196 
    -00199         typedef detail::uint64 uint64;
    -00200 
    -00201 
    -00204         typedef detail::uint8 uint8_t;
    -00205         
    -00208         typedef detail::uint16 uint16_t;
    -00209 
    -00212         typedef detail::uint32 uint32_t;
    -00213 
    -00216         typedef detail::uint64 uint64_t;
    -00217 
    -00218 
    -00221         typedef detail::uint8 u8;
    -00222         
    -00225         typedef detail::uint16 u16;
    -00226 
    -00229         typedef detail::uint32 u32;
    -00230 
    -00233         typedef detail::uint64 u64;
    -00234 
    -00235 
    -00238         typedef detail::tvec1<u8> u8vec1;
    -00239         
    -00242         typedef detail::tvec2<u8> u8vec2;
    -00243 
    -00246         typedef detail::tvec3<u8> u8vec3;
    -00247 
    -00250         typedef detail::tvec4<u8> u8vec4;
    -00251 
    -00252 
    -00255         typedef detail::tvec1<u16> u16vec1;
    -00256         
    -00259         typedef detail::tvec2<u16> u16vec2;
    -00260 
    -00263         typedef detail::tvec3<u16> u16vec3;
    -00264 
    -00267         typedef detail::tvec4<u16> u16vec4;
    -00268 
    -00269 
    -00272         typedef detail::tvec1<u32> u32vec1;
    -00273         
    -00276         typedef detail::tvec2<u32> u32vec2;
    -00277 
    -00280         typedef detail::tvec3<u32> u32vec3;
    -00281 
    -00284         typedef detail::tvec4<u32> u32vec4;
    -00285 
    -00286 
    -00289         typedef detail::tvec1<u64> u64vec1;
    -00290         
    -00293         typedef detail::tvec2<u64> u64vec2;
    -00294 
    -00297         typedef detail::tvec3<u64> u64vec3;
    -00298 
    -00301         typedef detail::tvec4<u64> u64vec4;
    -00302 
    -00303 
    -00305         // Float vector types 
    -00306 
    -00309         typedef detail::float16 float16;
    -00310 
    -00313         typedef detail::float32 float32;
    -00314 
    -00317         typedef detail::float64 float64;
    -00318 
    -00319 
    -00322         typedef detail::float16 float16_t;
    -00323 
    -00326         typedef detail::float32 float32_t;
    -00327 
    -00330         typedef detail::float64 float64_t;
    -00331 
    -00332 
    -00335         typedef float16 f16;
    -00336 
    -00339         typedef float32 f32;
    -00340 
    -00343         typedef float64 f64;
    -00344 
    -00345 
    -00348         typedef detail::tvec1<float> fvec1;
    -00349 
    -00352         typedef detail::tvec2<float> fvec2;
    -00353 
    -00356         typedef detail::tvec3<float> fvec3;
    -00357 
    -00360         typedef detail::tvec4<float> fvec4;
    -00361 
    -00362 
    -00365         typedef detail::tvec1<f16> f16vec1;
    -00366 
    -00369         typedef detail::tvec2<f16> f16vec2;
    -00370 
    -00373         typedef detail::tvec3<f16> f16vec3;
    -00374 
    -00377         typedef detail::tvec4<f16> f16vec4;
    -00378 
    -00379         
    -00382         typedef detail::tvec1<f32> f32vec1;
    -00383 
    -00386         typedef detail::tvec2<f32> f32vec2;
    -00387 
    -00390         typedef detail::tvec3<f32> f32vec3;
    -00391 
    -00394         typedef detail::tvec4<f32> f32vec4;
    -00395 
    -00396 
    -00399         typedef detail::tvec1<f64> f64vec1;
    -00400 
    -00403         typedef detail::tvec2<f64> f64vec2;
    -00404 
    -00407         typedef detail::tvec3<f64> f64vec3;
    -00408 
    -00411         typedef detail::tvec4<f64> f64vec4;
    -00412 
    -00413 
    -00415         // Float matrix types 
    -00416 
    -00419         //typedef detail::tmat1x1<f32> fmat1;
    -00420 
    -00423         typedef detail::tmat2x2<f32> fmat2;
    -00424 
    -00427         typedef detail::tmat3x3<f32> fmat3;
    -00428 
    -00431         typedef detail::tmat4x4<f32> fmat4;
    -00432 
    -00433 
    -00436         //typedef f32 fmat1x1;
    -00437 
    -00440         typedef detail::tmat2x2<f32> fmat2x2;
    -00441 
    -00444         typedef detail::tmat2x3<f32> fmat2x3;
    -00445 
    -00448         typedef detail::tmat2x4<f32> fmat2x4;
    -00449 
    -00452         typedef detail::tmat3x2<f32> fmat3x2;
    -00453 
    -00456         typedef detail::tmat3x3<f32> fmat3x3;
    -00457 
    -00460         typedef detail::tmat3x4<f32> fmat3x4;
    -00461 
    -00464         typedef detail::tmat4x2<f32> fmat4x2;
    -00465 
    -00468         typedef detail::tmat4x3<f32> fmat4x3;
    -00469 
    -00472         typedef detail::tmat4x4<f32> fmat4x4;
    -00473 
    -00474 
    -00477         //typedef detail::tmat1x1<f16> f16mat1;
    -00478 
    -00481         typedef detail::tmat2x2<f16> f16mat2;
    -00482 
    -00485         typedef detail::tmat3x3<f16> f16mat3;
    -00486 
    -00489         typedef detail::tmat4x4<f16> f16mat4;
    -00490 
    -00491 
    -00494         //typedef f16 f16mat1x1;
    -00495 
    -00498         typedef detail::tmat2x2<f16> f16mat2x2;
    -00499 
    -00502         typedef detail::tmat2x3<f16> f16mat2x3;
    -00503 
    -00506         typedef detail::tmat2x4<f16> f16mat2x4;
    -00507 
    -00510         typedef detail::tmat3x2<f16> f16mat3x2;
    -00511 
    -00514         typedef detail::tmat3x3<f16> f16mat3x3;
    -00515 
    -00518         typedef detail::tmat3x4<f16> f16mat3x4;
    -00519 
    -00522         typedef detail::tmat4x2<f16> f16mat4x2;
    -00523 
    -00526         typedef detail::tmat4x3<f16> f16mat4x3;
    -00527 
    -00530         typedef detail::tmat4x4<f16> f16mat4x4;
    -00531 
    -00532 
    -00535         //typedef detail::tmat1x1<f32> f32mat1;
    -00536 
    -00539         typedef detail::tmat2x2<f32> f32mat2;
    -00540 
    -00543         typedef detail::tmat3x3<f32> f32mat3;
    -00544 
    -00547         typedef detail::tmat4x4<f32> f32mat4;
    -00548 
    -00549 
    -00552         //typedef f32 f32mat1x1;
    -00553 
    -00556         typedef detail::tmat2x2<f32> f32mat2x2;
    -00557 
    -00560         typedef detail::tmat2x3<f32> f32mat2x3;
    -00561 
    -00564         typedef detail::tmat2x4<f32> f32mat2x4;
    -00565 
    -00568         typedef detail::tmat3x2<f32> f32mat3x2;
    -00569 
    -00572         typedef detail::tmat3x3<f32> f32mat3x3;
    -00573 
    -00576         typedef detail::tmat3x4<f32> f32mat3x4;
    -00577 
    -00580         typedef detail::tmat4x2<f32> f32mat4x2;
    -00581 
    -00584         typedef detail::tmat4x3<f32> f32mat4x3;
    -00585 
    -00588         typedef detail::tmat4x4<f32> f32mat4x4;
    -00589 
    -00590 
    -00593         //typedef detail::tmat1x1<f64> f64mat1;
    -00594 
    -00597         typedef detail::tmat2x2<f64> f64mat2;
    -00598 
    -00601         typedef detail::tmat3x3<f64> f64mat3;
    -00602 
    -00605         typedef detail::tmat4x4<f64> f64mat4;
    -00606 
    -00607 
    -00610         //typedef f64 f64mat1x1;
    -00611 
    -00614         typedef detail::tmat2x2<f64> f64mat2x2;
    -00615 
    -00618         typedef detail::tmat2x3<f64> f64mat2x3;
    -00619 
    -00622         typedef detail::tmat2x4<f64> f64mat2x4;
    -00623 
    -00626         typedef detail::tmat3x2<f64> f64mat3x2;
    -00627 
    -00630         typedef detail::tmat3x3<f64> f64mat3x3;
    -00631 
    -00634         typedef detail::tmat3x4<f64> f64mat3x4;
    -00635 
    -00638         typedef detail::tmat4x2<f64> f64mat4x2;
    -00639 
    -00642         typedef detail::tmat4x3<f64> f64mat4x3;
    -00643 
    -00646         typedef detail::tmat4x4<f64> f64mat4x4;
    -00647 
    -00648 
    -00650         // Quaternion types 
    -00651 
    -00654         typedef detail::tquat<f16> f16quat;
    -00655 
    -00658         typedef detail::tquat<f32> f32quat;
    -00659 
    -00662         typedef detail::tquat<f64> f64quat;
    -00663 
    -00665 }//namespace glm
    -00666 
    -00667 #include "type_precision.inl"
    -00668 
    -00669 #endif//GLM_GTC_type_precision
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_mat4x4
    +
    30 #define glm_core_type_mat4x4
    +
    31 
    +
    32 #include "type_mat.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  template <typename T> struct tvec1;
    +
    38  template <typename T> struct tvec2;
    +
    39  template <typename T> struct tvec3;
    +
    40  template <typename T> struct tvec4;
    +
    41  template <typename T> struct tmat2x2;
    +
    42  template <typename T> struct tmat2x3;
    +
    43  template <typename T> struct tmat2x4;
    +
    44  template <typename T> struct tmat3x2;
    +
    45  template <typename T> struct tmat3x3;
    +
    46  template <typename T> struct tmat3x4;
    +
    47  template <typename T> struct tmat4x2;
    +
    48  template <typename T> struct tmat4x3;
    +
    49  template <typename T> struct tmat4x4;
    +
    50 
    +
    51  template <typename T>
    +
    52  struct tmat4x4
    +
    53  {
    +
    54  enum ctor{null};
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec4<T> col_type;
    +
    58  typedef tvec4<T> row_type;
    +
    59  typedef tmat4x4<T> type;
    +
    60  typedef tmat4x4<T> transpose_type;
    +
    61 
    +
    62  static GLM_FUNC_DECL size_type col_size();
    +
    63  static GLM_FUNC_DECL size_type row_size();
    +
    64 
    +
    65  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    66 
    +
    67  public:
    +
    70  GLM_FUNC_DECL tmat4x4<T> _inverse() const;
    +
    72 
    +
    73  private:
    +
    74  // Data
    +
    75  col_type value[4];
    +
    76 
    +
    77  public:
    +
    78  // Constructors
    +
    79  GLM_FUNC_DECL tmat4x4();
    +
    80  GLM_FUNC_DECL tmat4x4(tmat4x4 const & m);
    +
    81 
    +
    82  GLM_FUNC_DECL explicit tmat4x4(
    +
    83  ctor Null);
    +
    84  GLM_FUNC_DECL explicit tmat4x4(
    +
    85  value_type const & x);
    +
    86  GLM_FUNC_DECL explicit tmat4x4(
    +
    87  value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
    +
    88  value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
    +
    89  value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2,
    +
    90  value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3);
    +
    91  GLM_FUNC_DECL explicit tmat4x4(
    +
    92  col_type const & v0,
    +
    93  col_type const & v1,
    +
    94  col_type const & v2,
    +
    95  col_type const & v3);
    +
    96 
    +
    98  // Conversions
    +
    99  template <typename U>
    +
    100  GLM_FUNC_DECL explicit tmat4x4(
    +
    101  U const & x);
    +
    102 
    +
    103  template <
    +
    104  typename X1, typename Y1, typename Z1, typename W1,
    +
    105  typename X2, typename Y2, typename Z2, typename W2,
    +
    106  typename X3, typename Y3, typename Z3, typename W3,
    +
    107  typename X4, typename Y4, typename Z4, typename W4>
    +
    108  GLM_FUNC_DECL explicit tmat4x4(
    +
    109  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    +
    110  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
    +
    111  X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,
    +
    112  X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4);
    +
    113 
    +
    114  template <typename V1, typename V2, typename V3, typename V4>
    +
    115  GLM_FUNC_DECL explicit tmat4x4(
    +
    116  tvec4<V1> const & v1,
    +
    117  tvec4<V2> const & v2,
    +
    118  tvec4<V3> const & v3,
    +
    119  tvec4<V4> const & v4);
    +
    120 
    +
    121  // Matrix conversions
    +
    122  template <typename U>
    +
    123  GLM_FUNC_DECL explicit tmat4x4(tmat4x4<U> const & m);
    +
    124 
    +
    125  GLM_FUNC_DECL explicit tmat4x4(tmat2x2<T> const & x);
    +
    126  GLM_FUNC_DECL explicit tmat4x4(tmat3x3<T> const & x);
    +
    127  GLM_FUNC_DECL explicit tmat4x4(tmat2x3<T> const & x);
    +
    128  GLM_FUNC_DECL explicit tmat4x4(tmat3x2<T> const & x);
    +
    129  GLM_FUNC_DECL explicit tmat4x4(tmat2x4<T> const & x);
    +
    130  GLM_FUNC_DECL explicit tmat4x4(tmat4x2<T> const & x);
    +
    131  GLM_FUNC_DECL explicit tmat4x4(tmat3x4<T> const & x);
    +
    132  GLM_FUNC_DECL explicit tmat4x4(tmat4x3<T> const & x);
    +
    133 
    +
    134  // Accesses
    +
    135  GLM_FUNC_DECL col_type & operator[](size_type i);
    +
    136  GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    +
    137 
    +
    138  // Unary updatable operators
    +
    139  GLM_FUNC_DECL tmat4x4<T> & operator= (tmat4x4<T> const & m);
    +
    140  template <typename U>
    +
    141  GLM_FUNC_DECL tmat4x4<T> & operator= (tmat4x4<U> const & m);
    +
    142  template <typename U>
    +
    143  GLM_FUNC_DECL tmat4x4<T> & operator+= (U const & s);
    +
    144  template <typename U>
    +
    145  GLM_FUNC_DECL tmat4x4<T> & operator+= (tmat4x4<U> const & m);
    +
    146  template <typename U>
    +
    147  GLM_FUNC_DECL tmat4x4<T> & operator-= (U const & s);
    +
    148  template <typename U>
    +
    149  GLM_FUNC_DECL tmat4x4<T> & operator-= (tmat4x4<U> const & m);
    +
    150  template <typename U>
    +
    151  GLM_FUNC_DECL tmat4x4<T> & operator*= (U const & s);
    +
    152  template <typename U>
    +
    153  GLM_FUNC_DECL tmat4x4<T> & operator*= (tmat4x4<U> const & m);
    +
    154  template <typename U>
    +
    155  GLM_FUNC_DECL tmat4x4<T> & operator/= (U const & s);
    +
    156  template <typename U>
    +
    157  GLM_FUNC_DECL tmat4x4<T> & operator/= (tmat4x4<U> const & m);
    +
    158  GLM_FUNC_DECL tmat4x4<T> & operator++ ();
    +
    159  GLM_FUNC_DECL tmat4x4<T> & operator-- ();
    +
    160  };
    +
    161 
    +
    162  // Binary operators
    +
    163  template <typename T>
    +
    164  tmat4x4<T> operator+ (
    +
    165  tmat4x4<T> const & m,
    +
    166  typename tmat4x4<T>::value_type const & s);
    +
    167 
    +
    168  template <typename T>
    +
    169  tmat4x4<T> operator+ (
    +
    170  typename tmat4x4<T>::value_type const & s,
    +
    171  tmat4x4<T> const & m);
    +
    172 
    +
    173  template <typename T>
    +
    174  tmat4x4<T> operator+ (
    +
    175  tmat4x4<T> const & m1,
    +
    176  tmat4x4<T> const & m2);
    +
    177 
    +
    178  template <typename T>
    +
    179  tmat4x4<T> operator- (
    +
    180  tmat4x4<T> const & m,
    +
    181  typename tmat4x4<T>::value_type const & s);
    +
    182 
    +
    183  template <typename T>
    +
    184  tmat4x4<T> operator- (
    +
    185  typename tmat4x4<T>::value_type const & s,
    +
    186  tmat4x4<T> const & m);
    +
    187 
    +
    188  template <typename T>
    +
    189  tmat4x4<T> operator- (
    +
    190  tmat4x4<T> const & m1,
    +
    191  tmat4x4<T> const & m2);
    +
    192 
    +
    193  template <typename T>
    +
    194  tmat4x4<T> operator* (
    +
    195  tmat4x4<T> const & m,
    +
    196  typename tmat4x4<T>::value_type const & s);
    +
    197 
    +
    198  template <typename T>
    +
    199  tmat4x4<T> operator* (
    +
    200  typename tmat4x4<T>::value_type const & s,
    +
    201  tmat4x4<T> const & m);
    +
    202 
    +
    203  template <typename T>
    +
    204  typename tmat4x4<T>::col_type operator* (
    +
    205  tmat4x4<T> const & m,
    +
    206  typename tmat4x4<T>::row_type const & v);
    +
    207 
    +
    208  template <typename T>
    +
    209  typename tmat4x4<T>::row_type operator* (
    +
    210  typename tmat4x4<T>::col_type const & v,
    +
    211  tmat4x4<T> const & m);
    +
    212 
    +
    213  template <typename T>
    +
    214  tmat2x4<T> operator* (
    +
    215  tmat4x4<T> const & m1,
    +
    216  tmat2x4<T> const & m2);
    +
    217 
    +
    218  template <typename T>
    +
    219  tmat3x4<T> operator* (
    +
    220  tmat4x4<T> const & m1,
    +
    221  tmat3x4<T> const & m2);
    +
    222 
    +
    223  template <typename T>
    +
    224  tmat4x4<T> operator* (
    +
    225  tmat4x4<T> const & m1,
    +
    226  tmat4x4<T> const & m2);
    +
    227 
    +
    228  template <typename T>
    +
    229  tmat4x4<T> operator/ (
    +
    230  tmat4x4<T> const & m,
    +
    231  typename tmat4x4<T>::value_type const & s);
    +
    232 
    +
    233  template <typename T>
    +
    234  tmat4x4<T> operator/ (
    +
    235  typename tmat4x4<T>::value_type const & s,
    +
    236  tmat4x4<T> const & m);
    +
    237 
    +
    238  template <typename T>
    +
    239  typename tmat4x4<T>::col_type operator/ (
    +
    240  tmat4x4<T> const & m,
    +
    241  typename tmat4x4<T>::row_type const & v);
    +
    242 
    +
    243  template <typename T>
    +
    244  typename tmat4x4<T>::row_type operator/ (
    +
    245  typename tmat4x4<T>::col_type & v,
    +
    246  tmat4x4<T> const & m);
    +
    247 
    +
    248  template <typename T>
    +
    249  tmat4x4<T> operator/ (
    +
    250  tmat4x4<T> const & m1,
    +
    251  tmat4x4<T> const & m2);
    +
    252 
    +
    253  // Unary constant operators
    +
    254  template <typename T>
    +
    255  tmat4x4<T> const operator- (
    +
    256  tmat4x4<T> const & m);
    +
    257 
    +
    258  template <typename T>
    +
    259  tmat4x4<T> const operator-- (
    +
    260  tmat4x4<T> const & m, int);
    +
    261 
    +
    262  template <typename T>
    +
    263  tmat4x4<T> const operator++ (
    +
    264  tmat4x4<T> const & m, int);
    +
    265 
    +
    266 } //namespace detail
    +
    267 
    +
    270 
    +
    276  typedef detail::tmat4x4<lowp_float> lowp_mat4;
    +
    277 
    +
    283  typedef detail::tmat4x4<mediump_float> mediump_mat4;
    +
    284 
    +
    290  typedef detail::tmat4x4<highp_float> highp_mat4;
    +
    291 
    +
    297  typedef detail::tmat4x4<lowp_float> lowp_mat4x4;
    +
    298 
    +
    304  typedef detail::tmat4x4<mediump_float> mediump_mat4x4;
    +
    305 
    +
    311  typedef detail::tmat4x4<highp_float> highp_mat4x4;
    +
    312 
    +
    314 }//namespace glm
    +
    315 
    +
    316 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    317 #include "type_mat4x4.inl"
    +
    318 #endif//GLM_EXTERNAL_TEMPLATE
    +
    319 
    +
    320 #endif//glm_core_type_mat4x4
    +
    + - diff --git a/doc/api/a00108.html b/doc/api/a00108.html index 47d3e37e..c66d2c21 100644 --- a/doc/api/a00108.html +++ b/doc/api/a00108.html @@ -2,42 +2,31 @@ - -type_ptr.hpp File Reference + +type_precision.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,77 +35,309 @@
  • File List
  • + +
    +Typedefs
    -
    type_ptr.hpp File Reference
    - +
    type_precision.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    template<typename T >
    detail::tmat2x2< T > make_mat2 (T const *const ptr)
    template<typename T >
    detail::tmat2x2< T > make_mat2x2 (T const *const ptr)
    template<typename T >
    detail::tmat2x3< T > make_mat2x3 (T const *const ptr)
    template<typename T >
    detail::tmat2x4< T > make_mat2x4 (T const *const ptr)
    template<typename T >
    detail::tmat3x3< T > make_mat3 (T const *const ptr)
    template<typename T >
    detail::tmat3x2< T > make_mat3x2 (T const *const ptr)
    template<typename T >
    detail::tmat3x3< T > make_mat3x3 (T const *const ptr)
    template<typename T >
    detail::tmat3x4< T > make_mat3x4 (T const *const ptr)
    template<typename T >
    detail::tmat4x4< T > make_mat4 (T const *const ptr)
    template<typename T >
    detail::tmat4x2< T > make_mat4x2 (T const *const ptr)
    template<typename T >
    detail::tmat4x3< T > make_mat4x3 (T const *const ptr)
    template<typename T >
    detail::tmat4x4< T > make_mat4x4 (T const *const ptr)
    template<typename T >
    detail::tquat< T > make_quat (T const *const ptr)
    template<typename T >
    detail::tvec2< T > make_vec2 (T const *const ptr)
    template<typename T >
    detail::tvec3< T > make_vec3 (T const *const ptr)
    template<typename T >
    detail::tvec4< T > make_vec4 (T const *const ptr)
    template<typename genType >
    genType::value_type const * value_ptr (genType const &vec)

    +Typedefs

    typedef float16 f16
     
    typedef detail::tmat2x2< f16 > f16mat2
     
    typedef detail::tmat2x2< f16 > f16mat2x2
     
    typedef detail::tmat2x3< f16 > f16mat2x3
     
    typedef detail::tmat2x4< f16 > f16mat2x4
     
    typedef detail::tmat3x3< f16 > f16mat3
     
    typedef detail::tmat3x2< f16 > f16mat3x2
     
    typedef detail::tmat3x3< f16 > f16mat3x3
     
    typedef detail::tmat3x4< f16 > f16mat3x4
     
    typedef detail::tmat4x4< f16 > f16mat4
     
    typedef detail::tmat4x2< f16 > f16mat4x2
     
    typedef detail::tmat4x3< f16 > f16mat4x3
     
    typedef detail::tmat4x4< f16 > f16mat4x4
     
    typedef detail::tquat< f16 > f16quat
     
    typedef detail::tvec1< f16 > f16vec1
     
    typedef detail::tvec2< f16 > f16vec2
     
    typedef detail::tvec3< f16 > f16vec3
     
    typedef detail::tvec4< f16 > f16vec4
     
    typedef float32 f32
     
    typedef detail::tmat2x2< f32 > f32mat2
     
    typedef detail::tmat2x2< f32 > f32mat2x2
     
    typedef detail::tmat2x3< f32 > f32mat2x3
     
    typedef detail::tmat2x4< f32 > f32mat2x4
     
    typedef detail::tmat3x3< f32 > f32mat3
     
    typedef detail::tmat3x2< f32 > f32mat3x2
     
    typedef detail::tmat3x3< f32 > f32mat3x3
     
    typedef detail::tmat3x4< f32 > f32mat3x4
     
    typedef detail::tmat4x4< f32 > f32mat4
     
    typedef detail::tmat4x2< f32 > f32mat4x2
     
    typedef detail::tmat4x3< f32 > f32mat4x3
     
    typedef detail::tmat4x4< f32 > f32mat4x4
     
    typedef detail::tquat< f32 > f32quat
     
    typedef detail::tvec1< f32 > f32vec1
     
    typedef detail::tvec2< f32 > f32vec2
     
    typedef detail::tvec3< f32 > f32vec3
     
    typedef detail::tvec4< f32 > f32vec4
     
    typedef float64 f64
     
    typedef detail::tmat2x2< f64 > f64mat2
     
    typedef detail::tmat2x2< f64 > f64mat2x2
     
    typedef detail::tmat2x3< f64 > f64mat2x3
     
    typedef detail::tmat2x4< f64 > f64mat2x4
     
    typedef detail::tmat3x3< f64 > f64mat3
     
    typedef detail::tmat3x2< f64 > f64mat3x2
     
    typedef detail::tmat3x3< f64 > f64mat3x3
     
    typedef detail::tmat3x4< f64 > f64mat3x4
     
    typedef detail::tmat4x4< f64 > f64mat4
     
    typedef detail::tmat4x2< f64 > f64mat4x2
     
    typedef detail::tmat4x3< f64 > f64mat4x3
     
    typedef detail::tmat4x4< f64 > f64mat4x4
     
    typedef detail::tquat< f64 > f64quat
     
    typedef detail::tvec1< f64 > f64vec1
     
    typedef detail::tvec2< f64 > f64vec2
     
    typedef detail::tvec3< f64 > f64vec3
     
    typedef detail::tvec4< f64 > f64vec4
     
    typedef detail::float16 float16
     
    typedef detail::float16 float16_t
     
    typedef detail::float32 float32
     
    typedef detail::float32 float32_t
     
    typedef detail::float64 float64
     
    typedef detail::float64 float64_t
     
    typedef detail::tmat2x2< f32 > fmat2
     
    typedef detail::tmat2x2< f32 > fmat2x2
     
    typedef detail::tmat2x3< f32 > fmat2x3
     
    typedef detail::tmat2x4< f32 > fmat2x4
     
    typedef detail::tmat3x3< f32 > fmat3
     
    typedef detail::tmat3x2< f32 > fmat3x2
     
    typedef detail::tmat3x3< f32 > fmat3x3
     
    typedef detail::tmat3x4< f32 > fmat3x4
     
    typedef detail::tmat4x4< f32 > fmat4
     
    typedef detail::tmat4x2< f32 > fmat4x2
     
    typedef detail::tmat4x3< f32 > fmat4x3
     
    typedef detail::tmat4x4< f32 > fmat4x4
     
    typedef detail::tvec1< float > fvec1
     
    typedef detail::tvec2< float > fvec2
     
    typedef detail::tvec3< float > fvec3
     
    typedef detail::tvec4< float > fvec4
     
    typedef detail::int16 i16
     
    typedef detail::tvec1< i16 > i16vec1
     
    typedef detail::tvec2< i16 > i16vec2
     
    typedef detail::tvec3< i16 > i16vec3
     
    typedef detail::tvec4< i16 > i16vec4
     
    typedef detail::int32 i32
     
    typedef detail::tvec1< i32 > i32vec1
     
    typedef detail::tvec2< i32 > i32vec2
     
    typedef detail::tvec3< i32 > i32vec3
     
    typedef detail::tvec4< i32 > i32vec4
     
    typedef detail::int64 i64
     
    typedef detail::tvec1< i64 > i64vec1
     
    typedef detail::tvec2< i64 > i64vec2
     
    typedef detail::tvec3< i64 > i64vec3
     
    typedef detail::tvec4< i64 > i64vec4
     
    typedef detail::int8 i8
     
    typedef detail::tvec1< i8 > i8vec1
     
    typedef detail::tvec2< i8 > i8vec2
     
    typedef detail::tvec3< i8 > i8vec3
     
    typedef detail::tvec4< i8 > i8vec4
     
    typedef detail::int16 int16
     
    typedef detail::int16 int16_t
     
    typedef detail::int32 int32
     
    typedef detail::int32 int32_t
     
    typedef detail::int64 int64
     
    typedef detail::int64 int64_t
     
    typedef detail::int8 int8
     
    typedef detail::int8 int8_t
     
    typedef detail::uint16 u16
     
    typedef detail::tvec1< u16 > u16vec1
     
    typedef detail::tvec2< u16 > u16vec2
     
    typedef detail::tvec3< u16 > u16vec3
     
    typedef detail::tvec4< u16 > u16vec4
     
    typedef detail::uint32 u32
     
    typedef detail::tvec1< u32 > u32vec1
     
    typedef detail::tvec2< u32 > u32vec2
     
    typedef detail::tvec3< u32 > u32vec3
     
    typedef detail::tvec4< u32 > u32vec4
     
    typedef detail::uint64 u64
     
    typedef detail::tvec1< u64 > u64vec1
     
    typedef detail::tvec2< u64 > u64vec2
     
    typedef detail::tvec3< u64 > u64vec3
     
    typedef detail::tvec4< u64 > u64vec4
     
    typedef detail::uint8 u8
     
    typedef detail::tvec1< u8 > u8vec1
     
    typedef detail::tvec2< u8 > u8vec2
     
    typedef detail::tvec3< u8 > u8vec3
     
    typedef detail::tvec4< u8 > u8vec4
     
    typedef detail::uint16 uint16
     
    typedef detail::uint16 uint16_t
     
    typedef detail::uint32 uint32
     
    typedef detail::uint32 uint32_t
     
    typedef detail::uint64 uint64
     
    typedef detail::uint64 uint64_t
     
    typedef detail::uint8 uint8
     
    typedef detail::uint8 uint8_t
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_type_ptr: Memory layout access

    -
    Date:
    2009-05-06 / 2011-06-05
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    +

    GLM_GTC_type_precision

    +
    Date
    2009-06-04 / 2011-12-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    -GLM_GTC_half_float: Half-precision floating-point based types and functions (dependence)
    +GLM_GTC_half_float (dependence)
    -GLM_GTC_quaternion: Quaternion types and functions (dependence)
    - -

    Definition in file type_ptr.hpp.

    -
    - +GLM_GTC_quaternion (dependence) +

    Definition in file type_precision.hpp.

    + + - diff --git a/doc/api/a00108_source.html b/doc/api/a00108_source.html index 405af128..b9a94cf7 100644 --- a/doc/api/a00108_source.html +++ b/doc/api/a00108_source.html @@ -2,42 +2,31 @@ - -type_ptr.hpp Source File + +type_precision.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,152 +35,403 @@
  • File List
  • + +
    -
    type_ptr.hpp
    -
    +
    type_precision.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 
    -00041 
    -00042 
    -00043 
    -00044 
    -00045 
    -00046 
    -00047 
    -00048 
    -00049 
    -00050 
    -00051 
    -00052 
    -00053 
    -00054 
    -00055 
    -00056 
    -00057 
    -00058 
    -00059 #ifndef GLM_GTC_type_ptr
    -00060 #define GLM_GTC_type_ptr GLM_VERSION
    -00061 
    -00062 // Dependency:
    -00063 #include "../glm.hpp"
    -00064 #include "../gtc/half_float.hpp"
    -00065 #include "../gtc/quaternion.hpp"
    -00066 #include <cstring>
    -00067 
    -00068 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00069 #       pragma message("GLM: GLM_GTC_type_ptr extension included")
    -00070 #endif
    -00071 
    -00072 namespace glm
    -00073 { 
    -00076     
    -00079         template<typename genType>
    -00080     typename genType::value_type const * value_ptr(genType const & vec);
    -00081 
    -00084         template<typename T>
    -00085     detail::tvec2<T> make_vec2(T const * const ptr);
    -00086 
    -00089         template<typename T>
    -00090     detail::tvec3<T> make_vec3(T const * const ptr);
    -00091 
    -00094         template<typename T>
    -00095     detail::tvec4<T> make_vec4(T const * const ptr);
    -00096 
    -00099         template<typename T>
    -00100     detail::tmat2x2<T> make_mat2x2(T const * const ptr);
    -00101         
    -00104         template<typename T>
    -00105     detail::tmat2x3<T> make_mat2x3(T const * const ptr);
    -00106         
    -00109         template<typename T>
    -00110     detail::tmat2x4<T> make_mat2x4(T const * const ptr);
    -00111         
    -00114         template<typename T>
    -00115     detail::tmat3x2<T> make_mat3x2(T const * const ptr);
    -00116         
    -00119         template<typename T>
    -00120     detail::tmat3x3<T> make_mat3x3(T const * const ptr);
    -00121 
    -00124         template<typename T>
    -00125     detail::tmat3x4<T> make_mat3x4(T const * const ptr);
    -00126         
    -00129         template<typename T>
    -00130     detail::tmat4x2<T> make_mat4x2(
    -00131         T const * const ptr);
    -00132         
    -00135         template<typename T>
    -00136     detail::tmat4x3<T> make_mat4x3(T const * const ptr);
    -00137         
    -00140         template<typename T>
    -00141     detail::tmat4x4<T> make_mat4x4(T const * const ptr);
    -00142         
    -00145         template<typename T>
    -00146     detail::tmat2x2<T> make_mat2(T const * const ptr);
    -00147         
    -00150         template<typename T>
    -00151     detail::tmat3x3<T> make_mat3(T const * const ptr);
    -00152                 
    -00155         template<typename T>
    -00156     detail::tmat4x4<T> make_mat4(T const * const ptr);
    -00157  
    -00160         template<typename T>
    -00161     detail::tquat<T> make_quat(T const * const ptr);
    -00162     
    -00164 }//namespace glm
    -00165 
    -00166 #include "type_ptr.inl"
    -00167 
    -00168 #endif//GLM_GTC_type_ptr
    -00169 
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 
    +
    42 
    +
    43 #ifndef GLM_GTC_type_precision
    +
    44 #define GLM_GTC_type_precision GLM_VERSION
    +
    45 
    +
    46 // Dependency:
    +
    47 #include "../glm.hpp"
    +
    48 #include "../gtc/half_float.hpp"
    +
    49 #include "../gtc/quaternion.hpp"
    +
    50 
    +
    51 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    52 # pragma message("GLM: GLM_GTC_type_precision extension included")
    +
    53 #endif
    +
    54 
    +
    55 namespace glm
    +
    56 {
    +
    58  // Signed int vector types
    +
    59 
    +
    62 
    +
    65  typedef detail::int8 int8;
    +
    66 
    +
    69  typedef detail::int16 int16;
    +
    70 
    +
    73  typedef detail::int32 int32;
    +
    74 
    +
    77  typedef detail::int64 int64;
    +
    78 
    +
    79 
    +
    82  typedef detail::int8 int8_t;
    +
    83 
    +
    86  typedef detail::int16 int16_t;
    +
    87 
    +
    90  typedef detail::int32 int32_t;
    +
    91 
    +
    94  typedef detail::int64 int64_t;
    +
    95 
    +
    96 
    +
    99  typedef detail::int8 i8;
    +
    100 
    +
    103  typedef detail::int16 i16;
    +
    104 
    +
    107  typedef detail::int32 i32;
    +
    108 
    +
    111  typedef detail::int64 i64;
    +
    112 
    +
    113 
    +
    116  typedef detail::tvec1<i8> i8vec1;
    +
    117 
    +
    120  typedef detail::tvec2<i8> i8vec2;
    +
    121 
    +
    124  typedef detail::tvec3<i8> i8vec3;
    +
    125 
    +
    128  typedef detail::tvec4<i8> i8vec4;
    +
    129 
    +
    130 
    +
    133  typedef detail::tvec1<i16> i16vec1;
    +
    134 
    +
    137  typedef detail::tvec2<i16> i16vec2;
    +
    138 
    +
    141  typedef detail::tvec3<i16> i16vec3;
    +
    142 
    +
    145  typedef detail::tvec4<i16> i16vec4;
    +
    146 
    +
    147 
    +
    150  typedef detail::tvec1<i32> i32vec1;
    +
    151 
    +
    154  typedef detail::tvec2<i32> i32vec2;
    +
    155 
    +
    158  typedef detail::tvec3<i32> i32vec3;
    +
    159 
    +
    162  typedef detail::tvec4<i32> i32vec4;
    +
    163 
    +
    164 
    +
    167  typedef detail::tvec1<i64> i64vec1;
    +
    168 
    +
    171  typedef detail::tvec2<i64> i64vec2;
    +
    172 
    +
    175  typedef detail::tvec3<i64> i64vec3;
    +
    176 
    +
    179  typedef detail::tvec4<i64> i64vec4;
    +
    180 
    +
    181 
    +
    183  // Unsigned int vector types
    +
    184 
    +
    187  typedef detail::uint8 uint8;
    +
    188 
    +
    191  typedef detail::uint16 uint16;
    +
    192 
    +
    195  typedef detail::uint32 uint32;
    +
    196 
    +
    199  typedef detail::uint64 uint64;
    +
    200 
    +
    201 
    +
    204  typedef detail::uint8 uint8_t;
    +
    205 
    +
    208  typedef detail::uint16 uint16_t;
    +
    209 
    +
    212  typedef detail::uint32 uint32_t;
    +
    213 
    +
    216  typedef detail::uint64 uint64_t;
    +
    217 
    +
    218 
    +
    221  typedef detail::uint8 u8;
    +
    222 
    +
    225  typedef detail::uint16 u16;
    +
    226 
    +
    229  typedef detail::uint32 u32;
    +
    230 
    +
    233  typedef detail::uint64 u64;
    +
    234 
    +
    235 
    +
    238  typedef detail::tvec1<u8> u8vec1;
    +
    239 
    +
    242  typedef detail::tvec2<u8> u8vec2;
    +
    243 
    +
    246  typedef detail::tvec3<u8> u8vec3;
    +
    247 
    +
    250  typedef detail::tvec4<u8> u8vec4;
    +
    251 
    +
    252 
    +
    255  typedef detail::tvec1<u16> u16vec1;
    +
    256 
    +
    259  typedef detail::tvec2<u16> u16vec2;
    +
    260 
    +
    263  typedef detail::tvec3<u16> u16vec3;
    +
    264 
    +
    267  typedef detail::tvec4<u16> u16vec4;
    +
    268 
    +
    269 
    +
    272  typedef detail::tvec1<u32> u32vec1;
    +
    273 
    +
    276  typedef detail::tvec2<u32> u32vec2;
    +
    277 
    +
    280  typedef detail::tvec3<u32> u32vec3;
    +
    281 
    +
    284  typedef detail::tvec4<u32> u32vec4;
    +
    285 
    +
    286 
    +
    289  typedef detail::tvec1<u64> u64vec1;
    +
    290 
    +
    293  typedef detail::tvec2<u64> u64vec2;
    +
    294 
    +
    297  typedef detail::tvec3<u64> u64vec3;
    +
    298 
    +
    301  typedef detail::tvec4<u64> u64vec4;
    +
    302 
    +
    303 
    +
    305  // Float vector types
    +
    306 
    +
    309  typedef detail::float16 float16;
    +
    310 
    +
    313  typedef detail::float32 float32;
    +
    314 
    +
    317  typedef detail::float64 float64;
    +
    318 
    +
    319 
    +
    322  typedef detail::float16 float16_t;
    +
    323 
    +
    326  typedef detail::float32 float32_t;
    +
    327 
    +
    330  typedef detail::float64 float64_t;
    +
    331 
    +
    332 
    +
    335  typedef float16 f16;
    +
    336 
    +
    339  typedef float32 f32;
    +
    340 
    +
    343  typedef float64 f64;
    +
    344 
    +
    345 
    +
    348  typedef detail::tvec1<float> fvec1;
    +
    349 
    +
    352  typedef detail::tvec2<float> fvec2;
    +
    353 
    +
    356  typedef detail::tvec3<float> fvec3;
    +
    357 
    +
    360  typedef detail::tvec4<float> fvec4;
    +
    361 
    +
    362 
    +
    365  typedef detail::tvec1<f16> f16vec1;
    +
    366 
    +
    369  typedef detail::tvec2<f16> f16vec2;
    +
    370 
    +
    373  typedef detail::tvec3<f16> f16vec3;
    +
    374 
    +
    377  typedef detail::tvec4<f16> f16vec4;
    +
    378 
    +
    379 
    +
    382  typedef detail::tvec1<f32> f32vec1;
    +
    383 
    +
    386  typedef detail::tvec2<f32> f32vec2;
    +
    387 
    +
    390  typedef detail::tvec3<f32> f32vec3;
    +
    391 
    +
    394  typedef detail::tvec4<f32> f32vec4;
    +
    395 
    +
    396 
    +
    399  typedef detail::tvec1<f64> f64vec1;
    +
    400 
    +
    403  typedef detail::tvec2<f64> f64vec2;
    +
    404 
    +
    407  typedef detail::tvec3<f64> f64vec3;
    +
    408 
    +
    411  typedef detail::tvec4<f64> f64vec4;
    +
    412 
    +
    413 
    +
    415  // Float matrix types
    +
    416 
    +
    419  //typedef detail::tmat1x1<f32> fmat1;
    +
    420 
    +
    423  typedef detail::tmat2x2<f32> fmat2;
    +
    424 
    +
    427  typedef detail::tmat3x3<f32> fmat3;
    +
    428 
    +
    431  typedef detail::tmat4x4<f32> fmat4;
    +
    432 
    +
    433 
    +
    436  //typedef f32 fmat1x1;
    +
    437 
    +
    440  typedef detail::tmat2x2<f32> fmat2x2;
    +
    441 
    +
    444  typedef detail::tmat2x3<f32> fmat2x3;
    +
    445 
    +
    448  typedef detail::tmat2x4<f32> fmat2x4;
    +
    449 
    +
    452  typedef detail::tmat3x2<f32> fmat3x2;
    +
    453 
    +
    456  typedef detail::tmat3x3<f32> fmat3x3;
    +
    457 
    +
    460  typedef detail::tmat3x4<f32> fmat3x4;
    +
    461 
    +
    464  typedef detail::tmat4x2<f32> fmat4x2;
    +
    465 
    +
    468  typedef detail::tmat4x3<f32> fmat4x3;
    +
    469 
    +
    472  typedef detail::tmat4x4<f32> fmat4x4;
    +
    473 
    +
    474 
    +
    477  //typedef detail::tmat1x1<f16> f16mat1;
    +
    478 
    +
    481  typedef detail::tmat2x2<f16> f16mat2;
    +
    482 
    +
    485  typedef detail::tmat3x3<f16> f16mat3;
    +
    486 
    +
    489  typedef detail::tmat4x4<f16> f16mat4;
    +
    490 
    +
    491 
    +
    494  //typedef f16 f16mat1x1;
    +
    495 
    +
    498  typedef detail::tmat2x2<f16> f16mat2x2;
    +
    499 
    +
    502  typedef detail::tmat2x3<f16> f16mat2x3;
    +
    503 
    +
    506  typedef detail::tmat2x4<f16> f16mat2x4;
    +
    507 
    +
    510  typedef detail::tmat3x2<f16> f16mat3x2;
    +
    511 
    +
    514  typedef detail::tmat3x3<f16> f16mat3x3;
    +
    515 
    +
    518  typedef detail::tmat3x4<f16> f16mat3x4;
    +
    519 
    +
    522  typedef detail::tmat4x2<f16> f16mat4x2;
    +
    523 
    +
    526  typedef detail::tmat4x3<f16> f16mat4x3;
    +
    527 
    +
    530  typedef detail::tmat4x4<f16> f16mat4x4;
    +
    531 
    +
    532 
    +
    535  //typedef detail::tmat1x1<f32> f32mat1;
    +
    536 
    +
    539  typedef detail::tmat2x2<f32> f32mat2;
    +
    540 
    +
    543  typedef detail::tmat3x3<f32> f32mat3;
    +
    544 
    +
    547  typedef detail::tmat4x4<f32> f32mat4;
    +
    548 
    +
    549 
    +
    552  //typedef f32 f32mat1x1;
    +
    553 
    +
    556  typedef detail::tmat2x2<f32> f32mat2x2;
    +
    557 
    +
    560  typedef detail::tmat2x3<f32> f32mat2x3;
    +
    561 
    +
    564  typedef detail::tmat2x4<f32> f32mat2x4;
    +
    565 
    +
    568  typedef detail::tmat3x2<f32> f32mat3x2;
    +
    569 
    +
    572  typedef detail::tmat3x3<f32> f32mat3x3;
    +
    573 
    +
    576  typedef detail::tmat3x4<f32> f32mat3x4;
    +
    577 
    +
    580  typedef detail::tmat4x2<f32> f32mat4x2;
    +
    581 
    +
    584  typedef detail::tmat4x3<f32> f32mat4x3;
    +
    585 
    +
    588  typedef detail::tmat4x4<f32> f32mat4x4;
    +
    589 
    +
    590 
    +
    593  //typedef detail::tmat1x1<f64> f64mat1;
    +
    594 
    +
    597  typedef detail::tmat2x2<f64> f64mat2;
    +
    598 
    +
    601  typedef detail::tmat3x3<f64> f64mat3;
    +
    602 
    +
    605  typedef detail::tmat4x4<f64> f64mat4;
    +
    606 
    +
    607 
    +
    610  //typedef f64 f64mat1x1;
    +
    611 
    +
    614  typedef detail::tmat2x2<f64> f64mat2x2;
    +
    615 
    +
    618  typedef detail::tmat2x3<f64> f64mat2x3;
    +
    619 
    +
    622  typedef detail::tmat2x4<f64> f64mat2x4;
    +
    623 
    +
    626  typedef detail::tmat3x2<f64> f64mat3x2;
    +
    627 
    +
    630  typedef detail::tmat3x3<f64> f64mat3x3;
    +
    631 
    +
    634  typedef detail::tmat3x4<f64> f64mat3x4;
    +
    635 
    +
    638  typedef detail::tmat4x2<f64> f64mat4x2;
    +
    639 
    +
    642  typedef detail::tmat4x3<f64> f64mat4x3;
    +
    643 
    +
    646  typedef detail::tmat4x4<f64> f64mat4x4;
    +
    647 
    +
    648 
    +
    650  // Quaternion types
    +
    651 
    +
    654  typedef detail::tquat<f16> f16quat;
    +
    655 
    +
    658  typedef detail::tquat<f32> f32quat;
    +
    659 
    +
    662  typedef detail::tquat<f64> f64quat;
    +
    663 
    +
    665 }//namespace glm
    +
    666 
    +
    667 #include "type_precision.inl"
    +
    668 
    +
    669 #endif//GLM_GTC_type_precision
    +
    + - diff --git a/doc/api/a00109.html b/doc/api/a00109.html index 760ef615..05f7f945 100644 --- a/doc/api/a00109.html +++ b/doc/api/a00109.html @@ -2,42 +2,31 @@ - -type_size.hpp File Reference + +type_ptr.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,96 @@
  • File List
  • + +
    +
    -
    type_size.hpp File Reference
    -
    +
    type_ptr.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    detail::tmat2x2< T > make_mat2 (T const *const ptr)
     
    template<typename T >
    detail::tmat2x2< T > make_mat2x2 (T const *const ptr)
     
    template<typename T >
    detail::tmat2x3< T > make_mat2x3 (T const *const ptr)
     
    template<typename T >
    detail::tmat2x4< T > make_mat2x4 (T const *const ptr)
     
    template<typename T >
    detail::tmat3x3< T > make_mat3 (T const *const ptr)
     
    template<typename T >
    detail::tmat3x2< T > make_mat3x2 (T const *const ptr)
     
    template<typename T >
    detail::tmat3x3< T > make_mat3x3 (T const *const ptr)
     
    template<typename T >
    detail::tmat3x4< T > make_mat3x4 (T const *const ptr)
     
    template<typename T >
    detail::tmat4x4< T > make_mat4 (T const *const ptr)
     
    template<typename T >
    detail::tmat4x2< T > make_mat4x2 (T const *const ptr)
     
    template<typename T >
    detail::tmat4x3< T > make_mat4x3 (T const *const ptr)
     
    template<typename T >
    detail::tmat4x4< T > make_mat4x4 (T const *const ptr)
     
    template<typename T >
    detail::tquat< T > make_quat (T const *const ptr)
     
    template<typename T >
    detail::tvec2< T > make_vec2 (T const *const ptr)
     
    template<typename T >
    detail::tvec3< T > make_vec3 (T const *const ptr)
     
    template<typename T >
    detail::tvec4< T > make_vec4 (T const *const ptr)
     
    template<typename genType >
    genType::value_type const * value_ptr (genType const &vec)
     
    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-10-05 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_size.hpp.

    -
    - +

    GLM_GTC_type_ptr

    +
    Date
    2009-05-06 / 2011-06-05
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTC_half_float (dependence)
    +
    +GLM_GTC_quaternion (dependence)
    +

    Definition in file type_ptr.hpp.

    + + - diff --git a/doc/api/a00109_source.html b/doc/api/a00109_source.html index 112ba62f..e1d1341b 100644 --- a/doc/api/a00109_source.html +++ b/doc/api/a00109_source.html @@ -2,42 +2,31 @@ - -type_size.hpp Source File + +type_ptr.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,63 +35,154 @@
  • File List
  • + +
    -
    type_size.hpp
    -
    +
    type_ptr.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_size
    -00030 #define glm_core_type_size
    -00031 
    -00032 #include <cstdlib>
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037         //typedef std::size_t size_t;
    -00038         typedef int sizeType;
    -00039 
    -00040 }//namespace detail
    -00041 }//namespace glm
    -00042 
    -00043 #endif//glm_core_type_size
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 
    +
    41 
    +
    42 
    +
    43 
    +
    44 
    +
    45 
    +
    46 
    +
    47 
    +
    48 
    +
    49 
    +
    50 
    +
    51 
    +
    52 
    +
    53 
    +
    54 
    +
    55 
    +
    56 
    +
    57 
    +
    58 
    +
    59 #ifndef GLM_GTC_type_ptr
    +
    60 #define GLM_GTC_type_ptr GLM_VERSION
    +
    61 
    +
    62 // Dependency:
    +
    63 #include "../glm.hpp"
    +
    64 #include "../gtc/half_float.hpp"
    +
    65 #include "../gtc/quaternion.hpp"
    +
    66 #include <cstring>
    +
    67 
    +
    68 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    69 # pragma message("GLM: GLM_GTC_type_ptr extension included")
    +
    70 #endif
    +
    71 
    +
    72 namespace glm
    +
    73 {
    +
    76 
    +
    79  template<typename genType>
    +
    80  typename genType::value_type const * value_ptr(genType const & vec);
    +
    81 
    +
    84  template<typename T>
    +
    85  detail::tvec2<T> make_vec2(T const * const ptr);
    +
    86 
    +
    89  template<typename T>
    +
    90  detail::tvec3<T> make_vec3(T const * const ptr);
    +
    91 
    +
    94  template<typename T>
    +
    95  detail::tvec4<T> make_vec4(T const * const ptr);
    +
    96 
    +
    99  template<typename T>
    +
    100  detail::tmat2x2<T> make_mat2x2(T const * const ptr);
    +
    101 
    +
    104  template<typename T>
    +
    105  detail::tmat2x3<T> make_mat2x3(T const * const ptr);
    +
    106 
    +
    109  template<typename T>
    +
    110  detail::tmat2x4<T> make_mat2x4(T const * const ptr);
    +
    111 
    +
    114  template<typename T>
    +
    115  detail::tmat3x2<T> make_mat3x2(T const * const ptr);
    +
    116 
    +
    119  template<typename T>
    +
    120  detail::tmat3x3<T> make_mat3x3(T const * const ptr);
    +
    121 
    +
    124  template<typename T>
    +
    125  detail::tmat3x4<T> make_mat3x4(T const * const ptr);
    +
    126 
    +
    129  template<typename T>
    +
    130  detail::tmat4x2<T> make_mat4x2(
    +
    131  T const * const ptr);
    +
    132 
    +
    135  template<typename T>
    +
    136  detail::tmat4x3<T> make_mat4x3(T const * const ptr);
    +
    137 
    +
    140  template<typename T>
    +
    141  detail::tmat4x4<T> make_mat4x4(T const * const ptr);
    +
    142 
    +
    145  template<typename T>
    +
    146  detail::tmat2x2<T> make_mat2(T const * const ptr);
    +
    147 
    +
    150  template<typename T>
    +
    151  detail::tmat3x3<T> make_mat3(T const * const ptr);
    +
    152 
    +
    155  template<typename T>
    +
    156  detail::tmat4x4<T> make_mat4(T const * const ptr);
    +
    157 
    +
    160  template<typename T>
    +
    161  detail::tquat<T> make_quat(T const * const ptr);
    +
    162 
    +
    164 }//namespace glm
    +
    165 
    +
    166 #include "type_ptr.inl"
    +
    167 
    +
    168 #endif//GLM_GTC_type_ptr
    +
    169 
    +
    + - diff --git a/doc/api/a00110.html b/doc/api/a00110.html index a03fbd11..4863799f 100644 --- a/doc/api/a00110.html +++ b/doc/api/a00110.html @@ -2,42 +2,31 @@ - -type_vec.hpp File Reference + +type_size.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    -
    type_vec.hpp File Reference
    -
    +
    type_size.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2010-01-26 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_vec.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-10-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_size.hpp.

    + + - diff --git a/doc/api/a00110_source.html b/doc/api/a00110_source.html index 6c6c2eac..324e0875 100644 --- a/doc/api/a00110_source.html +++ b/doc/api/a00110_source.html @@ -2,42 +2,31 @@ - -type_vec.hpp Source File + +type_size.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,61 +35,65 @@
  • File List
  • + +
    -
    type_vec.hpp
    -
    +
    type_size.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_vec
    -00030 #define glm_core_type_vec
    -00031 
    -00032 #include "type_gentype.hpp"
    -00033 
    -00034 namespace glm{
    -00035 namespace detail
    -00036 {
    -00037 
    -00038 }//namespace detail
    -00039 }//namespace glm
    -00040 
    -00041 #endif//glm_core_type_vec
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_size
    +
    30 #define glm_core_type_size
    +
    31 
    +
    32 #include <cstdlib>
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37  //typedef std::size_t size_t;
    +
    38  typedef int sizeType;
    +
    39 
    +
    40 }//namespace detail
    +
    41 }//namespace glm
    +
    42 
    +
    43 #endif//glm_core_type_size
    +
    + - diff --git a/doc/api/a00111.html b/doc/api/a00111.html index f8626e04..3787e394 100644 --- a/doc/api/a00111.html +++ b/doc/api/a00111.html @@ -2,42 +2,31 @@ - -type_vec1.hpp File Reference + +type_vec.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,32 +35,34 @@
  • File List
  • + +
    -
    type_vec1.hpp File Reference
    -
    +
    type_vec.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-25 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_vec1.hpp.

    -
    - +

    GLM Core

    +
    Date
    2010-01-26 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_vec.hpp.

    + + - diff --git a/doc/api/a00111_source.html b/doc/api/a00111_source.html index 9f14a45a..6d0797a6 100644 --- a/doc/api/a00111_source.html +++ b/doc/api/a00111_source.html @@ -2,42 +2,31 @@ - -type_vec1.hpp Source File + +type_vec.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,218 +35,63 @@
  • File List
  • + +
    -
    type_vec1.hpp
    -
    +
    type_vec.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_gentype1
    -00030 #define glm_core_type_gentype1
    -00031 
    -00032 #include "type_vec.hpp"
    -00033 #include "type_float.hpp"
    -00034 #include "type_int.hpp"
    -00035 #include "type_size.hpp"
    -00036 #include "_swizzle.hpp"
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041         template <typename T> struct tref1;
    -00042         template <typename T> struct tref2;
    -00043         template <typename T> struct tref3;
    -00044         template <typename T> struct tref4;
    -00045         template <typename T> struct tvec1;
    -00046         template <typename T> struct tvec2;
    -00047         template <typename T> struct tvec3;
    -00048         template <typename T> struct tvec4;
    -00049 
    -00050         template <typename T>
    -00051         struct tvec1
    -00052         {
    -00053                 enum ctor{null};
    -00054 
    -00055                 typedef T value_type;
    -00056                 typedef std::size_t size_type;
    -00057                 GLM_FUNC_DECL size_type length() const;
    -00058 
    -00059                 typedef tvec1<T> type;
    -00060                 typedef tvec1<bool> bool_type;
    -00061 
    -00063                 // Data
    -00064 
    -00065 #               if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    -00066                         value_type x;
    -00067 #               else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
    -00068                         union {value_type x, r, s;};
    -00069 #               endif//GLM_COMPONENT
    -00070 
    -00072                 // Accesses
    -00073 
    -00074                 GLM_FUNC_DECL value_type & operator[](size_type i);
    -00075                 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    -00076 
    -00078                 // Implicit basic constructors
    -00079 
    -00080                 GLM_FUNC_DECL tvec1();
    -00081                 GLM_FUNC_DECL tvec1(tvec1<T> const & v);
    -00082 
    -00084                 // Explicit basic constructors
    -00085 
    -00086                 GLM_FUNC_DECL explicit tvec1(
    -00087                         ctor);
    -00088                 GLM_FUNC_DECL explicit tvec1(
    -00089                         value_type const & s);
    -00090 
    -00092                 // Swizzle constructors
    -00093 
    -00094                 GLM_FUNC_DECL tvec1(tref1<T> const & r);
    -00095 
    -00097                 // Convertion scalar constructors
    -00098 
    -00100                 template <typename U> 
    -00101                 GLM_FUNC_DECL explicit tvec1(U const & s);
    -00102 
    -00104                 // Convertion vector constructors
    -00105 
    -00107                 template <typename U> 
    -00108                 GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
    -00110                 template <typename U> 
    -00111                 GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
    -00113                 template <typename U> 
    -00114                 GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
    -00115 
    -00117                 // Unary arithmetic operators
    -00118 
    -00119                 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
    -00120                 template <typename U> 
    -00121                 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<U> const & v);
    -00122 
    -00123                 template <typename U> 
    -00124                 GLM_FUNC_DECL tvec1<T> & operator+=(U const & s);
    -00125                 template <typename U> 
    -00126                 GLM_FUNC_DECL tvec1<T> & operator+=(tvec1<U> const & v);
    -00127                 template <typename U> 
    -00128                 GLM_FUNC_DECL tvec1<T> & operator-=(U const & s);
    -00129                 template <typename U> 
    -00130                 GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<U> const & v);
    -00131                 template <typename U> 
    -00132                 GLM_FUNC_DECL tvec1<T> & operator*=(U const & s);
    -00133                 template <typename U> 
    -00134                 GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<U> const & v);
    -00135                 template <typename U> 
    -00136                 GLM_FUNC_DECL tvec1<T> & operator/=(U const & s);
    -00137                 template <typename U> 
    -00138                 GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<U> const & v);
    -00139                 GLM_FUNC_DECL tvec1<T> & operator++();
    -00140                 GLM_FUNC_DECL tvec1<T> & operator--();
    -00141 
    -00143                 // Unary bit operators
    -00144 
    -00145                 template <typename U> 
    -00146                 GLM_FUNC_DECL tvec1<T> & operator%=(U const & s);
    -00147                 template <typename U> 
    -00148                 GLM_FUNC_DECL tvec1<T> & operator%=(tvec1<U> const & v);
    -00149                 template <typename U> 
    -00150                 GLM_FUNC_DECL tvec1<T> & operator&=(U const & s);
    -00151                 template <typename U> 
    -00152                 GLM_FUNC_DECL tvec1<T> & operator&=(tvec1<U> const & v);
    -00153                 template <typename U> 
    -00154                 GLM_FUNC_DECL tvec1<T> & operator|=(U const & s);
    -00155                 template <typename U> 
    -00156                 GLM_FUNC_DECL tvec1<T> & operator|=(tvec1<U> const & v);
    -00157                 template <typename U> 
    -00158                 GLM_FUNC_DECL tvec1<T> & operator^=(U const & s);
    -00159                 template <typename U> 
    -00160                 GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<U> const & v);
    -00161                 template <typename U> 
    -00162                 GLM_FUNC_DECL tvec1<T> & operator<<=(U const & s);
    -00163                 template <typename U> 
    -00164                 GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<U> const & v);
    -00165                 template <typename U> 
    -00166                 GLM_FUNC_DECL tvec1<T> & operator>>=(U const & s);
    -00167                 template <typename U> 
    -00168                 GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<U> const & v);
    -00169 
    -00171                 // Swizzle operators
    -00172 
    -00173                 GLM_FUNC_DECL value_type swizzle(comp X) const;
    -00174                 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    -00175                 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    -00176                 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    -00177                 GLM_FUNC_DECL tref1<T> swizzle(comp X);
    -00178         };
    -00179 
    -00180         template <typename T>
    -00181         struct tref1
    -00182         {
    -00183                 GLM_FUNC_DECL tref1(T & x);
    -00184                 GLM_FUNC_DECL tref1(tref1<T> const & r);
    -00185                 GLM_FUNC_DECL tref1(tvec1<T> const & v);
    -00186 
    -00187                 GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
    -00188                 GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
    -00189 
    -00190                 T& x;
    -00191         };
    -00192 
    -00193         GLM_DETAIL_IS_VECTOR(tvec1);
    -00194 
    -00195         typedef detail::tvec1<highp_float>              highp_vec1_t;
    -00196         typedef detail::tvec1<mediump_float>    mediump_vec1_t;
    -00197         typedef detail::tvec1<lowp_float>               lowp_vec1_t;
    -00198         typedef detail::tvec1<highp_int>                highp_ivec1_t;
    -00199         typedef detail::tvec1<mediump_int>              mediump_ivec1_t;
    -00200         typedef detail::tvec1<lowp_int>                 lowp_ivec1_t;
    -00201         typedef detail::tvec1<highp_uint>               highp_uvec1_t;
    -00202         typedef detail::tvec1<mediump_uint>             mediump_uvec1_t;
    -00203         typedef detail::tvec1<lowp_uint>                lowp_uvec1_t;
    -00204 
    -00205 }//namespace detail
    -00206 }//namespace glm
    -00207 
    -00208 #ifndef GLM_EXTERNAL_TEMPLATE
    -00209 #include "type_vec1.inl"
    -00210 #endif//GLM_EXTERNAL_TEMPLATE
    -00211 
    -00212 #endif//glm_core_type_gentype1
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_vec
    +
    30 #define glm_core_type_vec
    +
    31 
    +
    32 #include "type_gentype.hpp"
    +
    33 
    +
    34 namespace glm{
    +
    35 namespace detail
    +
    36 {
    +
    37 
    +
    38 }//namespace detail
    +
    39 }//namespace glm
    +
    40 
    +
    41 #endif//glm_core_type_vec
    +
    + - diff --git a/doc/api/a00112.html b/doc/api/a00112.html index 1899fa14..b872ad59 100644 --- a/doc/api/a00112.html +++ b/doc/api/a00112.html @@ -2,42 +2,31 @@ - -type_vec2.hpp File Reference + +type_vec1.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,51 +35,34 @@
  • File List
  • + +
    -
    -
    type_vec2.hpp File Reference
    -
    +
    type_vec1.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - -

    -Typedefs

    typedef detail::tvec2< highp_int > highp_ivec2
    typedef detail::tvec2< highp_uint > highp_uvec2
    typedef detail::tvec2
    -< highp_float > 
    highp_vec2
    typedef detail::tvec2< lowp_int > lowp_ivec2
    typedef detail::tvec2< lowp_uint > lowp_uvec2
    typedef detail::tvec2< lowp_float > lowp_vec2
    typedef detail::tvec2
    -< mediump_int > 
    mediump_ivec2
    typedef detail::tvec2
    -< mediump_uint > 
    mediump_uvec2
    typedef detail::tvec2
    -< mediump_float > 
    mediump_vec2
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-18 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_vec2.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-08-25 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_vec1.hpp.

    + + - diff --git a/doc/api/a00112_source.html b/doc/api/a00112_source.html index b2955e6e..c10a5087 100644 --- a/doc/api/a00112_source.html +++ b/doc/api/a00112_source.html @@ -2,42 +2,31 @@ - -type_vec2.hpp Source File + +type_vec1.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,276 +35,220 @@
  • File List
  • + +
    -
    type_vec2.hpp
    -
    +
    type_vec1.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_gentype2
    -00030 #define glm_core_type_gentype2
    -00031 
    -00032 #include "type_vec.hpp"
    -00033 #include "type_float.hpp"
    -00034 #include "type_int.hpp"
    -00035 #include "type_size.hpp"
    -00036 #include "_swizzle.hpp"
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041         template <typename T> struct tref2;
    -00042         template <typename T> struct tref3;
    -00043         template <typename T> struct tref4;
    -00044         template <typename T> struct tvec3;
    -00045         template <typename T> struct tvec4;
    -00046 
    -00047         // The basic 2D vector type.
    -00048         // \ingroup core_template
    -00049         template <typename T>
    -00050         struct tvec2
    -00051         {
    -00052                 enum ctor{null};
    -00053 
    -00054                 typedef T value_type;
    -00055                 typedef std::size_t size_type;
    -00056                 GLM_FUNC_DECL size_type length() const;
    -00057 
    -00058                 typedef tvec2<T> type;
    -00059                 typedef tvec2<bool> bool_type;
    -00060 
    -00062                 // Data
    -00063 
    -00064 #       if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    -00065                 union 
    -00066                 {
    -00067 #               if(defined(GLM_SWIZZLE))
    -00068                         _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y)
    -00069                         _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g)
    -00070                         _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t)
    -00071                         _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y)
    -00072                         _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g)
    -00073                         _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t)
    -00074                         _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y)
    -00075                         _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g)
    -00076                         _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t)
    -00077 #               endif//(defined(GLM_SWIZZLE))
    -00078 
    -00079                         struct{value_type r, g;};
    -00080                         struct{value_type s, t;};
    -00081                         struct{value_type x, y;};
    -00082                 };
    -00083 #       elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    -00084                 union {value_type x, r, s;};
    -00085                 union {value_type y, g, t;};
    -00086 
    -00087 #               if(defined(GLM_SWIZZLE))
    -00088                         // Defines all he swizzle operator as functions
    -00089                         GLM_SWIZZLE_GEN_REF_FROM_VEC2(value_type, detail::tvec2, detail::tref2)
    -00090                         GLM_SWIZZLE_GEN_VEC_FROM_VEC2(value_type, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4)
    -00091 #               endif//(defined(GLM_SWIZZLE))
    -00092 #       else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    -00093                 value_type x, y;
    -00094 
    -00095 #               if(defined(GLM_SWIZZLE))
    -00096                         // Defines all he swizzle operator as functions
    -00097                         GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(value_type, detail::tvec2, detail::tref2, x, y)
    -00098                         GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(value_type, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4, x, y)
    -00099 #               endif//(defined(GLM_SWIZZLE))
    -00100 #       endif//GLM_COMPONENT
    -00101 
    -00103                 // Accesses
    -00104 
    -00105                 GLM_FUNC_DECL value_type & operator[](size_type i);
    -00106                 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    -00107 
    -00109                 // Implicit basic constructors
    -00110 
    -00111                 GLM_FUNC_DECL tvec2();
    -00112                 GLM_FUNC_DECL tvec2(tvec2<T> const & v);
    -00113 
    -00115                 // Explicit basic constructors
    -00116 
    -00117                 GLM_FUNC_DECL explicit tvec2(
    -00118                         ctor);
    -00119                 GLM_FUNC_DECL explicit tvec2(
    -00120                         value_type const & s);
    -00121                 GLM_FUNC_DECL explicit tvec2(
    -00122                         value_type const & s1, 
    -00123                         value_type const & s2);
    -00124 
    -00126                 // Swizzle constructors
    -00127 
    -00128                 tvec2(tref2<T> const & r);
    -00129 
    -00130         template <int E0, int E1>
    -00131         GLM_FUNC_DECL tvec2(const glm::detail::swizzle<2,T,tvec2<T>,E0,E1,-1,-2>& that)
    -00132         {
    -00133             *this = that();
    -00134         }
    -00135 
    -00137                 // Convertion constructors
    -00138 
    -00140                 template <typename U> 
    -00141                 GLM_FUNC_DECL explicit tvec2(
    -00142                         U const & x);
    -00144                 template <typename U, typename V> 
    -00145                 GLM_FUNC_DECL explicit tvec2(
    -00146                         U const & x, 
    -00147                         V const & y);
    -00148 
    -00150                 // Convertion vector constructors
    -00151 
    -00153                 template <typename U> 
    -00154                 GLM_FUNC_DECL explicit tvec2(tvec2<U> const & v);
    -00156                 template <typename U> 
    -00157                 GLM_FUNC_DECL explicit tvec2(tvec3<U> const & v);
    -00159                 template <typename U> 
    -00160                 GLM_FUNC_DECL explicit tvec2(tvec4<U> const & v);
    -00161 
    -00163                 // Unary arithmetic operators
    -00164 
    -00165                 GLM_FUNC_DECL tvec2<T> & operator= (tvec2<T> const & v);
    -00166                 template <typename U> 
    -00167                 GLM_FUNC_DECL tvec2<T> & operator= (tvec2<U> const & v);
    -00168 
    -00169                 template <typename U> 
    -00170                 GLM_FUNC_DECL tvec2<T> & operator+=(U const & s);
    -00171                 template <typename U> 
    -00172                 GLM_FUNC_DECL tvec2<T> & operator+=(tvec2<U> const & v);
    -00173                 template <typename U> 
    -00174                 GLM_FUNC_DECL tvec2<T> & operator-=(U const & s);
    -00175                 template <typename U> 
    -00176                 GLM_FUNC_DECL tvec2<T> & operator-=(tvec2<U> const & v);
    -00177                 template <typename U> 
    -00178                 GLM_FUNC_DECL tvec2<T> & operator*=(U const & s);
    -00179                 template <typename U> 
    -00180                 GLM_FUNC_DECL tvec2<T> & operator*=(tvec2<U> const & v);
    -00181                 template <typename U> 
    -00182                 GLM_FUNC_DECL tvec2<T> & operator/=(U const & s);
    -00183                 template <typename U> 
    -00184                 GLM_FUNC_DECL tvec2<T> & operator/=(tvec2<U> const & v);
    -00185                 GLM_FUNC_DECL tvec2<T> & operator++();
    -00186                 GLM_FUNC_DECL tvec2<T> & operator--();
    -00187 
    -00189                 // Unary bit operators
    -00190 
    -00191                 template <typename U> 
    -00192                 GLM_FUNC_DECL tvec2<T> & operator%= (U const & s);
    -00193                 template <typename U> 
    -00194                 GLM_FUNC_DECL tvec2<T> & operator%= (tvec2<U> const & v);
    -00195                 template <typename U> 
    -00196                 GLM_FUNC_DECL tvec2<T> & operator&= (U const & s);
    -00197                 template <typename U> 
    -00198                 GLM_FUNC_DECL tvec2<T> & operator&= (tvec2<U> const & v);
    -00199                 template <typename U> 
    -00200                 GLM_FUNC_DECL tvec2<T> & operator|= (U const & s);
    -00201                 template <typename U> 
    -00202                 GLM_FUNC_DECL tvec2<T> & operator|= (tvec2<U> const & v);
    -00203                 template <typename U> 
    -00204                 GLM_FUNC_DECL tvec2<T> & operator^= (U const & s);
    -00205                 template <typename U> 
    -00206                 GLM_FUNC_DECL tvec2<T> & operator^= (tvec2<U> const & v);
    -00207                 template <typename U> 
    -00208                 GLM_FUNC_DECL tvec2<T> & operator<<=(U const & s);
    -00209                 template <typename U> 
    -00210                 GLM_FUNC_DECL tvec2<T> & operator<<=(tvec2<U> const & v);
    -00211                 template <typename U> 
    -00212                 GLM_FUNC_DECL tvec2<T> & operator>>=(U const & s);
    -00213                 template <typename U> 
    -00214                 GLM_FUNC_DECL tvec2<T> & operator>>=(tvec2<U> const & v);
    -00215 
    -00217                 // Swizzle operators
    -00218 
    -00219                 GLM_FUNC_DECL value_type swizzle(comp X) const;
    -00220                 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    -00221                 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    -00222                 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    -00223                 GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
    -00224         };
    -00225 
    -00226         template <typename T>
    -00227         struct tref2
    -00228         {
    -00229                 GLM_FUNC_DECL tref2(T & x, T & y);
    -00230                 GLM_FUNC_DECL tref2(tref2<T> const & r);
    -00231                 GLM_FUNC_DECL explicit tref2(tvec2<T> const & v);
    -00232 
    -00233                 GLM_FUNC_DECL tref2<T> & operator= (tref2<T> const & r);
    -00234                 GLM_FUNC_DECL tref2<T> & operator= (tvec2<T> const & v);
    -00235 
    -00236                 GLM_FUNC_DECL tvec2<T> operator() ();
    -00237 
    -00238                 T & x;
    -00239                 T & y;
    -00240         };
    -00241 
    -00242         GLM_DETAIL_IS_VECTOR(tvec2);
    -00243 
    -00244 } //namespace detail
    -00245 
    -00248 
    -00254         typedef detail::tvec2<highp_float>              highp_vec2;
    -00255 
    -00261         typedef detail::tvec2<mediump_float>    mediump_vec2;
    -00262 
    -00268         typedef detail::tvec2<lowp_float>               lowp_vec2;
    -00269 
    -00275         typedef detail::tvec2<highp_int>                highp_ivec2;
    -00276 
    -00282         typedef detail::tvec2<mediump_int>              mediump_ivec2;
    -00283 
    -00289         typedef detail::tvec2<lowp_int>                 lowp_ivec2;
    -00290         
    -00296         typedef detail::tvec2<highp_uint>               highp_uvec2;
    -00297 
    -00303         typedef detail::tvec2<mediump_uint>             mediump_uvec2;
    -00304 
    -00310         typedef detail::tvec2<lowp_uint>                lowp_uvec2;
    -00311 
    -00313 }//namespace glm
    -00314 
    -00315 #ifndef GLM_EXTERNAL_TEMPLATE
    -00316 #include "type_vec2.inl"
    -00317 #endif//GLM_EXTERNAL_TEMPLATE
    -00318 
    -00319 #endif//glm_core_type_gentype2
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_gentype1
    +
    30 #define glm_core_type_gentype1
    +
    31 
    +
    32 #include "type_vec.hpp"
    +
    33 #include "type_float.hpp"
    +
    34 #include "type_int.hpp"
    +
    35 #include "type_size.hpp"
    +
    36 #include "_swizzle.hpp"
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41  template <typename T> struct tref1;
    +
    42  template <typename T> struct tref2;
    +
    43  template <typename T> struct tref3;
    +
    44  template <typename T> struct tref4;
    +
    45  template <typename T> struct tvec1;
    +
    46  template <typename T> struct tvec2;
    +
    47  template <typename T> struct tvec3;
    +
    48  template <typename T> struct tvec4;
    +
    49 
    +
    50  template <typename T>
    +
    51  struct tvec1
    +
    52  {
    +
    53  enum ctor{null};
    +
    54 
    +
    55  typedef T value_type;
    +
    56  typedef std::size_t size_type;
    +
    57  typedef tvec1<T> type;
    +
    58  typedef tvec1<bool> bool_type;
    +
    59 
    +
    60  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    61 
    +
    63  // Data
    +
    64 
    +
    65 # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    +
    66  value_type x;
    +
    67 # else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
    +
    68  union {value_type x, r, s;};
    +
    69 # endif//GLM_COMPONENT
    +
    70 
    +
    72  // Accesses
    +
    73 
    +
    74  GLM_FUNC_DECL value_type & operator[](size_type i);
    +
    75  GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    +
    76 
    +
    78  // Implicit basic constructors
    +
    79 
    +
    80  GLM_FUNC_DECL tvec1();
    +
    81  GLM_FUNC_DECL tvec1(tvec1<T> const & v);
    +
    82 
    +
    84  // Explicit basic constructors
    +
    85 
    +
    86  GLM_FUNC_DECL explicit tvec1(
    +
    87  ctor);
    +
    88  GLM_FUNC_DECL explicit tvec1(
    +
    89  value_type const & s);
    +
    90 
    +
    92  // Swizzle constructors
    +
    93 
    +
    94  GLM_FUNC_DECL tvec1(tref1<T> const & r);
    +
    95 
    +
    97  // Convertion scalar constructors
    +
    98 
    +
    100  template <typename U>
    +
    101  GLM_FUNC_DECL explicit tvec1(U const & s);
    +
    102 
    +
    104  // Convertion vector constructors
    +
    105 
    +
    107  template <typename U>
    +
    108  GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
    +
    110  template <typename U>
    +
    111  GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
    +
    113  template <typename U>
    +
    114  GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
    +
    115 
    +
    117  // Unary arithmetic operators
    +
    118 
    +
    119  GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
    +
    120  template <typename U>
    +
    121  GLM_FUNC_DECL tvec1<T> & operator= (tvec1<U> const & v);
    +
    122 
    +
    123  template <typename U>
    +
    124  GLM_FUNC_DECL tvec1<T> & operator+=(U const & s);
    +
    125  template <typename U>
    +
    126  GLM_FUNC_DECL tvec1<T> & operator+=(tvec1<U> const & v);
    +
    127  template <typename U>
    +
    128  GLM_FUNC_DECL tvec1<T> & operator-=(U const & s);
    +
    129  template <typename U>
    +
    130  GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<U> const & v);
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL tvec1<T> & operator*=(U const & s);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<U> const & v);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tvec1<T> & operator/=(U const & s);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<U> const & v);
    +
    139  GLM_FUNC_DECL tvec1<T> & operator++();
    +
    140  GLM_FUNC_DECL tvec1<T> & operator--();
    +
    141 
    +
    143  // Unary bit operators
    +
    144 
    +
    145  template <typename U>
    +
    146  GLM_FUNC_DECL tvec1<T> & operator%=(U const & s);
    +
    147  template <typename U>
    +
    148  GLM_FUNC_DECL tvec1<T> & operator%=(tvec1<U> const & v);
    +
    149  template <typename U>
    +
    150  GLM_FUNC_DECL tvec1<T> & operator&=(U const & s);
    +
    151  template <typename U>
    +
    152  GLM_FUNC_DECL tvec1<T> & operator&=(tvec1<U> const & v);
    +
    153  template <typename U>
    +
    154  GLM_FUNC_DECL tvec1<T> & operator|=(U const & s);
    +
    155  template <typename U>
    +
    156  GLM_FUNC_DECL tvec1<T> & operator|=(tvec1<U> const & v);
    +
    157  template <typename U>
    +
    158  GLM_FUNC_DECL tvec1<T> & operator^=(U const & s);
    +
    159  template <typename U>
    +
    160  GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<U> const & v);
    +
    161  template <typename U>
    +
    162  GLM_FUNC_DECL tvec1<T> & operator<<=(U const & s);
    +
    163  template <typename U>
    +
    164  GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<U> const & v);
    +
    165  template <typename U>
    +
    166  GLM_FUNC_DECL tvec1<T> & operator>>=(U const & s);
    +
    167  template <typename U>
    +
    168  GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<U> const & v);
    +
    169 
    +
    171  // Swizzle operators
    +
    172 
    +
    173  GLM_FUNC_DECL value_type swizzle(comp X) const;
    +
    174  GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    +
    175  GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    +
    176  GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    +
    177  GLM_FUNC_DECL tref1<T> swizzle(comp X);
    +
    178  };
    +
    179 
    +
    180  template <typename T>
    +
    181  struct tref1
    +
    182  {
    +
    183  GLM_FUNC_DECL tref1(T & x);
    +
    184  GLM_FUNC_DECL tref1(tref1<T> const & r);
    +
    185  GLM_FUNC_DECL tref1(tvec1<T> const & v);
    +
    186 
    +
    187  GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
    +
    188  GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
    +
    189 
    +
    190  T& x;
    +
    191  };
    +
    192 
    +
    193  GLM_DETAIL_IS_VECTOR(tvec1);
    +
    194 
    +
    195  typedef detail::tvec1<highp_float> highp_vec1_t;
    +
    196  typedef detail::tvec1<mediump_float> mediump_vec1_t;
    +
    197  typedef detail::tvec1<lowp_float> lowp_vec1_t;
    +
    198  typedef detail::tvec1<highp_int> highp_ivec1_t;
    +
    199  typedef detail::tvec1<mediump_int> mediump_ivec1_t;
    +
    200  typedef detail::tvec1<lowp_int> lowp_ivec1_t;
    +
    201  typedef detail::tvec1<highp_uint> highp_uvec1_t;
    +
    202  typedef detail::tvec1<mediump_uint> mediump_uvec1_t;
    +
    203  typedef detail::tvec1<lowp_uint> lowp_uvec1_t;
    +
    204 
    +
    205 }//namespace detail
    +
    206 }//namespace glm
    +
    207 
    +
    208 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    209 #include "type_vec1.inl"
    +
    210 #endif//GLM_EXTERNAL_TEMPLATE
    +
    211 
    +
    212 #endif//glm_core_type_gentype1
    +
    + - diff --git a/doc/api/a00113.html b/doc/api/a00113.html index 9e2fd441..ea6621e6 100644 --- a/doc/api/a00113.html +++ b/doc/api/a00113.html @@ -2,42 +2,31 @@ - -type_vec3.hpp File Reference + +type_vec2.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,51 +35,62 @@
  • File List
  • + +
    -
    type_vec3.hpp File Reference
    -
    +
    type_vec2.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    +

    Typedefs

    typedef detail::tvec3< highp_int > highp_ivec3
    typedef detail::tvec3< highp_uint > highp_uvec3
    typedef detail::tvec3
    -< highp_float > 
    highp_vec3
    typedef detail::tvec3< lowp_int > lowp_ivec3
    typedef detail::tvec3< lowp_uint > lowp_uvec3
    typedef detail::tvec3< lowp_float > lowp_vec3
    typedef detail::tvec3
    -< mediump_int > 
    mediump_ivec3
    typedef detail::tvec3
    -< mediump_uint > 
    mediump_uvec3
    typedef detail::tvec3
    -< mediump_float > 
    mediump_vec3
    typedef detail::tvec2< highp_int > highp_ivec2
     
    typedef detail::tvec2< highp_uint > highp_uvec2
     
    typedef detail::tvec2
    +< highp_float > 
    highp_vec2
     
    typedef detail::tvec2< lowp_int > lowp_ivec2
     
    typedef detail::tvec2< lowp_uint > lowp_uvec2
     
    typedef detail::tvec2< lowp_float > lowp_vec2
     
    typedef detail::tvec2
    +< mediump_int > 
    mediump_ivec2
     
    typedef detail::tvec2
    +< mediump_uint > 
    mediump_uvec2
     
    typedef detail::tvec2
    +< mediump_float > 
    mediump_vec2
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-22 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_vec3.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-08-18 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_vec2.hpp.

    + + - diff --git a/doc/api/a00113_source.html b/doc/api/a00113_source.html index 3ff9e180..7c5220d0 100644 --- a/doc/api/a00113_source.html +++ b/doc/api/a00113_source.html @@ -2,42 +2,31 @@ - -type_vec3.hpp Source File + +type_vec2.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,300 +35,276 @@
  • File List
  • + +
    -
    type_vec3.hpp
    -
    +
    type_vec2.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_gentype3
    -00030 #define glm_core_type_gentype3
    -00031 
    -00032 #include "type_vec.hpp"
    -00033 #include "type_float.hpp"
    -00034 #include "type_int.hpp"
    -00035 #include "type_size.hpp"
    -00036 #include "_swizzle.hpp"
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041         template <typename T> struct tref2;
    -00042         template <typename T> struct tref3;
    -00043         template <typename T> struct tref4;
    -00044         template <typename T> struct tvec2;
    -00045         template <typename T> struct tvec4;
    -00046 
    -00047         // Basic 3D vector type.
    -00048         // \ingroup core_template
    -00049         template <typename T>
    -00050         struct tvec3
    -00051         {       
    -00052                 enum ctor{null};
    -00053 
    -00054                 typedef T value_type;
    -00055                 typedef std::size_t size_type;
    -00056                 GLM_FUNC_DECL size_type length() const;
    -00057 
    -00058                 typedef tvec3<T> type;
    -00059                 typedef tvec3<bool> bool_type;
    -00060 
    -00062                 // Data
    -00063 
    -00064 #       if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    -00065                 union 
    -00066                 {
    -00067 #               if(defined(GLM_SWIZZLE))
    -00068                         _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z)
    -00069                         _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b)
    -00070                         _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p)
    -00071                         _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z)
    -00072                         _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b)
    -00073                         _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p)
    -00074                         _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z)
    -00075                         _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b)
    -00076                         _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p)
    -00077 #               endif//(defined(GLM_SWIZZLE))
    -00078 
    -00079                         struct{value_type r, g, b;};
    -00080                         struct{value_type s, t, p;};
    -00081                         struct{value_type x, y, z;};
    -00082                 };
    -00083 #       elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    -00084                 union {value_type x, r, s;};
    -00085                 union {value_type y, g, t;};
    -00086                 union {value_type z, b, p;};
    -00087 
    -00088 #               if(defined(GLM_SWIZZLE))
    -00089                         // Defines all he swizzle operator as functions
    -00090                         GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, detail::tvec3, detail::tref2, detail::tref3)
    -00091                         GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4)
    -00092 #               endif//(defined(GLM_SWIZZLE))
    -00093 #       else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    -00094                 value_type x, y, z;
    -00095 
    -00096 #               if(defined(GLM_SWIZZLE))
    -00097                         // Defines all he swizzle operator as functions
    -00098                         GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, detail::tvec3, detail::tref2, detail::tref3, x, y, z)
    -00099                         GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z)
    -00100 #               endif//(defined(GLM_SWIZZLE))
    -00101 #       endif//GLM_COMPONENT
    -00102 
    -00104                 // Accesses
    -00105 
    -00106                 GLM_FUNC_DECL value_type & operator[](size_type i);
    -00107                 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    -00108 
    -00110                 // Implicit basic constructors
    -00111 
    -00112                 GLM_FUNC_DECL tvec3();
    -00113                 GLM_FUNC_DECL tvec3(tvec3<T> const & v);
    -00114 
    -00116                 // Explicit basic constructors
    -00117 
    -00118                 GLM_FUNC_DECL explicit tvec3(
    -00119                         ctor);
    -00120                 GLM_FUNC_DECL explicit tvec3(
    -00121                         value_type const & s);
    -00122                 GLM_FUNC_DECL explicit tvec3(
    -00123                         value_type const & s1, 
    -00124                         value_type const & s2, 
    -00125                         value_type const & s3);
    -00126 
    -00128                 // Convertion scalar constructors
    -00129 
    -00131                 template <typename U> 
    -00132                 GLM_FUNC_DECL explicit tvec3(
    -00133                         U const & x);
    -00135                 template <typename U, typename V, typename W> 
    -00136                 GLM_FUNC_DECL explicit tvec3(
    -00137                         U const & x, 
    -00138                         V const & y, 
    -00139                         W const & z);                   
    -00140 
    -00142                 // Convertion vector constructors
    -00143 
    -00145                 template <typename A, typename B> 
    -00146                 GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s);
    -00148                 template <typename A, typename B> 
    -00149                 GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v);
    -00151                 template <typename U> 
    -00152                 GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v);
    -00154                 template <typename U> 
    -00155                 GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v);
    -00156 
    -00158                 // Swizzle constructors
    -00159 
    -00160                 GLM_FUNC_DECL tvec3(tref3<T> const & r);
    -00161 
    -00162                 template <typename A, typename B> 
    -00163                 GLM_FUNC_DECL explicit tvec3(tref2<A> const & v, B const & s);
    -00164 
    -00165                 template <typename A, typename B> 
    -00166                 GLM_FUNC_DECL explicit tvec3(A const & s, tref2<B> const & v);
    -00167 
    -00168         template <int E0, int E1, int E2>
    -00169         GLM_FUNC_DECL tvec3(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & that)
    -00170         {
    -00171             *this = that();
    -00172         }
    -00173 
    -00174         template <int E0, int E1>
    -00175         GLM_FUNC_DECL tvec3(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & s)
    -00176         {
    -00177             *this = tvec3<T>(v(), s);
    -00178         }
    -00179 
    -00180         template <int E0, int E1>
    -00181         GLM_FUNC_DECL tvec3(T const & s, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
    -00182         {
    -00183             *this = tvec3<T>(s, v());
    -00184         }
    -00185 
    -00187                 // Unary arithmetic operators
    -00188 
    -00189                 GLM_FUNC_DECL tvec3<T> & operator= (tvec3<T> const & v);
    -00190                 template <typename U> 
    -00191                 GLM_FUNC_DECL tvec3<T> & operator= (tvec3<U> const & v);
    -00192 
    -00193                 template <typename U> 
    -00194                 GLM_FUNC_DECL tvec3<T> & operator+=(U const & s);
    -00195                 template <typename U> 
    -00196                 GLM_FUNC_DECL tvec3<T> & operator+=(tvec3<U> const & v);
    -00197                 template <typename U> 
    -00198                 GLM_FUNC_DECL tvec3<T> & operator-=(U const & s);
    -00199                 template <typename U> 
    -00200                 GLM_FUNC_DECL tvec3<T> & operator-=(tvec3<U> const & v);
    -00201                 template <typename U> 
    -00202                 GLM_FUNC_DECL tvec3<T> & operator*=(U const & s);
    -00203                 template <typename U> 
    -00204                 GLM_FUNC_DECL tvec3<T> & operator*=(tvec3<U> const & v);
    -00205                 template <typename U> 
    -00206                 GLM_FUNC_DECL tvec3<T> & operator/=(U const & s);
    -00207                 template <typename U> 
    -00208                 GLM_FUNC_DECL tvec3<T> & operator/=(tvec3<U> const & v);
    -00209                 GLM_FUNC_DECL tvec3<T> & operator++();
    -00210                 GLM_FUNC_DECL tvec3<T> & operator--();
    -00211 
    -00213                 // Unary bit operators
    -00214 
    -00215                 template <typename U>
    -00216                 GLM_FUNC_DECL tvec3<T> & operator%= (U const & s);
    -00217                 template <typename U>
    -00218                 GLM_FUNC_DECL tvec3<T> & operator%= (tvec3<U> const & v);
    -00219                 template <typename U>
    -00220                 GLM_FUNC_DECL tvec3<T> & operator&= (U const & s);
    -00221                 template <typename U>
    -00222                 GLM_FUNC_DECL tvec3<T> & operator&= (tvec3<U> const & v);
    -00223                 template <typename U>
    -00224                 GLM_FUNC_DECL tvec3<T> & operator|= (U const & s);
    -00225                 template <typename U>
    -00226                 GLM_FUNC_DECL tvec3<T> & operator|= (tvec3<U> const & v);
    -00227                 template <typename U>
    -00228                 GLM_FUNC_DECL tvec3<T> & operator^= (U const & s);
    -00229                 template <typename U>
    -00230                 GLM_FUNC_DECL tvec3<T> & operator^= (tvec3<U> const & v);
    -00231                 template <typename U>
    -00232                 GLM_FUNC_DECL tvec3<T> & operator<<=(U const & s);
    -00233                 template <typename U>
    -00234                 GLM_FUNC_DECL tvec3<T> & operator<<=(tvec3<U> const & v);
    -00235                 template <typename U>
    -00236                 GLM_FUNC_DECL tvec3<T> & operator>>=(U const & s);
    -00237                 template <typename U>
    -00238                 GLM_FUNC_DECL tvec3<T> & operator>>=(tvec3<U> const & v);
    -00239 
    -00241                 // Swizzle operators
    -00242 
    -00243                 GLM_FUNC_DECL value_type swizzle(comp X) const;
    -00244                 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    -00245                 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    -00246                 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    -00247                 GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
    -00248                 GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
    -00249         };
    -00250 
    -00251         template <typename T>
    -00252         struct tref3
    -00253         {
    -00254                 GLM_FUNC_DECL tref3(T & x, T & y, T & z);
    -00255                 GLM_FUNC_DECL tref3(tref3<T> const & r);
    -00256                 GLM_FUNC_DECL explicit tref3(tvec3<T> const & v);
    -00257 
    -00258                 GLM_FUNC_DECL tref3<T> & operator= (tref3<T> const & r);
    -00259                 GLM_FUNC_DECL tref3<T> & operator= (tvec3<T> const & v);
    -00260 
    -00261                 GLM_FUNC_DECL tvec3<T> operator() ();
    -00262 
    -00263                 T & x;
    -00264                 T & y;
    -00265                 T & z;
    -00266         };
    -00267 
    -00268         GLM_DETAIL_IS_VECTOR(tvec3);
    -00269 } //namespace detail
    -00270 
    -00273 
    -00279         typedef detail::tvec3<highp_float>              highp_vec3;
    -00280 
    -00286         typedef detail::tvec3<mediump_float>    mediump_vec3;
    -00287 
    -00293         typedef detail::tvec3<lowp_float>               lowp_vec3;
    -00294 
    -00300         typedef detail::tvec3<highp_int>                highp_ivec3;
    -00301 
    -00307         typedef detail::tvec3<mediump_int>              mediump_ivec3;
    -00308 
    -00314         typedef detail::tvec3<lowp_int>                 lowp_ivec3;
    -00315 
    -00321         typedef detail::tvec3<highp_uint>               highp_uvec3;
    -00322 
    -00328         typedef detail::tvec3<mediump_uint>             mediump_uvec3;
    -00329 
    -00335         typedef detail::tvec3<lowp_uint>                lowp_uvec3;
    -00336 
    -00338 }//namespace glm
    -00339 
    -00340 #ifndef GLM_EXTERNAL_TEMPLATE
    -00341 #include "type_vec3.inl"
    -00342 #endif//GLM_EXTERNAL_TEMPLATE
    -00343 
    -00344 #endif//glm_core_type_gentype3
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_gentype2
    +
    30 #define glm_core_type_gentype2
    +
    31 
    +
    32 #include "type_vec.hpp"
    +
    33 #include "type_float.hpp"
    +
    34 #include "type_int.hpp"
    +
    35 #include "type_size.hpp"
    +
    36 #include "_swizzle.hpp"
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41  template <typename T> struct tref2;
    +
    42  template <typename T> struct tref3;
    +
    43  template <typename T> struct tref4;
    +
    44  template <typename T> struct tvec3;
    +
    45  template <typename T> struct tvec4;
    +
    46 
    +
    47  template <typename T>
    +
    48  struct tvec2
    +
    49  {
    +
    50  enum ctor{null};
    +
    51 
    +
    52  typedef T value_type;
    +
    53  typedef std::size_t size_type;
    +
    54  typedef tvec2<T> type;
    +
    55  typedef tvec2<bool> bool_type;
    +
    56 
    +
    57  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    58 
    +
    60  // Data
    +
    61 
    +
    62 # if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    +
    63  union
    +
    64  {
    +
    65 # if(defined(GLM_SWIZZLE))
    +
    66  _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y)
    +
    67  _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g)
    +
    68  _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t)
    +
    69  _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y)
    +
    70  _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g)
    +
    71  _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t)
    +
    72  _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y)
    +
    73  _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g)
    +
    74  _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t)
    +
    75 # endif//(defined(GLM_SWIZZLE))
    +
    76 
    +
    77  struct{value_type r, g;};
    +
    78  struct{value_type s, t;};
    +
    79  struct{value_type x, y;};
    +
    80  };
    +
    81 # elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    +
    82  union {value_type x, r, s;};
    +
    83  union {value_type y, g, t;};
    +
    84 
    +
    85 # if(defined(GLM_SWIZZLE))
    +
    86  // Defines all he swizzle operator as functions
    +
    87  GLM_SWIZZLE_GEN_REF_FROM_VEC2(value_type, detail::tvec2, detail::tref2)
    +
    88  GLM_SWIZZLE_GEN_VEC_FROM_VEC2(value_type, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4)
    +
    89 # endif//(defined(GLM_SWIZZLE))
    +
    90 # else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    +
    91  value_type x, y;
    +
    92 
    +
    93 # if(defined(GLM_SWIZZLE))
    +
    94  // Defines all he swizzle operator as functions
    +
    95  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(value_type, detail::tvec2, detail::tref2, x, y)
    +
    96  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(value_type, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4, x, y)
    +
    97 # endif//(defined(GLM_SWIZZLE))
    +
    98 # endif//GLM_COMPONENT
    +
    99 
    +
    101  // Accesses
    +
    102 
    +
    103  GLM_FUNC_DECL value_type & operator[](size_type i);
    +
    104  GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    +
    105 
    +
    107  // Implicit basic constructors
    +
    108 
    +
    109  GLM_FUNC_DECL tvec2();
    +
    110  GLM_FUNC_DECL tvec2(tvec2<T> const & v);
    +
    111 
    +
    113  // Explicit basic constructors
    +
    114 
    +
    115  GLM_FUNC_DECL explicit tvec2(
    +
    116  ctor);
    +
    117  GLM_FUNC_DECL explicit tvec2(
    +
    118  value_type const & s);
    +
    119  GLM_FUNC_DECL explicit tvec2(
    +
    120  value_type const & s1,
    +
    121  value_type const & s2);
    +
    122 
    +
    124  // Swizzle constructors
    +
    125 
    +
    126  tvec2(tref2<T> const & r);
    +
    127 
    +
    128  template <int E0, int E1>
    +
    129  GLM_FUNC_DECL tvec2(const glm::detail::swizzle<2,T,tvec2<T>,E0,E1,-1,-2>& that)
    +
    130  {
    +
    131  *this = that();
    +
    132  }
    +
    133 
    +
    135  // Convertion constructors
    +
    136 
    +
    138  template <typename U>
    +
    139  GLM_FUNC_DECL explicit tvec2(
    +
    140  U const & x);
    +
    142  template <typename U, typename V>
    +
    143  GLM_FUNC_DECL explicit tvec2(
    +
    144  U const & x,
    +
    145  V const & y);
    +
    146 
    +
    148  // Convertion vector constructors
    +
    149 
    +
    151  template <typename U>
    +
    152  GLM_FUNC_DECL explicit tvec2(tvec2<U> const & v);
    +
    154  template <typename U>
    +
    155  GLM_FUNC_DECL explicit tvec2(tvec3<U> const & v);
    +
    157  template <typename U>
    +
    158  GLM_FUNC_DECL explicit tvec2(tvec4<U> const & v);
    +
    159 
    +
    161  // Unary arithmetic operators
    +
    162 
    +
    163  GLM_FUNC_DECL tvec2<T> & operator= (tvec2<T> const & v);
    +
    164  template <typename U>
    +
    165  GLM_FUNC_DECL tvec2<T> & operator= (tvec2<U> const & v);
    +
    166 
    +
    167  template <typename U>
    +
    168  GLM_FUNC_DECL tvec2<T> & operator+=(U const & s);
    +
    169  template <typename U>
    +
    170  GLM_FUNC_DECL tvec2<T> & operator+=(tvec2<U> const & v);
    +
    171  template <typename U>
    +
    172  GLM_FUNC_DECL tvec2<T> & operator-=(U const & s);
    +
    173  template <typename U>
    +
    174  GLM_FUNC_DECL tvec2<T> & operator-=(tvec2<U> const & v);
    +
    175  template <typename U>
    +
    176  GLM_FUNC_DECL tvec2<T> & operator*=(U const & s);
    +
    177  template <typename U>
    +
    178  GLM_FUNC_DECL tvec2<T> & operator*=(tvec2<U> const & v);
    +
    179  template <typename U>
    +
    180  GLM_FUNC_DECL tvec2<T> & operator/=(U const & s);
    +
    181  template <typename U>
    +
    182  GLM_FUNC_DECL tvec2<T> & operator/=(tvec2<U> const & v);
    +
    183  GLM_FUNC_DECL tvec2<T> & operator++();
    +
    184  GLM_FUNC_DECL tvec2<T> & operator--();
    +
    185 
    +
    187  // Unary bit operators
    +
    188 
    +
    189  template <typename U>
    +
    190  GLM_FUNC_DECL tvec2<T> & operator%= (U const & s);
    +
    191  template <typename U>
    +
    192  GLM_FUNC_DECL tvec2<T> & operator%= (tvec2<U> const & v);
    +
    193  template <typename U>
    +
    194  GLM_FUNC_DECL tvec2<T> & operator&= (U const & s);
    +
    195  template <typename U>
    +
    196  GLM_FUNC_DECL tvec2<T> & operator&= (tvec2<U> const & v);
    +
    197  template <typename U>
    +
    198  GLM_FUNC_DECL tvec2<T> & operator|= (U const & s);
    +
    199  template <typename U>
    +
    200  GLM_FUNC_DECL tvec2<T> & operator|= (tvec2<U> const & v);
    +
    201  template <typename U>
    +
    202  GLM_FUNC_DECL tvec2<T> & operator^= (U const & s);
    +
    203  template <typename U>
    +
    204  GLM_FUNC_DECL tvec2<T> & operator^= (tvec2<U> const & v);
    +
    205  template <typename U>
    +
    206  GLM_FUNC_DECL tvec2<T> & operator<<=(U const & s);
    +
    207  template <typename U>
    +
    208  GLM_FUNC_DECL tvec2<T> & operator<<=(tvec2<U> const & v);
    +
    209  template <typename U>
    +
    210  GLM_FUNC_DECL tvec2<T> & operator>>=(U const & s);
    +
    211  template <typename U>
    +
    212  GLM_FUNC_DECL tvec2<T> & operator>>=(tvec2<U> const & v);
    +
    213 
    +
    215  // Swizzle operators
    +
    216 
    +
    217  GLM_FUNC_DECL value_type swizzle(comp X) const;
    +
    218  GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    +
    219  GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    +
    220  GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    +
    221  GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
    +
    222  };
    +
    223 
    +
    224  template <typename T>
    +
    225  struct tref2
    +
    226  {
    +
    227  GLM_FUNC_DECL tref2(T & x, T & y);
    +
    228  GLM_FUNC_DECL tref2(tref2<T> const & r);
    +
    229  GLM_FUNC_DECL explicit tref2(tvec2<T> const & v);
    +
    230 
    +
    231  GLM_FUNC_DECL tref2<T> & operator= (tref2<T> const & r);
    +
    232  GLM_FUNC_DECL tref2<T> & operator= (tvec2<T> const & v);
    +
    233 
    +
    234  GLM_FUNC_DECL tvec2<T> operator() ();
    +
    235 
    +
    236  T & x;
    +
    237  T & y;
    +
    238  };
    +
    239 
    +
    240  GLM_DETAIL_IS_VECTOR(tvec2);
    +
    241 
    +
    242 } //namespace detail
    +
    243 
    +
    246 
    +
    252  typedef detail::tvec2<highp_float> highp_vec2;
    +
    253 
    +
    259  typedef detail::tvec2<mediump_float> mediump_vec2;
    +
    260 
    +
    266  typedef detail::tvec2<lowp_float> lowp_vec2;
    +
    267 
    +
    273  typedef detail::tvec2<highp_int> highp_ivec2;
    +
    274 
    +
    280  typedef detail::tvec2<mediump_int> mediump_ivec2;
    +
    281 
    +
    287  typedef detail::tvec2<lowp_int> lowp_ivec2;
    +
    288 
    +
    294  typedef detail::tvec2<highp_uint> highp_uvec2;
    +
    295 
    +
    301  typedef detail::tvec2<mediump_uint> mediump_uvec2;
    +
    302 
    +
    308  typedef detail::tvec2<lowp_uint> lowp_uvec2;
    +
    309 
    +
    311 }//namespace glm
    +
    312 
    +
    313 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    314 #include "type_vec2.inl"
    +
    315 #endif//GLM_EXTERNAL_TEMPLATE
    +
    316 
    +
    317 #endif//glm_core_type_gentype2
    +
    + - diff --git a/doc/api/a00114.html b/doc/api/a00114.html index 29372c3a..7e71397b 100644 --- a/doc/api/a00114.html +++ b/doc/api/a00114.html @@ -2,42 +2,31 @@ - -type_vec4.hpp File Reference + +type_vec3.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,51 +35,62 @@
  • File List
  • + +
    -
    type_vec4.hpp File Reference
    -
    +
    type_vec3.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    +

    Typedefs

    typedef detail::tvec4< highp_int > highp_ivec4
    typedef detail::tvec4< highp_uint > highp_uvec4
    typedef detail::tvec4
    -< highp_float > 
    highp_vec4
    typedef detail::tvec4< lowp_int > lowp_ivec4
    typedef detail::tvec4< lowp_uint > lowp_uvec4
    typedef detail::tvec4< lowp_float > lowp_vec4
    typedef detail::tvec4
    -< mediump_int > 
    mediump_ivec4
    typedef detail::tvec4
    -< mediump_uint > 
    mediump_uvec4
    typedef detail::tvec4
    -< mediump_float > 
    mediump_vec4
    typedef detail::tvec3< highp_int > highp_ivec3
     
    typedef detail::tvec3< highp_uint > highp_uvec3
     
    typedef detail::tvec3
    +< highp_float > 
    highp_vec3
     
    typedef detail::tvec3< lowp_int > lowp_ivec3
     
    typedef detail::tvec3< lowp_uint > lowp_uvec3
     
    typedef detail::tvec3< lowp_float > lowp_vec3
     
    typedef detail::tvec3
    +< mediump_int > 
    mediump_ivec3
     
    typedef detail::tvec3
    +< mediump_uint > 
    mediump_uvec3
     
    typedef detail::tvec3
    +< mediump_float > 
    mediump_vec3
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date:
    2008-08-22 / 2011-06-15
    -
    Author:
    Christophe Riccio
    - -

    Definition in file type_vec4.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-08-22 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_vec3.hpp.

    + + - diff --git a/doc/api/a00114_source.html b/doc/api/a00114_source.html index 3d87b365..a6df9f51 100644 --- a/doc/api/a00114_source.html +++ b/doc/api/a00114_source.html @@ -2,42 +2,31 @@ - -type_vec4.hpp Source File + +type_vec3.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,346 +35,300 @@
  • File List
  • + +
    -
    type_vec4.hpp
    -
    +
    type_vec3.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 #ifndef glm_core_type_gentype4
    -00030 #define glm_core_type_gentype4
    -00031 
    -00032 #include "type_vec.hpp"
    -00033 #include "type_float.hpp"
    -00034 #include "type_int.hpp"
    -00035 #include "type_size.hpp"
    -00036 #include "_swizzle.hpp"
    -00037 
    -00038 namespace glm{
    -00039 namespace detail
    -00040 {
    -00041         template <typename T> struct tref2;
    -00042         template <typename T> struct tref3;
    -00043         template <typename T> struct tref4;
    -00044         template <typename T> struct tvec2;
    -00045         template <typename T> struct tvec3;
    -00046 
    -00047         // Basic 4D vector type.
    -00048         // @ingroup core_template
    -00049         template <typename T>
    -00050         struct tvec4
    -00051         {
    -00052                 enum ctor{null};
    -00053 
    -00054                 typedef T value_type;
    -00055                 typedef std::size_t size_type;
    -00056                 GLM_FUNC_DECL size_type length() const;
    -00057 
    -00058                 typedef tvec4<T> type;
    -00059                 typedef tvec4<bool> bool_type;
    -00060 
    -00062                 // Data
    -00063 
    -00064 #       if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    -00065                 union 
    -00066                 {
    -00067 #               if(defined(GLM_SWIZZLE))
    -00068                         _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z, w)
    -00069                         _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b, a)
    -00070                         _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p, q)
    -00071                         _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z, w)
    -00072                         _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b, a)
    -00073                         _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p, q)
    -00074                         _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z, w)
    -00075                         _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b, a)
    -00076                         _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p, q)
    -00077 #               endif//(defined(GLM_SWIZZLE))
    -00078 
    -00079                         struct{value_type r, g, b, a;};
    -00080                         struct{value_type s, t, p, q;};
    -00081                         struct{value_type x, y, z, w;};
    -00082                 };
    -00083 #       elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    -00084                 union {value_type x, r, s;};
    -00085                 union {value_type y, g, t;};
    -00086                 union {value_type z, b, p;};
    -00087                 union {value_type w, a, q;};
    -00088 
    -00089 #               if(defined(GLM_SWIZZLE))
    -00090                         // Defines all he swizzle operator as functions
    -00091                         GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4)
    -00092                         GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4)
    -00093 #               endif//(defined(GLM_SWIZZLE))
    -00094 #       else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    -00095                 value_type x, y, z, w;
    -00096 
    -00097 #               if(defined(GLM_SWIZZLE))
    -00098                         // Defines all he swizzle operator as functions
    -00099                         GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4, x, y, z, w)
    -00100                         GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z, w)
    -00101 #               endif//(defined(GLM_SWIZZLE))
    -00102 #       endif//GLM_COMPONENT
    -00103 
    -00105                 // Accesses
    -00106 
    -00107                 GLM_FUNC_DECL value_type & operator[](size_type i);
    -00108                 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    -00109 
    -00111                 // Implicit basic constructors
    -00112 
    -00113                 GLM_FUNC_DECL tvec4();
    -00114                 GLM_FUNC_DECL tvec4(type const & v);
    -00115 
    -00117                 // Explicit basic constructors
    -00118 
    -00119                 GLM_FUNC_DECL explicit tvec4(
    -00120                         ctor);
    -00121                 GLM_FUNC_DECL explicit tvec4(
    -00122                         value_type const & s);
    -00123                 GLM_FUNC_DECL explicit tvec4(
    -00124                         value_type const & s0, 
    -00125                         value_type const & s1, 
    -00126                         value_type const & s2, 
    -00127                         value_type const & s3);
    -00128 
    -00130                 // Convertion scalar constructors
    -00131 
    -00133                 template <typename U> 
    -00134                 GLM_FUNC_DECL explicit tvec4(
    -00135                         U const & x);
    -00137                 template <typename A, typename B, typename C, typename D> 
    -00138                 GLM_FUNC_DECL explicit tvec4(
    -00139                         A const & x, 
    -00140                         B const & y, 
    -00141                         C const & z, 
    -00142                         D const & w);                   
    -00143 
    -00145                 // Convertion vector constructors
    -00146 
    -00148                 template <typename A, typename B, typename C> 
    -00149                 GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
    -00151                 template <typename A, typename B, typename C> 
    -00152                 GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
    -00154                 template <typename A, typename B, typename C> 
    -00155                 GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
    -00157                 template <typename A, typename B> 
    -00158                 GLM_FUNC_DECL explicit tvec4(tvec3<A> const & v, B const & s);
    -00160                 template <typename A, typename B> 
    -00161                 GLM_FUNC_DECL explicit tvec4(A const & s, tvec3<B> const & v);
    -00163                 template <typename A, typename B> 
    -00164                 GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
    -00166                 template <typename U> 
    -00167                 GLM_FUNC_DECL explicit tvec4(tvec4<U> const & v);
    -00168 
    -00169         template <int E0, int E1, int E2, int E3>
    -00170         GLM_FUNC_DECL tvec4(glm::detail::swizzle<4, T, tvec4<T>, E0, E1, E2, E3> const & that)
    -00171         {
    -00172             *this = that();
    -00173         }
    -00174 
    -00175         template <int E0, int E1, int F0, int F1>
    -00176         GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, glm::detail::swizzle<2, T, tvec2<T>, F0, F1, -1, -2> const & u)
    -00177         {
    -00178             *this = tvec4<T>(v(), u());
    -00179         }
    -00180 
    -00181         template <int E0, int E1>
    -00182         GLM_FUNC_DECL tvec4(T const & x, T const & y, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
    -00183         {
    -00184             *this = tvec4<T>(x, y, v());
    -00185         }
    -00186 
    -00187         template <int E0, int E1>
    -00188         GLM_FUNC_DECL tvec4(T const & x, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & w)
    -00189         {
    -00190             *this = tvec4<T>(x, v(), w);
    -00191         }
    -00192 
    -00193         template <int E0, int E1>
    -00194         GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & z, T const & w)
    -00195         {
    -00196             *this = tvec4<T>(v(), z, w);
    -00197         }
    -00198 
    -00199         template <int E0, int E1, int E2>
    -00200         GLM_FUNC_DECL tvec4(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & v, T const & w)
    -00201         {
    -00202             *this = tvec4<T>(v(), w);
    -00203         }
    -00204 
    -00205         template <int E0, int E1, int E2>
    -00206         GLM_FUNC_DECL tvec4(T const & x, glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & v)
    -00207         {
    -00208             *this = tvec4<T>(x, v());
    -00209         }
    -00210 
    -00212                 // Swizzle constructors
    -00213 
    -00214                 GLM_FUNC_DECL tvec4(tref4<T> const & r);
    -00215 
    -00217                 template <typename A, typename B, typename C> 
    -00218                 GLM_FUNC_DECL explicit tvec4(tref2<A> const & v, B const & s1, C const & s2);
    -00220                 template <typename A, typename B, typename C> 
    -00221                 GLM_FUNC_DECL explicit tvec4(A const & s1, tref2<B> const & v, C const & s2);
    -00223                 template <typename A, typename B, typename C> 
    -00224                 GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tref2<C> const & v);
    -00226                 template <typename A, typename B> 
    -00227                 GLM_FUNC_DECL explicit tvec4(tref3<A> const & v, B const & s);
    -00229                 template <typename A, typename B> 
    -00230                 GLM_FUNC_DECL explicit tvec4(A const & s, tref3<B> const & v);
    -00232                 template <typename A, typename B> 
    -00233                 GLM_FUNC_DECL explicit tvec4(tref2<A> const & v1, tref2<B> const & v2);
    -00235                 template <typename A, typename B> 
    -00236                 GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tref2<B> const & v2);
    -00238                 template <typename A, typename B> 
    -00239                 GLM_FUNC_DECL explicit tvec4(tref2<A> const & v1, tvec2<B> const & v2);
    -00240 
    -00242                 // Unary arithmetic operators
    -00243 
    -00244                 GLM_FUNC_DECL tvec4<T> & operator= (tvec4<T> const & v);
    -00245                 template <typename U>
    -00246                 GLM_FUNC_DECL tvec4<T> & operator= (tvec4<U> const & v);
    -00247 
    -00248                 template <typename U>
    -00249                 GLM_FUNC_DECL tvec4<T> & operator+=(U const & s);
    -00250                 template <typename U>
    -00251                 GLM_FUNC_DECL tvec4<T> & operator+=(tvec4<U> const & v);
    -00252                 template <typename U>
    -00253                 GLM_FUNC_DECL tvec4<T> & operator-=(U const & s);
    -00254                 template <typename U>
    -00255                 GLM_FUNC_DECL tvec4<T> & operator-=(tvec4<U> const & v);
    -00256                 template <typename U>
    -00257                 GLM_FUNC_DECL tvec4<T> & operator*=(U const & s);
    -00258                 template <typename U>
    -00259                 GLM_FUNC_DECL tvec4<T> & operator*=(tvec4<U> const & v);
    -00260                 template <typename U>
    -00261                 GLM_FUNC_DECL tvec4<T> & operator/=(U const & s);
    -00262                 template <typename U>
    -00263                 GLM_FUNC_DECL tvec4<T> & operator/=(tvec4<U> const & v);
    -00264                 GLM_FUNC_DECL tvec4<T> & operator++();
    -00265                 GLM_FUNC_DECL tvec4<T> & operator--();
    -00266 
    -00268                 // Unary bit operators
    -00269 
    -00270                 template <typename U>
    -00271                 GLM_FUNC_DECL tvec4<T> & operator%= (U const & s);
    -00272                 template <typename U>
    -00273                 GLM_FUNC_DECL tvec4<T> & operator%= (tvec4<U> const & v);
    -00274                 template <typename U>
    -00275                 GLM_FUNC_DECL tvec4<T> & operator&= (U const & s);
    -00276                 template <typename U>
    -00277                 GLM_FUNC_DECL tvec4<T> & operator&= (tvec4<U> const & v);
    -00278                 template <typename U>
    -00279                 GLM_FUNC_DECL tvec4<T> & operator|= (U const & s);
    -00280                 template <typename U>
    -00281                 GLM_FUNC_DECL tvec4<T> & operator|= (tvec4<U> const & v);
    -00282                 template <typename U>
    -00283                 GLM_FUNC_DECL tvec4<T> & operator^= (U const & s);
    -00284                 template <typename U>
    -00285                 GLM_FUNC_DECL tvec4<T> & operator^= (tvec4<U> const & v);
    -00286                 template <typename U>
    -00287                 GLM_FUNC_DECL tvec4<T> & operator<<=(U const & s);
    -00288                 template <typename U>
    -00289                 GLM_FUNC_DECL tvec4<T> & operator<<=(tvec4<U> const & v);
    -00290                 template <typename U>
    -00291                 GLM_FUNC_DECL tvec4<T> & operator>>=(U const & s);
    -00292                 template <typename U>
    -00293                 GLM_FUNC_DECL tvec4<T> & operator>>=(tvec4<U> const & v);
    -00294 
    -00296                 // Swizzle operators
    -00297 
    -00298                 GLM_FUNC_DECL value_type swizzle(comp X) const;
    -00299                 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    -00300                 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    -00301                 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    -00302                 GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
    -00303                 GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
    -00304                 GLM_FUNC_DECL tref4<T> swizzle(comp X, comp Y, comp Z, comp W);
    -00305         };
    -00306 
    -00307         template <typename T>
    -00308         struct tref4
    -00309         {
    -00310                 GLM_FUNC_DECL tref4(T & x, T & y, T & z, T & w);
    -00311                 GLM_FUNC_DECL tref4(tref4<T> const & r);
    -00312                 GLM_FUNC_DECL explicit tref4(tvec4<T> const & v);
    -00313 
    -00314                 GLM_FUNC_DECL tref4<T> & operator= (tref4<T> const & r);
    -00315                 GLM_FUNC_DECL tref4<T> & operator= (tvec4<T> const & v);
    -00316 
    -00317                 GLM_FUNC_DECL tvec4<T> operator() ();
    -00318 
    -00319                 T & x;
    -00320                 T & y;
    -00321                 T & z;
    -00322                 T & w;
    -00323         };
    -00324 
    -00325         GLM_DETAIL_IS_VECTOR(tvec4);
    -00326 }//namespace detail
    -00327 
    -00330 
    -00336         typedef detail::tvec4<highp_float>              highp_vec4;
    -00337 
    -00343         typedef detail::tvec4<mediump_float>    mediump_vec4;
    -00344 
    -00350         typedef detail::tvec4<lowp_float>               lowp_vec4;
    -00351 
    -00357         typedef detail::tvec4<highp_int>                highp_ivec4;
    -00358 
    -00364         typedef detail::tvec4<mediump_int>              mediump_ivec4;
    -00365 
    -00371         typedef detail::tvec4<lowp_int>                 lowp_ivec4;
    -00372 
    -00378         typedef detail::tvec4<highp_uint>               highp_uvec4;
    -00379 
    -00385         typedef detail::tvec4<mediump_uint>             mediump_uvec4;
    -00386 
    -00392         typedef detail::tvec4<lowp_uint>                lowp_uvec4;
    -00393 
    -00395 }//namespace glm
    -00396 
    -00397 #ifndef GLM_EXTERNAL_TEMPLATE
    -00398 #include "type_vec4.inl"
    -00399 #endif//GLM_EXTERNAL_TEMPLATE
    -00400 
    -00401 #endif//glm_core_type_gentype4
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_gentype3
    +
    30 #define glm_core_type_gentype3
    +
    31 
    +
    32 #include "type_vec.hpp"
    +
    33 #include "type_float.hpp"
    +
    34 #include "type_int.hpp"
    +
    35 #include "type_size.hpp"
    +
    36 #include "_swizzle.hpp"
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41  template <typename T> struct tref2;
    +
    42  template <typename T> struct tref3;
    +
    43  template <typename T> struct tref4;
    +
    44  template <typename T> struct tvec2;
    +
    45  template <typename T> struct tvec4;
    +
    46 
    +
    47  template <typename T>
    +
    48  struct tvec3
    +
    49  {
    +
    50  enum ctor{null};
    +
    51 
    +
    52  typedef T value_type;
    +
    53  typedef std::size_t size_type;
    +
    54  typedef tvec3<T> type;
    +
    55  typedef tvec3<bool> bool_type;
    +
    56 
    +
    57  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    58 
    +
    60  // Data
    +
    61 
    +
    62 # if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    +
    63  union
    +
    64  {
    +
    65 # if(defined(GLM_SWIZZLE))
    +
    66  _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z)
    +
    67  _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b)
    +
    68  _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p)
    +
    69  _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z)
    +
    70  _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b)
    +
    71  _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p)
    +
    72  _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z)
    +
    73  _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b)
    +
    74  _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p)
    +
    75 # endif//(defined(GLM_SWIZZLE))
    +
    76 
    +
    77  struct{value_type r, g, b;};
    +
    78  struct{value_type s, t, p;};
    +
    79  struct{value_type x, y, z;};
    +
    80  };
    +
    81 # elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    +
    82  union {value_type x, r, s;};
    +
    83  union {value_type y, g, t;};
    +
    84  union {value_type z, b, p;};
    +
    85 
    +
    86 # if(defined(GLM_SWIZZLE))
    +
    87  // Defines all he swizzle operator as functions
    +
    88  GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, detail::tvec3, detail::tref2, detail::tref3)
    +
    89  GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4)
    +
    90 # endif//(defined(GLM_SWIZZLE))
    +
    91 # else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    +
    92  value_type x, y, z;
    +
    93 
    +
    94 # if(defined(GLM_SWIZZLE))
    +
    95  // Defines all he swizzle operator as functions
    +
    96  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, detail::tvec3, detail::tref2, detail::tref3, x, y, z)
    +
    97  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z)
    +
    98 # endif//(defined(GLM_SWIZZLE))
    +
    99 # endif//GLM_COMPONENT
    +
    100 
    +
    102  // Accesses
    +
    103 
    +
    104  GLM_FUNC_DECL value_type & operator[](size_type i);
    +
    105  GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    +
    106 
    +
    108  // Implicit basic constructors
    +
    109 
    +
    110  GLM_FUNC_DECL tvec3();
    +
    111  GLM_FUNC_DECL tvec3(tvec3<T> const & v);
    +
    112 
    +
    114  // Explicit basic constructors
    +
    115 
    +
    116  GLM_FUNC_DECL explicit tvec3(
    +
    117  ctor);
    +
    118  GLM_FUNC_DECL explicit tvec3(
    +
    119  value_type const & s);
    +
    120  GLM_FUNC_DECL explicit tvec3(
    +
    121  value_type const & s1,
    +
    122  value_type const & s2,
    +
    123  value_type const & s3);
    +
    124 
    +
    126  // Convertion scalar constructors
    +
    127 
    +
    129  template <typename U>
    +
    130  GLM_FUNC_DECL explicit tvec3(
    +
    131  U const & x);
    +
    133  template <typename U, typename V, typename W>
    +
    134  GLM_FUNC_DECL explicit tvec3(
    +
    135  U const & x,
    +
    136  V const & y,
    +
    137  W const & z);
    +
    138 
    +
    140  // Convertion vector constructors
    +
    141 
    +
    143  template <typename A, typename B>
    +
    144  GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s);
    +
    146  template <typename A, typename B>
    +
    147  GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v);
    +
    149  template <typename U>
    +
    150  GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v);
    +
    152  template <typename U>
    +
    153  GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v);
    +
    154 
    +
    156  // Swizzle constructors
    +
    157 
    +
    158  GLM_FUNC_DECL tvec3(tref3<T> const & r);
    +
    159 
    +
    160  template <typename A, typename B>
    +
    161  GLM_FUNC_DECL explicit tvec3(tref2<A> const & v, B const & s);
    +
    162 
    +
    163  template <typename A, typename B>
    +
    164  GLM_FUNC_DECL explicit tvec3(A const & s, tref2<B> const & v);
    +
    165 
    +
    166  template <int E0, int E1, int E2>
    +
    167  GLM_FUNC_DECL tvec3(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & that)
    +
    168  {
    +
    169  *this = that();
    +
    170  }
    +
    171 
    +
    172  template <int E0, int E1>
    +
    173  GLM_FUNC_DECL tvec3(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & s)
    +
    174  {
    +
    175  *this = tvec3<T>(v(), s);
    +
    176  }
    +
    177 
    +
    178  template <int E0, int E1>
    +
    179  GLM_FUNC_DECL tvec3(T const & s, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
    +
    180  {
    +
    181  *this = tvec3<T>(s, v());
    +
    182  }
    +
    183 
    +
    185  // Unary arithmetic operators
    +
    186 
    +
    187  GLM_FUNC_DECL tvec3<T> & operator= (tvec3<T> const & v);
    +
    188  template <typename U>
    +
    189  GLM_FUNC_DECL tvec3<T> & operator= (tvec3<U> const & v);
    +
    190 
    +
    191  template <typename U>
    +
    192  GLM_FUNC_DECL tvec3<T> & operator+=(U const & s);
    +
    193  template <typename U>
    +
    194  GLM_FUNC_DECL tvec3<T> & operator+=(tvec3<U> const & v);
    +
    195  template <typename U>
    +
    196  GLM_FUNC_DECL tvec3<T> & operator-=(U const & s);
    +
    197  template <typename U>
    +
    198  GLM_FUNC_DECL tvec3<T> & operator-=(tvec3<U> const & v);
    +
    199  template <typename U>
    +
    200  GLM_FUNC_DECL tvec3<T> & operator*=(U const & s);
    +
    201  template <typename U>
    +
    202  GLM_FUNC_DECL tvec3<T> & operator*=(tvec3<U> const & v);
    +
    203  template <typename U>
    +
    204  GLM_FUNC_DECL tvec3<T> & operator/=(U const & s);
    +
    205  template <typename U>
    +
    206  GLM_FUNC_DECL tvec3<T> & operator/=(tvec3<U> const & v);
    +
    207  GLM_FUNC_DECL tvec3<T> & operator++();
    +
    208  GLM_FUNC_DECL tvec3<T> & operator--();
    +
    209 
    +
    211  // Unary bit operators
    +
    212 
    +
    213  template <typename U>
    +
    214  GLM_FUNC_DECL tvec3<T> & operator%= (U const & s);
    +
    215  template <typename U>
    +
    216  GLM_FUNC_DECL tvec3<T> & operator%= (tvec3<U> const & v);
    +
    217  template <typename U>
    +
    218  GLM_FUNC_DECL tvec3<T> & operator&= (U const & s);
    +
    219  template <typename U>
    +
    220  GLM_FUNC_DECL tvec3<T> & operator&= (tvec3<U> const & v);
    +
    221  template <typename U>
    +
    222  GLM_FUNC_DECL tvec3<T> & operator|= (U const & s);
    +
    223  template <typename U>
    +
    224  GLM_FUNC_DECL tvec3<T> & operator|= (tvec3<U> const & v);
    +
    225  template <typename U>
    +
    226  GLM_FUNC_DECL tvec3<T> & operator^= (U const & s);
    +
    227  template <typename U>
    +
    228  GLM_FUNC_DECL tvec3<T> & operator^= (tvec3<U> const & v);
    +
    229  template <typename U>
    +
    230  GLM_FUNC_DECL tvec3<T> & operator<<=(U const & s);
    +
    231  template <typename U>
    +
    232  GLM_FUNC_DECL tvec3<T> & operator<<=(tvec3<U> const & v);
    +
    233  template <typename U>
    +
    234  GLM_FUNC_DECL tvec3<T> & operator>>=(U const & s);
    +
    235  template <typename U>
    +
    236  GLM_FUNC_DECL tvec3<T> & operator>>=(tvec3<U> const & v);
    +
    237 
    +
    239  // Swizzle operators
    +
    240 
    +
    241  GLM_FUNC_DECL value_type swizzle(comp X) const;
    +
    242  GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    +
    243  GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    +
    244  GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    +
    245  GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
    +
    246  GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
    +
    247  };
    +
    248 
    +
    249  template <typename T>
    +
    250  struct tref3
    +
    251  {
    +
    252  GLM_FUNC_DECL tref3(T & x, T & y, T & z);
    +
    253  GLM_FUNC_DECL tref3(tref3<T> const & r);
    +
    254  GLM_FUNC_DECL explicit tref3(tvec3<T> const & v);
    +
    255 
    +
    256  GLM_FUNC_DECL tref3<T> & operator= (tref3<T> const & r);
    +
    257  GLM_FUNC_DECL tref3<T> & operator= (tvec3<T> const & v);
    +
    258 
    +
    259  GLM_FUNC_DECL tvec3<T> operator() ();
    +
    260 
    +
    261  T & x;
    +
    262  T & y;
    +
    263  T & z;
    +
    264  };
    +
    265 
    +
    266  GLM_DETAIL_IS_VECTOR(tvec3);
    +
    267 } //namespace detail
    +
    268 
    +
    271 
    +
    277  typedef detail::tvec3<highp_float> highp_vec3;
    +
    278 
    +
    284  typedef detail::tvec3<mediump_float> mediump_vec3;
    +
    285 
    +
    291  typedef detail::tvec3<lowp_float> lowp_vec3;
    +
    292 
    +
    298  typedef detail::tvec3<highp_int> highp_ivec3;
    +
    299 
    +
    305  typedef detail::tvec3<mediump_int> mediump_ivec3;
    +
    306 
    +
    312  typedef detail::tvec3<lowp_int> lowp_ivec3;
    +
    313 
    +
    319  typedef detail::tvec3<highp_uint> highp_uvec3;
    +
    320 
    +
    326  typedef detail::tvec3<mediump_uint> mediump_uvec3;
    +
    327 
    +
    333  typedef detail::tvec3<lowp_uint> lowp_uvec3;
    +
    334 
    +
    336 }//namespace glm
    +
    337 
    +
    338 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    339 #include "type_vec3.inl"
    +
    340 #endif//GLM_EXTERNAL_TEMPLATE
    +
    341 
    +
    342 #endif//glm_core_type_gentype3
    +
    + - diff --git a/doc/api/a00115.html b/doc/api/a00115.html index 67c66da7..12c5e31d 100644 --- a/doc/api/a00115.html +++ b/doc/api/a00115.html @@ -2,42 +2,31 @@ - -ulp.hpp File Reference + +type_vec4.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,51 +35,62 @@
  • File List
  • + +
    +Typedefs
    -
    ulp.hpp File Reference
    - +
    type_vec4.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Functions

    template<typename T >
    uint float_distance (T const &x, T const &y)
    template<typename T , template< typename > class vecType>
    vecType< uint > float_distance (vecType< T > const &x, vecType< T > const &y)
    template<typename genType >
    genType next_float (genType const &x)
    template<typename genType >
    genType next_float (genType const &x, uint const &Distance)
    template<typename genType >
    genType prev_float (genType const &x)
    template<typename genType >
    genType prev_float (genType const &x, uint const &Distance)

    +Typedefs

    typedef detail::tvec4< highp_int > highp_ivec4
     
    typedef detail::tvec4< highp_uint > highp_uvec4
     
    typedef detail::tvec4
    +< highp_float > 
    highp_vec4
     
    typedef detail::tvec4< lowp_int > lowp_ivec4
     
    typedef detail::tvec4< lowp_uint > lowp_uvec4
     
    typedef detail::tvec4< lowp_float > lowp_vec4
     
    typedef detail::tvec4
    +< mediump_int > 
    mediump_ivec4
     
    typedef detail::tvec4
    +< mediump_uint > 
    mediump_uvec4
     
    typedef detail::tvec4
    +< mediump_float > 
    mediump_vec4
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_ulp: Accuracy measurement

    -
    Date:
    2011-02-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file ulp.hpp.

    -
    - +

    GLM Core

    +
    Date
    2008-08-22 / 2011-06-15
    +
    Author
    Christophe Riccio
    +

    Definition in file type_vec4.hpp.

    + + - diff --git a/doc/api/a00115_source.html b/doc/api/a00115_source.html index 0117748a..58997a2d 100644 --- a/doc/api/a00115_source.html +++ b/doc/api/a00115_source.html @@ -2,42 +2,31 @@ - -ulp.hpp Source File + +type_vec4.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,95 +35,346 @@
  • File List
  • + +
    -
    ulp.hpp
    -
    +
    type_vec4.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_GTX_ulp
    -00040 #define GLM_GTX_ulp GLM_VERSION
    -00041 
    -00042 // Dependency:
    -00043 #include "../glm.hpp"
    -00044 
    -00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00046 #       pragma message("GLM: GLM_GTX_ulp extension included")
    -00047 #endif
    -00048 
    -00049 namespace glm
    -00050 {
    -00053 
    -00056     template <typename genType>
    -00057     genType next_float(genType const & x);
    -00058         
    -00061     template <typename genType>
    -00062     genType prev_float(genType const & x);
    -00063 
    -00066     template <typename genType>
    -00067     genType next_float(genType const & x, uint const & Distance);
    -00068         
    -00071     template <typename genType>
    -00072     genType prev_float(genType const & x, uint const & Distance);
    -00073         
    -00076     template <typename T>
    -00077     uint float_distance(T const & x, T const & y);
    -00078         
    -00081     template<typename T, template<typename> class vecType>
    -00082     vecType<uint> float_distance(vecType<T> const & x, vecType<T> const & y);
    -00083         
    -00085 }// namespace glm
    -00086 
    -00087 #include "ulp.inl"
    -00088 
    -00089 #endif//GLM_GTX_ulp
    -00090 
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 #ifndef glm_core_type_gentype4
    +
    30 #define glm_core_type_gentype4
    +
    31 
    +
    32 #include "type_vec.hpp"
    +
    33 #include "type_float.hpp"
    +
    34 #include "type_int.hpp"
    +
    35 #include "type_size.hpp"
    +
    36 #include "_swizzle.hpp"
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41  template <typename T> struct tref2;
    +
    42  template <typename T> struct tref3;
    +
    43  template <typename T> struct tref4;
    +
    44  template <typename T> struct tvec2;
    +
    45  template <typename T> struct tvec3;
    +
    46 
    +
    47  template <typename T>
    +
    48  struct tvec4
    +
    49  {
    +
    50  enum ctor{null};
    +
    51 
    +
    52  typedef T value_type;
    +
    53  typedef std::size_t size_type;
    +
    54  typedef tvec4<T> type;
    +
    55  typedef tvec4<bool> bool_type;
    +
    56 
    +
    57  GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
    +
    58 
    +
    60  // Data
    +
    61 
    +
    62 # if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    +
    63  union
    +
    64  {
    +
    65 # if(defined(GLM_SWIZZLE))
    +
    66  _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z, w)
    +
    67  _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b, a)
    +
    68  _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p, q)
    +
    69  _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z, w)
    +
    70  _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b, a)
    +
    71  _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p, q)
    +
    72  _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z, w)
    +
    73  _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b, a)
    +
    74  _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p, q)
    +
    75 # endif//(defined(GLM_SWIZZLE))
    +
    76 
    +
    77  struct{value_type r, g, b, a;};
    +
    78  struct{value_type s, t, p, q;};
    +
    79  struct{value_type x, y, z, w;};
    +
    80  };
    +
    81 # elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    +
    82  union {value_type x, r, s;};
    +
    83  union {value_type y, g, t;};
    +
    84  union {value_type z, b, p;};
    +
    85  union {value_type w, a, q;};
    +
    86 
    +
    87 # if(defined(GLM_SWIZZLE))
    +
    88  // Defines all he swizzle operator as functions
    +
    89  GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4)
    +
    90  GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4)
    +
    91 # endif//(defined(GLM_SWIZZLE))
    +
    92 # else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    +
    93  value_type x, y, z, w;
    +
    94 
    +
    95 # if(defined(GLM_SWIZZLE))
    +
    96  // Defines all he swizzle operator as functions
    +
    97  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4, x, y, z, w)
    +
    98  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z, w)
    +
    99 # endif//(defined(GLM_SWIZZLE))
    +
    100 # endif//GLM_COMPONENT
    +
    101 
    +
    103  // Accesses
    +
    104 
    +
    105  GLM_FUNC_DECL value_type & operator[](size_type i);
    +
    106  GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    +
    107 
    +
    109  // Implicit basic constructors
    +
    110 
    +
    111  GLM_FUNC_DECL tvec4();
    +
    112  GLM_FUNC_DECL tvec4(type const & v);
    +
    113 
    +
    115  // Explicit basic constructors
    +
    116 
    +
    117  GLM_FUNC_DECL explicit tvec4(
    +
    118  ctor);
    +
    119  GLM_FUNC_DECL explicit tvec4(
    +
    120  value_type const & s);
    +
    121  GLM_FUNC_DECL explicit tvec4(
    +
    122  value_type const & s0,
    +
    123  value_type const & s1,
    +
    124  value_type const & s2,
    +
    125  value_type const & s3);
    +
    126 
    +
    128  // Convertion scalar constructors
    +
    129 
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL explicit tvec4(
    +
    133  U const & x);
    +
    135  template <typename A, typename B, typename C, typename D>
    +
    136  GLM_FUNC_DECL explicit tvec4(
    +
    137  A const & x,
    +
    138  B const & y,
    +
    139  C const & z,
    +
    140  D const & w);
    +
    141 
    +
    143  // Convertion vector constructors
    +
    144 
    +
    146  template <typename A, typename B, typename C>
    +
    147  GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
    +
    149  template <typename A, typename B, typename C>
    +
    150  GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
    +
    152  template <typename A, typename B, typename C>
    +
    153  GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
    +
    155  template <typename A, typename B>
    +
    156  GLM_FUNC_DECL explicit tvec4(tvec3<A> const & v, B const & s);
    +
    158  template <typename A, typename B>
    +
    159  GLM_FUNC_DECL explicit tvec4(A const & s, tvec3<B> const & v);
    +
    161  template <typename A, typename B>
    +
    162  GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
    +
    164  template <typename U>
    +
    165  GLM_FUNC_DECL explicit tvec4(tvec4<U> const & v);
    +
    166 
    +
    167  template <int E0, int E1, int E2, int E3>
    +
    168  GLM_FUNC_DECL tvec4(glm::detail::swizzle<4, T, tvec4<T>, E0, E1, E2, E3> const & that)
    +
    169  {
    +
    170  *this = that();
    +
    171  }
    +
    172 
    +
    173  template <int E0, int E1, int F0, int F1>
    +
    174  GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, glm::detail::swizzle<2, T, tvec2<T>, F0, F1, -1, -2> const & u)
    +
    175  {
    +
    176  *this = tvec4<T>(v(), u());
    +
    177  }
    +
    178 
    +
    179  template <int E0, int E1>
    +
    180  GLM_FUNC_DECL tvec4(T const & x, T const & y, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
    +
    181  {
    +
    182  *this = tvec4<T>(x, y, v());
    +
    183  }
    +
    184 
    +
    185  template <int E0, int E1>
    +
    186  GLM_FUNC_DECL tvec4(T const & x, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & w)
    +
    187  {
    +
    188  *this = tvec4<T>(x, v(), w);
    +
    189  }
    +
    190 
    +
    191  template <int E0, int E1>
    +
    192  GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & z, T const & w)
    +
    193  {
    +
    194  *this = tvec4<T>(v(), z, w);
    +
    195  }
    +
    196 
    +
    197  template <int E0, int E1, int E2>
    +
    198  GLM_FUNC_DECL tvec4(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & v, T const & w)
    +
    199  {
    +
    200  *this = tvec4<T>(v(), w);
    +
    201  }
    +
    202 
    +
    203  template <int E0, int E1, int E2>
    +
    204  GLM_FUNC_DECL tvec4(T const & x, glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & v)
    +
    205  {
    +
    206  *this = tvec4<T>(x, v());
    +
    207  }
    +
    208 
    +
    210  // Swizzle constructors
    +
    211 
    +
    212  GLM_FUNC_DECL tvec4(tref4<T> const & r);
    +
    213 
    +
    215  template <typename A, typename B, typename C>
    +
    216  GLM_FUNC_DECL explicit tvec4(tref2<A> const & v, B const & s1, C const & s2);
    +
    218  template <typename A, typename B, typename C>
    +
    219  GLM_FUNC_DECL explicit tvec4(A const & s1, tref2<B> const & v, C const & s2);
    +
    221  template <typename A, typename B, typename C>
    +
    222  GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tref2<C> const & v);
    +
    224  template <typename A, typename B>
    +
    225  GLM_FUNC_DECL explicit tvec4(tref3<A> const & v, B const & s);
    +
    227  template <typename A, typename B>
    +
    228  GLM_FUNC_DECL explicit tvec4(A const & s, tref3<B> const & v);
    +
    230  template <typename A, typename B>
    +
    231  GLM_FUNC_DECL explicit tvec4(tref2<A> const & v1, tref2<B> const & v2);
    +
    233  template <typename A, typename B>
    +
    234  GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tref2<B> const & v2);
    +
    236  template <typename A, typename B>
    +
    237  GLM_FUNC_DECL explicit tvec4(tref2<A> const & v1, tvec2<B> const & v2);
    +
    238 
    +
    240  // Unary arithmetic operators
    +
    241 
    +
    242  GLM_FUNC_DECL tvec4<T> & operator= (tvec4<T> const & v);
    +
    243  template <typename U>
    +
    244  GLM_FUNC_DECL tvec4<T> & operator= (tvec4<U> const & v);
    +
    245 
    +
    246  template <typename U>
    +
    247  GLM_FUNC_DECL tvec4<T> & operator+=(U const & s);
    +
    248  template <typename U>
    +
    249  GLM_FUNC_DECL tvec4<T> & operator+=(tvec4<U> const & v);
    +
    250  template <typename U>
    +
    251  GLM_FUNC_DECL tvec4<T> & operator-=(U const & s);
    +
    252  template <typename U>
    +
    253  GLM_FUNC_DECL tvec4<T> & operator-=(tvec4<U> const & v);
    +
    254  template <typename U>
    +
    255  GLM_FUNC_DECL tvec4<T> & operator*=(U const & s);
    +
    256  template <typename U>
    +
    257  GLM_FUNC_DECL tvec4<T> & operator*=(tvec4<U> const & v);
    +
    258  template <typename U>
    +
    259  GLM_FUNC_DECL tvec4<T> & operator/=(U const & s);
    +
    260  template <typename U>
    +
    261  GLM_FUNC_DECL tvec4<T> & operator/=(tvec4<U> const & v);
    +
    262  GLM_FUNC_DECL tvec4<T> & operator++();
    +
    263  GLM_FUNC_DECL tvec4<T> & operator--();
    +
    264 
    +
    266  // Unary bit operators
    +
    267 
    +
    268  template <typename U>
    +
    269  GLM_FUNC_DECL tvec4<T> & operator%= (U const & s);
    +
    270  template <typename U>
    +
    271  GLM_FUNC_DECL tvec4<T> & operator%= (tvec4<U> const & v);
    +
    272  template <typename U>
    +
    273  GLM_FUNC_DECL tvec4<T> & operator&= (U const & s);
    +
    274  template <typename U>
    +
    275  GLM_FUNC_DECL tvec4<T> & operator&= (tvec4<U> const & v);
    +
    276  template <typename U>
    +
    277  GLM_FUNC_DECL tvec4<T> & operator|= (U const & s);
    +
    278  template <typename U>
    +
    279  GLM_FUNC_DECL tvec4<T> & operator|= (tvec4<U> const & v);
    +
    280  template <typename U>
    +
    281  GLM_FUNC_DECL tvec4<T> & operator^= (U const & s);
    +
    282  template <typename U>
    +
    283  GLM_FUNC_DECL tvec4<T> & operator^= (tvec4<U> const & v);
    +
    284  template <typename U>
    +
    285  GLM_FUNC_DECL tvec4<T> & operator<<=(U const & s);
    +
    286  template <typename U>
    +
    287  GLM_FUNC_DECL tvec4<T> & operator<<=(tvec4<U> const & v);
    +
    288  template <typename U>
    +
    289  GLM_FUNC_DECL tvec4<T> & operator>>=(U const & s);
    +
    290  template <typename U>
    +
    291  GLM_FUNC_DECL tvec4<T> & operator>>=(tvec4<U> const & v);
    +
    292 
    +
    294  // Swizzle operators
    +
    295 
    +
    296  GLM_FUNC_DECL value_type swizzle(comp X) const;
    +
    297  GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    +
    298  GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    +
    299  GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    +
    300  GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
    +
    301  GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
    +
    302  GLM_FUNC_DECL tref4<T> swizzle(comp X, comp Y, comp Z, comp W);
    +
    303  };
    +
    304 
    +
    305  template <typename T>
    +
    306  struct tref4
    +
    307  {
    +
    308  GLM_FUNC_DECL tref4(T & x, T & y, T & z, T & w);
    +
    309  GLM_FUNC_DECL tref4(tref4<T> const & r);
    +
    310  GLM_FUNC_DECL explicit tref4(tvec4<T> const & v);
    +
    311 
    +
    312  GLM_FUNC_DECL tref4<T> & operator= (tref4<T> const & r);
    +
    313  GLM_FUNC_DECL tref4<T> & operator= (tvec4<T> const & v);
    +
    314 
    +
    315  GLM_FUNC_DECL tvec4<T> operator() ();
    +
    316 
    +
    317  T & x;
    +
    318  T & y;
    +
    319  T & z;
    +
    320  T & w;
    +
    321  };
    +
    322 
    +
    323  GLM_DETAIL_IS_VECTOR(tvec4);
    +
    324 }//namespace detail
    +
    325 
    +
    328 
    +
    334  typedef detail::tvec4<highp_float> highp_vec4;
    +
    335 
    +
    341  typedef detail::tvec4<mediump_float> mediump_vec4;
    +
    342 
    +
    348  typedef detail::tvec4<lowp_float> lowp_vec4;
    +
    349 
    +
    355  typedef detail::tvec4<highp_int> highp_ivec4;
    +
    356 
    +
    362  typedef detail::tvec4<mediump_int> mediump_ivec4;
    +
    363 
    +
    369  typedef detail::tvec4<lowp_int> lowp_ivec4;
    +
    370 
    +
    376  typedef detail::tvec4<highp_uint> highp_uvec4;
    +
    377 
    +
    383  typedef detail::tvec4<mediump_uint> mediump_uvec4;
    +
    384 
    +
    390  typedef detail::tvec4<lowp_uint> lowp_uvec4;
    +
    391 
    +
    393 }//namespace glm
    +
    394 
    +
    395 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    396 #include "type_vec4.inl"
    +
    397 #endif//GLM_EXTERNAL_TEMPLATE
    +
    398 
    +
    399 #endif//glm_core_type_gentype4
    +
    + - diff --git a/doc/api/a00116.html b/doc/api/a00116.html new file mode 100644 index 00000000..01537cba --- /dev/null +++ b/doc/api/a00116.html @@ -0,0 +1,93 @@ + + + + + +ulp.hpp File Reference + + + + + + +
    +
    + + + + + + +
    +
    + + + + + +
    +
    + +
    +
    gtc/ulp.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    uint float_distance (T const &x, T const &y)
     
    template<typename T , template< typename > class vecType>
    vecType< uint > float_distance (vecType< T > const &x, vecType< T > const &y)
     
    template<typename genType >
    genType next_float (genType const &x)
     
    template<typename genType >
    genType next_float (genType const &x, uint const &Distance)
     
    template<typename genType >
    genType prev_float (genType const &x)
     
    template<typename genType >
    genType prev_float (genType const &x, uint const &Distance)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTC_ulp

    +
    Date
    2011-02-21 / 2011-12-12
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    + +

    Definition in file gtc/ulp.hpp.

    +
    + + + + diff --git a/doc/api/a00116_source.html b/doc/api/a00116_source.html index f88ca31a..e1751cae 100644 --- a/doc/api/a00116_source.html +++ b/doc/api/a00116_source.html @@ -2,42 +2,31 @@ - -unsigned_int.hpp Source File + +ulp.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,46 +35,97 @@
  • File List
  • + +
    -
    unsigned_int.hpp
    -
    +
    gtc/ulp.hpp
    +
    -
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 #if(defined(GLM_MESSAGES))
    -00025 #       pragma message("GLM: GLM_GTX_unsigned_int extension is deprecated, include GLM_GTX_integer instead")
    -00026 #endif
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_GTC_ulp
    +
    40 #define GLM_GTC_ulp GLM_VERSION
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    46 # pragma message("GLM: GLM_GTC_ulp extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename genType>
    +
    57  genType next_float(genType const & x);
    +
    58 
    +
    61  template <typename genType>
    +
    62  genType prev_float(genType const & x);
    +
    63 
    +
    66  template <typename genType>
    +
    67  genType next_float(genType const & x, uint const & Distance);
    +
    68 
    +
    71  template <typename genType>
    +
    72  genType prev_float(genType const & x, uint const & Distance);
    +
    73 
    +
    76  template <typename T>
    +
    77  uint float_distance(T const & x, T const & y);
    +
    78 
    +
    81  template<typename T, template<typename> class vecType>
    +
    82  vecType<uint> float_distance(vecType<T> const & x, vecType<T> const & y);
    +
    83 
    +
    85 }// namespace glm
    +
    86 
    +
    87 #include "ulp.inl"
    +
    88 
    +
    89 #endif//GLM_GTC_ulp
    +
    90 
    +
    + - diff --git a/doc/api/a00117.html b/doc/api/a00117.html deleted file mode 100644 index 8bd767c8..00000000 --- a/doc/api/a00117.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - -vec1.hpp File Reference - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -
    -
    vec1.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - -

    -Typedefs

    typedef detail::tvec1< bool > bvec1
    typedef detail::highp_ivec1_t highp_ivec1
    typedef detail::highp_uvec1_t highp_uvec1
    typedef detail::highp_vec1_t highp_vec1
    typedef mediump_ivec1 ivec1
    typedef detail::lowp_ivec1_t lowp_ivec1
    typedef detail::lowp_uvec1_t lowp_uvec1
    typedef detail::lowp_vec1_t lowp_vec1
    typedef detail::mediump_ivec1_t mediump_ivec1
    typedef detail::mediump_uvec1_t mediump_uvec1
    typedef detail::mediump_vec1_t mediump_vec1
    typedef mediump_uvec1 uvec1
    typedef mediump_vec1 vec1
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_vec1: Add vec1 types

    -
    Date:
    2010-02-08 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file vec1.hpp.

    -
    - - - - - - diff --git a/doc/api/a00117_source.html b/doc/api/a00117_source.html index 7c71c299..5aa65b1c 100644 --- a/doc/api/a00117_source.html +++ b/doc/api/a00117_source.html @@ -2,42 +2,31 @@ - -vec1.hpp Source File + +ulp.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,127 +35,51 @@
  • File List
  • + +
    -
    vec1.hpp
    -
    +
    gtx/ulp.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 #ifndef GLM_GTX_vec1
    -00038 #define GLM_GTX_vec1 GLM_VERSION
    -00039 
    -00040 // Dependency:
    -00041 #include "../glm.hpp"
    -00042 #include "../core/type_vec1.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_vec1 extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00053         typedef detail::highp_vec1_t                    highp_vec1;
    -00057         typedef detail::mediump_vec1_t                  mediump_vec1;
    -00061         typedef detail::lowp_vec1_t                             lowp_vec1;
    -00062 
    -00066         typedef detail::highp_ivec1_t                   highp_ivec1;
    -00070         typedef detail::mediump_ivec1_t                 mediump_ivec1;
    -00074         typedef detail::lowp_ivec1_t                    lowp_ivec1;
    -00075 
    -00079         typedef detail::highp_uvec1_t                   highp_uvec1;
    -00083         typedef detail::mediump_uvec1_t                 mediump_uvec1;
    -00087         typedef detail::lowp_uvec1_t                    lowp_uvec1;
    -00088 
    -00090         // vec1 definition
    -00091 
    -00094         typedef detail::tvec1<bool>     bvec1;
    -00095 
    -00096 #if(defined(GLM_PRECISION_HIGHP_FLOAT))
    -00097         typedef highp_vec1                      vec1;
    -00098 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    -00099         typedef mediump_vec1                    vec1;
    -00100 #elif(defined(GLM_PRECISION_LOWP_FLOAT))
    -00101         typedef lowp_vec1                       vec1;
    -00102 #else
    -00103 
    -00104 
    -00105         typedef mediump_vec1                    vec1;
    -00106 #endif//GLM_PRECISION
    -00107 
    -00108 #if(defined(GLM_PRECISION_HIGHP_INT))
    -00109         typedef highp_ivec1                     ivec1;
    -00110 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -00111         typedef mediump_ivec1           ivec1;
    -00112 #elif(defined(GLM_PRECISION_LOWP_INT))
    -00113         typedef lowp_ivec1                      ivec1;
    -00114 #else
    -00115 
    -00116 
    -00117         typedef mediump_ivec1           ivec1;
    -00118 #endif//GLM_PRECISION
    -00119 
    -00120 #if(defined(GLM_PRECISION_HIGHP_UINT))
    -00121         typedef highp_uvec1                     uvec1;
    -00122 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    -00123         typedef mediump_uvec1           uvec1;
    -00124 #elif(defined(GLM_PRECISION_LOWP_UINT))
    -00125         typedef lowp_uvec1                      uvec1;
    -00126 #else
    -00127 
    -00128 
    -00129         typedef mediump_uvec1           uvec1;
    -00130 #endif//GLM_PRECISION
    -00131 
    -00132 }// namespace glm
    -00133 
    -00134 #include "vec1.inl"
    -00135 
    -00136 #endif//GLM_GTX_vec1
    -00137 
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 #if(defined(GLM_MESSAGES))
    +
    25 # pragma message("GLM: GLM_GTX_ulp extension is deprecated, include GLM_GTC_ulp (glm/gtc/ulp.hpp) instead")
    +
    26 #endif
    +
    27 
    +
    28 // Promoted:
    +
    29 #include "../gtc/ulp.hpp"
    +
    + - diff --git a/doc/api/a00118.html b/doc/api/a00118.html deleted file mode 100644 index ebdb34fa..00000000 --- a/doc/api/a00118.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - -vector_access.hpp File Reference - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -
    -
    vector_access.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - - - - - -

    -Functions

    template<typename valType >
    void set (detail::tvec2< valType > &v, valType const &x, valType const &y)
    template<typename valType >
    void set (detail::tvec3< valType > &v, valType const &x, valType const &y, valType const &z)
    template<typename valType >
    void set (detail::tvec4< valType > &v, valType const &x, valType const &y, valType const &z, valType const &w)
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_vector_access: Vector access

    -
    Date:
    2006-01-16 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file vector_access.hpp.

    -
    - - - - - - diff --git a/doc/api/a00118_source.html b/doc/api/a00118_source.html index 12dbcc4a..7cdd44cb 100644 --- a/doc/api/a00118_source.html +++ b/doc/api/a00118_source.html @@ -2,42 +2,31 @@ - -vector_access.hpp Source File + +unsigned_int.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,96 +35,48 @@
  • File List
  • + +
    -
    vector_access.hpp
    -
    +
    unsigned_int.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_vector_access
    -00039 #define GLM_GTX_vector_access GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_vector_access extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055     template <typename valType> 
    -00056         void set(
    -00057                 detail::tvec2<valType> & v, 
    -00058                 valType const & x, 
    -00059                 valType const & y);
    -00060 
    -00063     template <typename valType> 
    -00064         void set(
    -00065                 detail::tvec3<valType> & v, 
    -00066                 valType const & x, 
    -00067                 valType const & y, 
    -00068                 valType const & z);
    -00069 
    -00072     template <typename valType> 
    -00073         void set(
    -00074                 detail::tvec4<valType> & v, 
    -00075                 valType const & x, 
    -00076                 valType const & y, 
    -00077                 valType const & z, 
    -00078                 valType const & w);
    -00079 
    -00081 }//namespace glm
    -00082 
    -00083 #include "vector_access.inl"
    -00084 
    -00085 #endif//GLM_GTX_vector_access
    -
    - - - +
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 #if(defined(GLM_MESSAGES))
    +
    25 # pragma message("GLM: GLM_GTX_unsigned_int extension is deprecated, include GLM_GTX_integer instead")
    +
    26 #endif
    +
    + - diff --git a/doc/api/a00119.html b/doc/api/a00119.html index 42c6f8ec..1b346d00 100644 --- a/doc/api/a00119.html +++ b/doc/api/a00119.html @@ -2,42 +2,31 @@ - -vector_angle.hpp File Reference + +vec1.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,50 +35,67 @@
  • File List
  • + +
    +Typedefs
    -
    vector_angle.hpp File Reference
    - +
    vec1.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    template<typename vecType >
    GLM_FUNC_QUALIFIER
    -vecType::value_type 
    angle (vecType const &x, vecType const &y)
    template<typename T >
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec2< T > const &x, detail::tvec2< T > const &y)
    template<typename T >
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec3< T > const &x, detail::tvec3< T > const &y, detail::tvec3< T > const &ref)

    +Typedefs

    typedef detail::tvec1< bool > bvec1
     
    typedef detail::highp_ivec1_t highp_ivec1
     
    typedef detail::highp_uvec1_t highp_uvec1
     
    typedef detail::highp_vec1_t highp_vec1
     
    typedef mediump_ivec1 ivec1
     
    typedef detail::lowp_ivec1_t lowp_ivec1
     
    typedef detail::lowp_uvec1_t lowp_uvec1
     
    typedef detail::lowp_vec1_t lowp_vec1
     
    typedef detail::mediump_ivec1_t mediump_ivec1
     
    typedef detail::mediump_uvec1_t mediump_uvec1
     
    typedef detail::mediump_vec1_t mediump_vec1
     
    typedef mediump_uvec1 uvec1
     
    typedef mediump_vec1 vec1
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_vector_angle: Vector angle

    -
    Date:
    2005-12-30 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTX_quaternion: Extented quaternion types and functions (dependence)
    -
    -GLM_GTX_epsilon: Epsilon comparison (dependence)
    - -

    Definition in file vector_angle.hpp.

    -
    - +

    GLM_GTX_vec1

    +
    Date
    2010-02-08 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file vec1.hpp.

    + + - diff --git a/doc/api/a00119_source.html b/doc/api/a00119_source.html index 649cca45..554b7772 100644 --- a/doc/api/a00119_source.html +++ b/doc/api/a00119_source.html @@ -2,42 +2,31 @@ - -vector_angle.hpp Source File + +vec1.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,96 +35,129 @@
  • File List
  • + +
    -
    vector_angle.hpp
    -
    +
    vec1.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 
    -00040 #ifndef GLM_GTX_vector_angle
    -00041 #define GLM_GTX_vector_angle GLM_VERSION
    -00042 
    -00043 // Dependency:
    -00044 #include "../glm.hpp"
    -00045 #include "../gtx/epsilon.hpp"
    -00046 #include "../gtx/quaternion.hpp"
    -00047 #include "../gtx/rotate_vector.hpp"
    -00048 
    -00049 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00050 #       pragma message("GLM: GLM_GTX_vector_angle extension included")
    -00051 #endif
    -00052 
    -00053 namespace glm
    -00054 {
    -00057 
    -00061         template <typename vecType> 
    -00062         GLM_FUNC_QUALIFIER typename vecType::value_type angle(
    -00063                 vecType const & x, 
    -00064                 vecType const & y);
    -00065 
    -00069         template <typename T> 
    -00070         GLM_FUNC_QUALIFIER T orientedAngle(
    -00071                 detail::tvec2<T> const & x, 
    -00072                 detail::tvec2<T> const & y);
    -00073 
    -00077         template <typename T>
    -00078         GLM_FUNC_QUALIFIER T orientedAngle(
    -00079                 detail::tvec3<T> const & x,
    -00080                 detail::tvec3<T> const & y,
    -00081                 detail::tvec3<T> const & ref);
    -00082 
    -00084 }// namespace glm
    -00085 
    -00086 #include "vector_angle.inl"
    -00087 
    -00088 #endif//GLM_GTX_vector_angle
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 #ifndef GLM_GTX_vec1
    +
    38 #define GLM_GTX_vec1 GLM_VERSION
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 #include "../core/type_vec1.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_vec1 extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    53  typedef detail::highp_vec1_t highp_vec1;
    +
    57  typedef detail::mediump_vec1_t mediump_vec1;
    +
    61  typedef detail::lowp_vec1_t lowp_vec1;
    +
    62 
    +
    66  typedef detail::highp_ivec1_t highp_ivec1;
    +
    70  typedef detail::mediump_ivec1_t mediump_ivec1;
    +
    74  typedef detail::lowp_ivec1_t lowp_ivec1;
    +
    75 
    +
    79  typedef detail::highp_uvec1_t highp_uvec1;
    +
    83  typedef detail::mediump_uvec1_t mediump_uvec1;
    +
    87  typedef detail::lowp_uvec1_t lowp_uvec1;
    +
    88 
    +
    90  // vec1 definition
    +
    91 
    +
    94  typedef detail::tvec1<bool> bvec1;
    +
    95 
    +
    96 #if(defined(GLM_PRECISION_HIGHP_FLOAT))
    +
    97  typedef highp_vec1 vec1;
    +
    98 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    +
    99  typedef mediump_vec1 vec1;
    +
    100 #elif(defined(GLM_PRECISION_LOWP_FLOAT))
    +
    101  typedef lowp_vec1 vec1;
    +
    102 #else
    +
    103 
    +
    104 
    +
    105  typedef mediump_vec1 vec1;
    +
    106 #endif//GLM_PRECISION
    +
    107 
    +
    108 #if(defined(GLM_PRECISION_HIGHP_INT))
    +
    109  typedef highp_ivec1 ivec1;
    +
    110 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    111  typedef mediump_ivec1 ivec1;
    +
    112 #elif(defined(GLM_PRECISION_LOWP_INT))
    +
    113  typedef lowp_ivec1 ivec1;
    +
    114 #else
    +
    115 
    +
    116 
    +
    117  typedef mediump_ivec1 ivec1;
    +
    118 #endif//GLM_PRECISION
    +
    119 
    +
    120 #if(defined(GLM_PRECISION_HIGHP_UINT))
    +
    121  typedef highp_uvec1 uvec1;
    +
    122 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    +
    123  typedef mediump_uvec1 uvec1;
    +
    124 #elif(defined(GLM_PRECISION_LOWP_UINT))
    +
    125  typedef lowp_uvec1 uvec1;
    +
    126 #else
    +
    127 
    +
    128 
    +
    129  typedef mediump_uvec1 uvec1;
    +
    130 #endif//GLM_PRECISION
    +
    131 
    +
    132 }// namespace glm
    +
    133 
    +
    134 #include "vec1.inl"
    +
    135 
    +
    136 #endif//GLM_GTX_vec1
    +
    137 
    +
    + - diff --git a/doc/api/a00120.html b/doc/api/a00120.html index db4eb52b..716f0967 100644 --- a/doc/api/a00120.html +++ b/doc/api/a00120.html @@ -2,42 +2,31 @@ - -vector_query.hpp File Reference + +vector_access.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,53 +35,50 @@
  • File List
  • + +
    -
    vector_query.hpp File Reference
    -
    +
    vector_access.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - - - - - + + + + + + + + +

    +

    Functions

    template<typename genType >
    bool areCollinear (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
    template<typename genType >
    bool areOrthogonal (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
    template<typename genType >
    bool areOrthonormal (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
    template<typename genType , template< typename > class vecType>
    bool isNormalized (vecType< genType > const &v, genType const &epsilon)
    template<typename valType >
    bool isNull (detail::tvec2< valType > const &v, valType const &epsilon)
    template<typename valType >
    bool isNull (detail::tvec3< valType > const &v, valType const &epsilon)
    template<typename valType >
    bool isNull (detail::tvec4< valType > const &v, valType const &epsilon)
    template<typename valType >
    void set (detail::tvec2< valType > &v, valType const &x, valType const &y)
     
    template<typename valType >
    void set (detail::tvec3< valType > &v, valType const &x, valType const &y, valType const &z)
     
    template<typename valType >
    void set (detail::tvec4< valType > &v, valType const &x, valType const &y, valType const &z, valType const &w)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_vector_query: Vector query

    -
    Date:
    2008-03-10 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file vector_query.hpp.

    -
    - +

    GLM_GTX_vector_access

    +
    Date
    2006-01-16 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file vector_access.hpp.

    + + - diff --git a/doc/api/a00120_source.html b/doc/api/a00120_source.html index 4ef19a40..3cbca782 100644 --- a/doc/api/a00120_source.html +++ b/doc/api/a00120_source.html @@ -2,42 +2,31 @@ - -vector_query.hpp Source File + +vector_access.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,115 +35,98 @@
  • File List
  • + +
    -
    vector_query.hpp
    -
    +
    vector_access.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_vector_query
    -00039 #define GLM_GTX_vector_query GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 #include <cfloat>
    -00044 #include <limits>
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_GTX_vector_query extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00054 
    -00057         template <typename genType> 
    -00058         bool areCollinear(
    -00059                 genType const & v0, 
    -00060                 genType const & v1, 
    -00061                 typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    -00062                 
    -00065         template <typename genType> 
    -00066         bool areOrthogonal(
    -00067                 genType const & v0, 
    -00068                 genType const & v1, 
    -00069                 typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    -00070 
    -00073         template <typename genType, template <typename> class vecType> 
    -00074         bool isNormalized(
    -00075                 vecType<genType> const & v, 
    -00076                 genType const & epsilon/* = std::numeric_limits<genType>::epsilon()*/);
    -00077                 
    -00080         template <typename valType> 
    -00081         bool isNull(
    -00082                 detail::tvec2<valType> const & v, 
    -00083                 valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    -00084 
    -00087         template <typename valType> 
    -00088         bool isNull(
    -00089                 detail::tvec3<valType> const & v, 
    -00090                 valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    -00091 
    -00094         template <typename valType> 
    -00095         bool isNull(
    -00096                 detail::tvec4<valType> const & v, 
    -00097                 valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    -00098 
    -00101         template <typename genType>
    -00102         bool areOrthonormal(
    -00103                 genType const & v0, 
    -00104                 genType const & v1, 
    -00105                 typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    -00106 
    -00108 }// namespace glm
    -00109 
    -00110 #include "vector_query.inl"
    -00111 
    -00112 #endif//GLM_GTX_vector_query
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_vector_access
    +
    39 #define GLM_GTX_vector_access GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_vector_access extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename valType>
    +
    56  void set(
    +
    57  detail::tvec2<valType> & v,
    +
    58  valType const & x,
    +
    59  valType const & y);
    +
    60 
    +
    63  template <typename valType>
    +
    64  void set(
    +
    65  detail::tvec3<valType> & v,
    +
    66  valType const & x,
    +
    67  valType const & y,
    +
    68  valType const & z);
    +
    69 
    +
    72  template <typename valType>
    +
    73  void set(
    +
    74  detail::tvec4<valType> & v,
    +
    75  valType const & x,
    +
    76  valType const & y,
    +
    77  valType const & z,
    +
    78  valType const & w);
    +
    79 
    +
    81 }//namespace glm
    +
    82 
    +
    83 #include "vector_access.inl"
    +
    84 
    +
    85 #endif//GLM_GTX_vector_access
    +
    + - diff --git a/doc/api/a00121.html b/doc/api/a00121.html index 8bb74116..629c30c7 100644 --- a/doc/api/a00121.html +++ b/doc/api/a00121.html @@ -2,42 +2,31 @@ - -verbose_operator.hpp File Reference + +vector_angle.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,49 +35,55 @@
  • File List
  • + +
    -
    verbose_operator.hpp File Reference
    -
    +
    vector_angle.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - - - - - + + + + + + + + +

    +

    Functions

    template<typename genTypeT , typename genTypeU >
    genTypeT add (genTypeT const &a, genTypeU const &b)
    template<typename genTypeT , typename genTypeU >
    genTypeT div (genTypeT const &a, genTypeU const &b)
    template<typename genTypeT , typename genTypeU , typename genTypeV >
    genTypeT mad (genTypeT const &a, genTypeU const &b, genTypeV const &c)
    template<typename genTypeT , typename genTypeU >
    genTypeT mul (genTypeT const &a, genTypeU const &b)
    template<typename genTypeT , typename genTypeU >
    genTypeT sub (genTypeT const &a, genTypeU const &b)
    template<typename vecType >
    GLM_FUNC_QUALIFIER
    +vecType::value_type 
    angle (vecType const &x, vecType const &y)
     
    template<typename T >
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec2< T > const &x, detail::tvec2< T > const &y)
     
    template<typename T >
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec3< T > const &x, detail::tvec3< T > const &y, detail::tvec3< T > const &ref)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_verbose_operator: Verbose operator

    -
    Date:
    2007-05-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file verbose_operator.hpp.

    -
    - +

    GLM_GTX_vector_angle

    +
    Date
    2005-12-30 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTX_quaternion (dependence)
    +
    +gtx_epsilon (dependence)
    +

    Definition in file vector_angle.hpp.

    + + - diff --git a/doc/api/a00121_source.html b/doc/api/a00121_source.html index 529f5994..c21a18b1 100644 --- a/doc/api/a00121_source.html +++ b/doc/api/a00121_source.html @@ -2,42 +2,31 @@ - -verbose_operator.hpp Source File + +vector_angle.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,90 +35,98 @@
  • File List
  • + +
    -
    verbose_operator.hpp
    -
    +
    vector_angle.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_verbose_operator
    -00039 #define GLM_GTX_verbose_operator GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_verbose_operator extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename genTypeT, typename genTypeU> 
    -00056         genTypeT add(genTypeT const & a, genTypeU const & b);
    -00057 
    -00060         template <typename genTypeT, typename genTypeU> 
    -00061         genTypeT sub(genTypeT const & a, genTypeU const & b);
    -00062 
    -00065         template <typename genTypeT, typename genTypeU> 
    -00066         genTypeT mul(genTypeT const & a, genTypeU const & b);
    -00067 
    -00070         template <typename genTypeT, typename genTypeU> 
    -00071         genTypeT div(genTypeT const & a, genTypeU const & b);
    -00072 
    -00075         template <typename genTypeT, typename genTypeU, typename genTypeV> 
    -00076         genTypeT mad(genTypeT const & a, genTypeU const & b, genTypeV const & c);
    -00077 
    -00079 }// namespace glm
    -00080 
    -00081 #include "verbose_operator.inl"
    -00082 
    -00083 #endif//GLM_GTX_verbose_operator
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 
    +
    40 #ifndef GLM_GTX_vector_angle
    +
    41 #define GLM_GTX_vector_angle GLM_VERSION
    +
    42 
    +
    43 // Dependency:
    +
    44 #include "../glm.hpp"
    +
    45 #include "../gtc/epsilon.hpp"
    +
    46 #include "../gtx/quaternion.hpp"
    +
    47 #include "../gtx/rotate_vector.hpp"
    +
    48 
    +
    49 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    50 # pragma message("GLM: GLM_GTX_vector_angle extension included")
    +
    51 #endif
    +
    52 
    +
    53 namespace glm
    +
    54 {
    +
    57 
    +
    61  template <typename vecType>
    +
    62  GLM_FUNC_QUALIFIER typename vecType::value_type angle(
    +
    63  vecType const & x,
    +
    64  vecType const & y);
    +
    65 
    +
    69  template <typename T>
    +
    70  GLM_FUNC_QUALIFIER T orientedAngle(
    +
    71  detail::tvec2<T> const & x,
    +
    72  detail::tvec2<T> const & y);
    +
    73 
    +
    77  template <typename T>
    +
    78  GLM_FUNC_QUALIFIER T orientedAngle(
    +
    79  detail::tvec3<T> const & x,
    +
    80  detail::tvec3<T> const & y,
    +
    81  detail::tvec3<T> const & ref);
    +
    82 
    +
    84 }// namespace glm
    +
    85 
    +
    86 #include "vector_angle.inl"
    +
    87 
    +
    88 #endif//GLM_GTX_vector_angle
    +
    + - diff --git a/doc/api/a00122.html b/doc/api/a00122.html index b246cc6f..a76f370d 100644 --- a/doc/api/a00122.html +++ b/doc/api/a00122.html @@ -2,42 +2,31 @@ - -wrap.hpp File Reference + +vector_query.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,45 +35,62 @@
  • File List
  • + +
    -
    wrap.hpp File Reference
    -
    +
    vector_query.hpp File Reference
    +

    Go to the source code of this file.

    - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType clamp (genType const &Texcoord)
    template<typename genType >
    genType mirrorRepeat (genType const &Texcoord)
    template<typename genType >
    genType repeat (genType const &Texcoord)
    template<typename genType >
    bool areCollinear (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
     
    template<typename genType >
    bool areOrthogonal (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
     
    template<typename genType >
    bool areOrthonormal (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
     
    template<typename genType , template< typename > class vecType>
    bool isNormalized (vecType< genType > const &v, genType const &epsilon)
     
    template<typename valType >
    bool isNull (detail::tvec2< valType > const &v, valType const &epsilon)
     
    template<typename valType >
    bool isNull (detail::tvec3< valType > const &v, valType const &epsilon)
     
    template<typename valType >
    bool isNull (detail::tvec4< valType > const &v, valType const &epsilon)
     
    -

    Detailed Description

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_wrap: Texture coordinate wrap modes

    -
    Date:
    2009-11-25 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file wrap.hpp.

    -
    - +

    GLM_GTX_vector_query

    +
    Date
    2008-03-10 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file vector_query.hpp.

    + + - diff --git a/doc/api/a00122_source.html b/doc/api/a00122_source.html index 284d5712..d3c2276a 100644 --- a/doc/api/a00122_source.html +++ b/doc/api/a00122_source.html @@ -2,42 +2,31 @@ - -wrap.hpp Source File + +vector_query.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,84 +35,117 @@
  • File List
  • + +
    -
    wrap.hpp
    -
    +
    vector_query.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 #ifndef GLM_GTX_wrap
    -00039 #define GLM_GTX_wrap GLM_VERSION
    -00040 
    -00041 // Dependency:
    -00042 #include "../glm.hpp"
    -00043 
    -00044 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00045 #       pragma message("GLM: GLM_GTX_wrap extension included")
    -00046 #endif
    -00047 
    -00048 namespace glm
    -00049 {
    -00052 
    -00055         template <typename genType> 
    -00056         genType clamp(genType const & Texcoord);
    -00057 
    -00060         template <typename genType> 
    -00061         genType repeat(genType const & Texcoord);
    -00062 
    -00065         template <typename genType> 
    -00066         genType mirrorRepeat(genType const & Texcoord);
    -00067 
    -00069 }// namespace glm
    -00070 
    -00071 #include "wrap.inl"
    -00072 
    -00073 #endif//GLM_GTX_wrap
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_vector_query
    +
    39 #define GLM_GTX_vector_query GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include <cfloat>
    +
    44 #include <limits>
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_GTX_vector_query extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template <typename genType>
    +
    58  bool areCollinear(
    +
    59  genType const & v0,
    +
    60  genType const & v1,
    +
    61  typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    +
    62 
    +
    65  template <typename genType>
    +
    66  bool areOrthogonal(
    +
    67  genType const & v0,
    +
    68  genType const & v1,
    +
    69  typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    +
    70 
    +
    73  template <typename genType, template <typename> class vecType>
    +
    74  bool isNormalized(
    +
    75  vecType<genType> const & v,
    +
    76  genType const & epsilon/* = std::numeric_limits<genType>::epsilon()*/);
    +
    77 
    +
    80  template <typename valType>
    +
    81  bool isNull(
    +
    82  detail::tvec2<valType> const & v,
    +
    83  valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    +
    84 
    +
    87  template <typename valType>
    +
    88  bool isNull(
    +
    89  detail::tvec3<valType> const & v,
    +
    90  valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    +
    91 
    +
    94  template <typename valType>
    +
    95  bool isNull(
    +
    96  detail::tvec4<valType> const & v,
    +
    97  valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    +
    98 
    +
    101  template <typename genType>
    +
    102  bool areOrthonormal(
    +
    103  genType const & v0,
    +
    104  genType const & v1,
    +
    105  typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
    +
    106 
    +
    108 }// namespace glm
    +
    109 
    +
    110 #include "vector_query.inl"
    +
    111 
    +
    112 #endif//GLM_GTX_vector_query
    +
    + - diff --git a/doc/api/a00123.html b/doc/api/a00123.html index 63b90a9f..b0e8e527 100644 --- a/doc/api/a00123.html +++ b/doc/api/a00123.html @@ -2,42 +2,31 @@ - -xstream.hpp File Reference + +verbose_operator.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,35 +35,56 @@
  • File List
  • + +
    +
    -
    xstream.hpp File Reference
    -
    +
    verbose_operator.hpp File Reference
    +

    Go to the source code of this file.

    -

    Detailed Description

    + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genTypeT , typename genTypeU >
    genTypeT add (genTypeT const &a, genTypeU const &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT div (genTypeT const &a, genTypeU const &b)
     
    template<typename genTypeT , typename genTypeU , typename genTypeV >
    genTypeT mad (genTypeT const &a, genTypeU const &b, genTypeV const &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT mul (genTypeT const &a, genTypeU const &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT sub (genTypeT const &a, genTypeU const &b)
     
    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_VIRTREV_xstream: xml like output

    -
    Date:
    2008-05-24 / 2008-05-26
    -
    Author:
    Mathieu Roumillac (matrem84.free.fr)
    -
    See also:
    GLM Core (dependence)
    -
    -GLM_GTC_matrix_access: Access matrix rows and columns (dependence)
    - -

    Definition in file xstream.hpp.

    -
    - +

    GLM_GTX_verbose_operator

    +
    Date
    2007-05-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    +

    Definition in file verbose_operator.hpp.

    + + - diff --git a/doc/api/a00123_source.html b/doc/api/a00123_source.html index 24421890..9f2f9c6f 100644 --- a/doc/api/a00123_source.html +++ b/doc/api/a00123_source.html @@ -2,42 +2,31 @@ - -xstream.hpp Source File + +verbose_operator.hpp Source File + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,184 +35,92 @@
  • File List
  • + +
    -
    xstream.hpp
    -
    +
    verbose_operator.hpp
    +
    -Go to the documentation of this file.
    00001 
    -00002 
    -00003 
    -00004 
    -00005 
    -00006 
    -00007 
    -00008 
    -00009 
    -00010 
    -00011 
    -00012 
    -00013 
    -00014 
    -00015 
    -00016 
    -00017 
    -00018 
    -00019 
    -00020 
    -00021 
    -00022 
    -00023 
    -00024 
    -00025 
    -00026 
    -00027 
    -00028 
    -00029 
    -00030 
    -00031 
    -00032 
    -00033 
    -00034 
    -00035 
    -00036 
    -00037 
    -00038 
    -00039 #ifndef GLM_VIRTREV_xstream
    -00040 #define GLM_VIRTREV_xstream GLM_VERSION
    -00041 
    -00042 #include "../glm.hpp"
    -00043 #include "../gtc/matrix_access.hpp"
    -00044 #include <iostream>
    -00045 
    -00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -00047 #       pragma message("GLM: GLM_VIRTREV_xstream extension included")
    -00048 #endif
    -00049 
    -00050 namespace glm
    -00051 {
    -00052         template<typename T>
    -00053         std::ostream & operator << (std::ostream & stream, glm::detail::tvec2<T> const & vec)
    -00054         {
    -00055                 stream << "<glm_vec2 ";
    -00056                 stream << "x=\"" << vec.x << "\" ";
    -00057                 stream << "y=\"" << vec.y << "\" ";
    -00058                 stream << "/>";
    -00059 
    -00060                 return stream;
    -00061         }
    -00062 
    -00063         template<typename T>
    -00064         std::ostream & operator << (std::ostream & stream, glm::detail::tvec3<T> const & vec)
    -00065         {
    -00066                 stream << "<glm_vec3 ";
    -00067                 stream << "x=\"" << vec.x << "\" ";
    -00068                 stream << "y=\"" << vec.y << "\" ";
    -00069                 stream << "z=\"" << vec.z << "\" ";
    -00070                 stream << "/>";
    -00071 
    -00072                 return stream;
    -00073         }
    -00074 
    -00075         template<typename T>
    -00076         std::ostream & operator << (std::ostream & stream, glm::detail::tvec4<T> const & vec)
    -00077         {
    -00078                 stream << "<glm_vec4 ";
    -00079                 stream << "x=\"" << vec.x << "\" ";
    -00080                 stream << "y=\"" << vec.y << "\" ";
    -00081                 stream << "z=\"" << vec.z << "\" ";
    -00082                 stream << "w=\"" << vec.w << "\" ";
    -00083                 stream << "/>";
    -00084 
    -00085                 return stream;
    -00086         }
    -00087 
    -00088         template<typename T>
    -00089         std::ostream & operator << (std::ostream & stream, glm::detail::tmat2x2<T> const & mat)
    -00090         {
    -00091                 stream << "<glm_mat2>" << std::endl;
    -00092                 stream << "<row ";
    -00093                 stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    -00094                 stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    -00095                 stream << "/>" << std::endl;
    -00096                 stream << "<row ";
    -00097                 stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    -00098                 stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    -00099                 stream << "/>" << std::endl;
    -00100                 stream << "</glm_mat2>";
    -00101 
    -00102                 return stream;
    -00103         }
    -00104 
    -00105         template<typename T>
    -00106         std::ostream & operator << (std::ostream & stream, glm::detail::tmat3x3<T> const & mat)
    -00107         {
    -00108                 stream << "<glm_mat3>" << std::endl;
    -00109                 stream << "<row ";
    -00110                 stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    -00111                 stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    -00112                 stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
    -00113                 stream << "/>" << std::endl;
    -00114                 stream << "<row ";
    -00115                 stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    -00116                 stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    -00117                 stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
    -00118                 stream << "/>" << std::endl;
    -00119                 stream << "<row ";
    -00120                 stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
    -00121                 stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
    -00122                 stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
    -00123                 stream << "/>" << std::endl;
    -00124                 stream << "</glm_mat3>";
    -00125 
    -00126                 return stream;
    -00127         }
    -00128 
    -00129         template<typename T>
    -00130         std::ostream & operator << (std::ostream & stream, glm::detail::tmat4x4<T> const & mat)
    -00131         {
    -00132                 stream << "<glm_mat4>" << std::endl;
    -00133                 stream << "<row ";
    -00134                 stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    -00135                 stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    -00136                 stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
    -00137                 stream << "w=\"" << glm::row(mat, 0)[3] << "\" ";
    -00138                 stream << "/>" << std::endl;
    -00139                 stream << "<row ";
    -00140                 stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    -00141                 stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    -00142                 stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
    -00143                 stream << "w=\"" << glm::row(mat, 1)[3] << "\" ";
    -00144                 stream << "/>" << std::endl;
    -00145                 stream << "<row ";
    -00146                 stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
    -00147                 stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
    -00148                 stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
    -00149                 stream << "w=\"" << glm::row(mat, 2)[3] << "\" ";
    -00150                 stream << "/>" << std::endl;
    -00151                 stream << "<row ";
    -00152                 stream << "x=\"" << glm::row(mat, 3)[0] << "\" ";
    -00153                 stream << "y=\"" << glm::row(mat, 3)[1] << "\" ";
    -00154                 stream << "z=\"" << glm::row(mat, 3)[2] << "\" ";
    -00155                 stream << "w=\"" << glm::row(mat, 3)[3] << "\" ";
    -00156                 stream << "/>" << std::endl;
    -00157                 stream << "</glm_mat4>";
    -00158                         
    -00159                 return stream;
    -00160         }
    -00161 
    -00162 }//namespace glm
    -00163 
    -00164 #endif//GLM_VIRTREV_xstream
    -
    - - - +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_verbose_operator
    +
    39 #define GLM_GTX_verbose_operator GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_verbose_operator extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename genTypeT, typename genTypeU>
    +
    56  genTypeT add(genTypeT const & a, genTypeU const & b);
    +
    57 
    +
    60  template <typename genTypeT, typename genTypeU>
    +
    61  genTypeT sub(genTypeT const & a, genTypeU const & b);
    +
    62 
    +
    65  template <typename genTypeT, typename genTypeU>
    +
    66  genTypeT mul(genTypeT const & a, genTypeU const & b);
    +
    67 
    +
    70  template <typename genTypeT, typename genTypeU>
    +
    71  genTypeT div(genTypeT const & a, genTypeU const & b);
    +
    72 
    +
    75  template <typename genTypeT, typename genTypeU, typename genTypeV>
    +
    76  genTypeT mad(genTypeT const & a, genTypeU const & b, genTypeV const & c);
    +
    77 
    +
    79 }// namespace glm
    +
    80 
    +
    81 #include "verbose_operator.inl"
    +
    82 
    +
    83 #endif//GLM_GTX_verbose_operator
    +
    + - diff --git a/doc/api/a00124.html b/doc/api/a00124.html new file mode 100644 index 00000000..558c78ab --- /dev/null +++ b/doc/api/a00124.html @@ -0,0 +1,84 @@ + + + + + +wrap.hpp File Reference + + + + + + +
    +
    + + + + + + +
    +
    + + + + + +
    +
    + +
    +
    wrap.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Functions

    template<typename genType >
    genType clamp (genType const &Texcoord)
     
    template<typename genType >
    genType mirrorRepeat (genType const &Texcoord)
     
    template<typename genType >
    genType repeat (genType const &Texcoord)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_wrap

    +
    Date
    2009-11-25 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See Also
    GLM Core (dependence)
    + +

    Definition in file wrap.hpp.

    +
    + + + + diff --git a/doc/api/a00124_source.html b/doc/api/a00124_source.html new file mode 100644 index 00000000..382ac85c --- /dev/null +++ b/doc/api/a00124_source.html @@ -0,0 +1,120 @@ + + + + + +wrap.hpp Source File + + + + + + +
    +
    + + + + + + +
    +
    + + + + + +
    +
    +
    +
    wrap.hpp
    +
    +
    +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 #ifndef GLM_GTX_wrap
    +
    39 #define GLM_GTX_wrap GLM_VERSION
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    45 # pragma message("GLM: GLM_GTX_wrap extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename genType>
    +
    56  genType clamp(genType const & Texcoord);
    +
    57 
    +
    60  template <typename genType>
    +
    61  genType repeat(genType const & Texcoord);
    +
    62 
    +
    65  template <typename genType>
    +
    66  genType mirrorRepeat(genType const & Texcoord);
    +
    67 
    +
    69 }// namespace glm
    +
    70 
    +
    71 #include "wrap.inl"
    +
    72 
    +
    73 #endif//GLM_GTX_wrap
    +
    + + + + diff --git a/doc/api/a00064.html b/doc/api/a00125.html similarity index 57% rename from doc/api/a00064.html rename to doc/api/a00125.html index 277c133d..be87bb26 100644 --- a/doc/api/a00064.html +++ b/doc/api/a00125.html @@ -2,42 +2,31 @@ - -noise.hpp File Reference + +xstream.hpp File Reference + + - - - -
    - - +
    - - - - - - - - +
    - - + + @@ -46,33 +35,37 @@
  • File List
  • + +
    -
    noise.hpp File Reference
    -
    +
    xstream.hpp File Reference
    +
    -

    Go to the source code of this file.

    -

    Detailed Description

    +

    Go to the source code of this file.

    +

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_noise: Procedural noise functions

    -
    Date:
    2011-04-21 / 2011-06-07
    -
    Author:
    Christophe Riccio
    -
    See also:
    GLM Core (dependence)
    - -

    Definition in file gtx/noise.hpp.

    -
    - +

    GLM_VIRTREV_xstream: xml like output

    +
    Date
    2008-05-24 / 2008-05-26
    +
    Author
    Mathieu Roumillac (matrem84.free.fr)
    +
    See Also
    GLM Core (dependence)
    +
    +GLM_GTC_matrix_access (dependence)
    +

    Definition in file xstream.hpp.

    + + - diff --git a/doc/api/a00125_source.html b/doc/api/a00125_source.html new file mode 100644 index 00000000..deed91ab --- /dev/null +++ b/doc/api/a00125_source.html @@ -0,0 +1,222 @@ + + + + + +xstream.hpp Source File + + + + + + +
    +
    + + + + + + +
    +
    + + + + + +
    +
    +
    +
    xstream.hpp
    +
    +
    +Go to the documentation of this file.
    1 
    +
    2 
    +
    3 
    +
    4 
    +
    5 
    +
    6 
    +
    7 
    +
    8 
    +
    9 
    +
    10 
    +
    11 
    +
    12 
    +
    13 
    +
    14 
    +
    15 
    +
    16 
    +
    17 
    +
    18 
    +
    19 
    +
    20 
    +
    21 
    +
    22 
    +
    23 
    +
    24 
    +
    25 
    +
    26 
    +
    27 
    +
    28 
    +
    29 
    +
    30 
    +
    31 
    +
    32 
    +
    33 
    +
    34 
    +
    35 
    +
    36 
    +
    37 
    +
    38 
    +
    39 #ifndef GLM_VIRTREV_xstream
    +
    40 #define GLM_VIRTREV_xstream GLM_VERSION
    +
    41 
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtc/matrix_access.hpp"
    +
    44 #include <iostream>
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    47 # pragma message("GLM: GLM_VIRTREV_xstream extension included")
    +
    48 #endif
    +
    49 /*
    +
    50 namespace glm{
    +
    51 namespace detail
    +
    52 {
    +
    53  template<typename T>
    +
    54  std::ostream & operator << (std::ostream & stream, glm::detail::tvec2<T> const & vec)
    +
    55  {
    +
    56  stream << "<glm_vec2 ";
    +
    57  stream << "x=\"" << vec.x << "\" ";
    +
    58  stream << "y=\"" << vec.y << "\" ";
    +
    59  stream << "/>";
    +
    60 
    +
    61  return stream;
    +
    62  }
    +
    63 
    +
    64  template<typename T>
    +
    65  std::ostream & operator << (std::ostream & stream, glm::detail::tvec3<T> const & vec)
    +
    66  {
    +
    67  stream << "<glm_vec3 ";
    +
    68  stream << "x=\"" << vec.x << "\" ";
    +
    69  stream << "y=\"" << vec.y << "\" ";
    +
    70  stream << "z=\"" << vec.z << "\" ";
    +
    71  stream << "/>";
    +
    72 
    +
    73  return stream;
    +
    74  }
    +
    75 
    +
    76  template<typename T>
    +
    77  std::ostream & operator << (std::ostream & stream, glm::detail::tvec4<T> const & vec)
    +
    78  {
    +
    79  stream << "<glm_vec4 ";
    +
    80  stream << "x=\"" << vec.x << "\" ";
    +
    81  stream << "y=\"" << vec.y << "\" ";
    +
    82  stream << "z=\"" << vec.z << "\" ";
    +
    83  stream << "w=\"" << vec.w << "\" ";
    +
    84  stream << "/>";
    +
    85 
    +
    86  return stream;
    +
    87  }
    +
    88 
    +
    89  template<typename T>
    +
    90  std::ostream & operator << (std::ostream & stream, glm::detail::tmat2x2<T> const & mat)
    +
    91  {
    +
    92  stream << "<glm_mat2>" << std::endl;
    +
    93  stream << "<row ";
    +
    94  stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    +
    95  stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    +
    96  stream << "/>" << std::endl;
    +
    97  stream << "<row ";
    +
    98  stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    +
    99  stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    +
    100  stream << "/>" << std::endl;
    +
    101  stream << "</glm_mat2>";
    +
    102 
    +
    103  return stream;
    +
    104  }
    +
    105 
    +
    106  template<typename T>
    +
    107  std::ostream & operator << (std::ostream & stream, glm::detail::tmat3x3<T> const & mat)
    +
    108  {
    +
    109  stream << "<glm_mat3>" << std::endl;
    +
    110  stream << "<row ";
    +
    111  stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    +
    112  stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    +
    113  stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
    +
    114  stream << "/>" << std::endl;
    +
    115  stream << "<row ";
    +
    116  stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    +
    117  stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    +
    118  stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
    +
    119  stream << "/>" << std::endl;
    +
    120  stream << "<row ";
    +
    121  stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
    +
    122  stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
    +
    123  stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
    +
    124  stream << "/>" << std::endl;
    +
    125  stream << "</glm_mat3>";
    +
    126 
    +
    127  return stream;
    +
    128  }
    +
    129 
    +
    130  template<typename T>
    +
    131  std::ostream & operator << (std::ostream & stream, glm::detail::tmat4x4<T> const & mat)
    +
    132  {
    +
    133  stream << "<glm_mat4>" << std::endl;
    +
    134  stream << "<row ";
    +
    135  stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    +
    136  stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    +
    137  stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
    +
    138  stream << "w=\"" << glm::row(mat, 0)[3] << "\" ";
    +
    139  stream << "/>" << std::endl;
    +
    140  stream << "<row ";
    +
    141  stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    +
    142  stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    +
    143  stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
    +
    144  stream << "w=\"" << glm::row(mat, 1)[3] << "\" ";
    +
    145  stream << "/>" << std::endl;
    +
    146  stream << "<row ";
    +
    147  stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
    +
    148  stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
    +
    149  stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
    +
    150  stream << "w=\"" << glm::row(mat, 2)[3] << "\" ";
    +
    151  stream << "/>" << std::endl;
    +
    152  stream << "<row ";
    +
    153  stream << "x=\"" << glm::row(mat, 3)[0] << "\" ";
    +
    154  stream << "y=\"" << glm::row(mat, 3)[1] << "\" ";
    +
    155  stream << "z=\"" << glm::row(mat, 3)[2] << "\" ";
    +
    156  stream << "w=\"" << glm::row(mat, 3)[3] << "\" ";
    +
    157  stream << "/>" << std::endl;
    +
    158  stream << "</glm_mat4>";
    +
    159 
    +
    160  return stream;
    +
    161  }
    +
    162 
    +
    163 }//namespace detail
    +
    164 }//namespace glm
    +
    165 */
    +
    166 #endif//GLM_VIRTREV_xstream
    +
    + + + + diff --git a/doc/api/a00127.html b/doc/api/a00127.html deleted file mode 100644 index 0ef062ea..00000000 --- a/doc/api/a00127.html +++ /dev/null @@ -1,1040 +0,0 @@ - - - - - -Common functions - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - -
    -
    - -
    -
    Common functions
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename genType >
    genType abs (genType const &x)
    template<typename genType >
    genType ceil (genType const &x)
    template<typename genType >
    genType clamp (genType const &x, genType const &minVal, genType const &maxVal)
    template<typename genType , typename genIType >
    genIType floatBitsToInt (genType const &value)
    template<typename genType , typename genUType >
    genUType floatBitsToUint (genType const &value)
    template<typename genType >
    genType floor (genType const &x)
    template<typename genType >
    genType fma (genType const &a, genType const &b, genType const &c)
    template<typename genType >
    genType fract (genType const &x)
    template<typename genType , typename genIType >
    genType frexp (genType const &x, genIType &exp)
    template<typename genType , typename genIType >
    genType intBitsToFloat (genIType const &value)
    template<typename genType >
    genType::bool_type isinf (genType const &x)
    template<typename genType >
    genType::bool_type isnan (genType const &x)
    template<typename genType , typename genIType >
    genType ldexp (genType const &x, genIType const &exp)
    template<typename genType >
    genType max (genType const &x, genType const &y)
    template<typename genType >
    genType min (genType const &x, genType const &y)
    template<typename genTypeT , typename genTypeU >
    genTypeT mix (genTypeT const &x, genTypeT const &y, genTypeU const &a)
    template<typename genType >
    genType mod (genType const &x, genType const &y)
    template<typename genType >
    genType mod (genType const &x, typename genType::value_type const &y)
    template<typename genType >
    genType modf (genType const &x, genType &i)
    template<typename genType >
    genType round (genType const &x)
    template<typename genType >
    genType roundEven (genType const &x)
    template<typename genType >
    genType sign (genType const &x)
    template<typename genType >
    genType smoothstep (genType const &edge0, genType const &edge1, genType const &x)
    template<typename genType >
    genType step (genType const &edge, genType const &x)
    template<typename genType >
    genType trunc (genType const &x)
    template<typename genType , typename genUType >
    genType uintBitsToFloat (genUType const &value)
    -

    Detailed Description

    -

    These all operate component-wise.

    -

    The description is per component.

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    genType glm::abs (genType const & x)
    -
    -
    - -

    Returns x if x >= 0; otherwise, it returns -x.

    -
    Template Parameters:
    - - -
    genTypefloating-point or signed integer; scalar or vector types.
    -
    -
    -
    See also:
    GLSL abs man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::ceil (genType const & x)
    -
    -
    - -

    Returns a value equal to the nearest integer that is greater than or equal to x.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL ceil man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::clamp (genType const & x,
    genType const & minVal,
    genType const & maxVal 
    )
    -
    -
    - -

    Returns min(max(x, minVal), maxVal) for each component in x.

    -

    using the floating-point values minVal and maxVal.

    -
    Template Parameters:
    - - -
    genTypeFloating-point or integer; scalar or vector types.
    -
    -
    -
    See also:
    GLSL clamp man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -

    Referenced by glm::saturate().

    - -
    -
    - -
    -
    - - - - - - - - -
    genIType glm::floatBitsToInt (genType const & value)
    -
    -
    - -

    Returns a signed integer value representing the encoding of a floating-point value.

    -

    The floatingpoint value's bit-level representation is preserved.

    -
    Template Parameters:
    - - - -
    genTypeSingle-precision floating-point scalar or vector types.
    genITypeSigned integer scalar or vector types.
    -
    -
    -
    See also:
    GLSL floatBitsToInt man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genUType glm::floatBitsToUint (genType const & value)
    -
    -
    - -

    Returns a unsigned integer value representing the encoding of a floating-point value.

    -

    The floatingpoint value's bit-level representation is preserved.

    -
    Template Parameters:
    - - - -
    genTypeSingle-precision floating-point scalar or vector types.
    genUTypeUnsigned integer scalar or vector types.
    -
    -
    -
    See also:
    GLSL floatBitsToUint man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::floor (genType const & x)
    -
    -
    - -

    Returns a value equal to the nearest integer that is less then or equal to x.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL floor man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::fma (genType const & a,
    genType const & b,
    genType const & c 
    )
    -
    -
    - -

    Computes and returns a * b + c.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL fma man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::fract (genType const & x)
    -
    -
    - -

    Return x - floor(x).

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL fract man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::frexp (genType const & x,
    genIType & exp 
    )
    -
    -
    - -

    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.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL frexp man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::intBitsToFloat (genIType const & value)
    -
    -
    - -

    Returns a floating-point value corresponding to a signed 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.

    -
    Template Parameters:
    - - - -
    genTypeSingle-precision floating-point scalar or vector types.
    genITypeSigned integer scalar or vector types.
    -
    -
    -
    See also:
    GLSL intBitsToFloat man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    -
    Todo:
    Clarify this declaration, we don't need to actually specify the return type
    - -
    -
    - -
    -
    - - - - - - - - -
    bool isinf (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.

    -

    Determines whether the given floating-point value is infinite. (From GLM_GTX_compatibility extension)

    -

    Returns false otherwise, including for implementations with no infinity representations.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL isinf man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    bool isnan (genType const & x)
    -
    -
    - -

    Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.

    -

    Checks given floating-point value for not a number (NAN) (From GLM_GTX_compatibility extension)

    -

    Returns false otherwise, including for implementations with no NaN representations.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL isnan man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::ldexp (genType const & x,
    genIType const & 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.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL ldexp man page;
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::max (genType const & x,
    genType const & y 
    )
    -
    -
    - -

    Returns y if x < y; otherwise, it returns x.

    -
    Template Parameters:
    - - -
    genTypeFloating-point or integer; scalar or vector types.
    -
    -
    -
    See also:
    GLSL max man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::min (genType const & x,
    genType const & y 
    )
    -
    -
    - -

    Returns y if y < x; otherwise, it returns x.

    -
    Template Parameters:
    - - -
    genTypeFloating-point or integer; scalar or vector types.
    -
    -
    -
    See also:
    GLSL min man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeT glm::mix (genTypeT const & x,
    genTypeT const & y,
    genTypeU const & a 
    )
    -
    -
    -
    Returns:
    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].
    -
    -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.
    -
    See also:
    GLSL mix man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    -
    Parameters:
    - - - - -
    [in]xValue to interpolate.
    [in]yValue to interpolate.
    [in]aInterpolant.
    -
    -
    -
    Template Parameters:
    - - - -
    genTypeTFloating point scalar or vector.
    genTypeUFloating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
    -
    -
    -
     #include <glm/glm.hpp>
    - ...
    - float a;
    - bool b;
    - glm::dvec3 e;
    - glm::dvec3 f;
    - glm::vec4 g;
    - glm::vec4 h;
    - ...
    - glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. 
    - glm::vec4 s = glm::mix(g, h, b); // Teturns g or h;
    - glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
    - glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
    -
    -

    Referenced by glm::lerp().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::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.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL mod man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::mod (genType const & x,
    typename genType::value_type const & y 
    )
    -
    -
    - -

    Modulus.

    -

    Returns x - y * floor(x / y) for each component in x using the floating point value y.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL mod man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::modf (genType const & x,
    genType & i 
    )
    -
    -
    - -

    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.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL modf man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::round (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.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL round man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::roundEven (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.)

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL roundEven man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    -
    -New round to even technique
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::sign (genType const & x)
    -
    -
    - -

    Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.

    -
    Template Parameters:
    - - -
    genTypeFloating-point or signed integer; scalar or vector types.
    -
    -
    -
    See also:
    GLSL sign man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::smoothstep (genType const & edge0,
    genType const & edge1,
    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.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL smoothstep man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::step (genType const & edge,
    genType const & x 
    )
    -
    -
    - -

    Returns 0.0 if x < edge, otherwise it returns 1.0.

    -
    See also:
    GLSL step man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::trunc (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.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL trunc man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::uintBitsToFloat (genUType const & value)
    -
    -
    - -

    Returns a floating-point value corresponding to a 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.

    -
    Template Parameters:
    - - - -
    genTypeSingle-precision floating-point scalar or vector types.
    genUTypeUnsigned integer scalar or vector types.
    -
    -
    -
    See also:
    GLSL uintBitsToFloat man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    -
    Todo:
    Clarify this declaration, we don't need to actually specify the return type
    - -
    -
    -
    - - - - - - diff --git a/doc/api/a00128.html b/doc/api/a00128.html deleted file mode 100644 index d1151807..00000000 --- a/doc/api/a00128.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - -Exponential functions - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - -
    -
    - -
    -
    Exponential functions
    -
    -
    - - - - - - - - - - - - - - - - -

    -Functions

    template<typename genType >
    genType exp (genType const &x)
    template<typename genType >
    genType exp2 (genType const &x)
    template<typename genType >
    genType inversesqrt (genType const &x)
    template<typename genType >
    genType log (genType const &x)
    template<typename genType >
    genType log2 (genType const &x)
    template<typename genType >
    genType pow (genType const &x, genType const &y)
    template<typename genType >
    genType sqrt (genType const &x)
    -

    Detailed Description

    -

    These all operate component-wise.

    -

    The description is per component.

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    genType glm::exp (genType const & x)
    -
    -
    - -

    Returns the natural exponentiation of x, i.e., e^x.

    -
    Parameters:
    - - -
    xexp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL exp man page
    -
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::exp2 (genType const & x)
    -
    -
    - -

    Returns 2 raised to the x power.

    -
    Parameters:
    - - -
    xexp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL exp2 man page
    -
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::inversesqrt (genType const & x)
    -
    -
    - -

    Returns the reciprocal of the positive square root of x.

    -
    Parameters:
    - - -
    xinversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL inversesqrt man page
    -
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::log (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.

    -
    Parameters:
    - - -
    xlog function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL log man page
    -
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::log2 (genType const & x)
    -
    -
    - -

    Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.

    -
    Parameters:
    - - -
    xlog2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL log2 man page
    -
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::pow (genType const & x,
    genType const & y 
    )
    -
    -
    - -

    Returns x raised to the y power.

    -
    Parameters:
    - - - -
    xpow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    y
    -
    -
    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL pow man page
    -
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::sqrt (genType const & x)
    -
    -
    - -

    Returns the positive square root of x.

    -
    Parameters:
    - - -
    xsqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL sqrt man page
    -
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    -
    - - - - - - diff --git a/doc/api/a00129.html b/doc/api/a00129.html index 1792abc9..e6bd34bc 100644 --- a/doc/api/a00129.html +++ b/doc/api/a00129.html @@ -2,129 +2,203 @@ - -Geometric functions + +Common functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    Geometric functions
    -
    +
    Common functions
    +
    GLM Core
    - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tvec3< valType > cross (detail::tvec3< valType > const &x, detail::tvec3< valType > const &y)
    template<typename genType >
    genType::value_type distance (genType const &p0, genType const &p1)
    template<typename genType >
    genType::value_type dot (genType const &x, genType const &y)
    template<typename genType >
    genType faceforward (genType const &N, genType const &I, genType const &Nref)
    template<typename genType >
    genType::value_type length (genType const &x)
    template<typename genType >
    genType normalize (genType const &x)
    template<typename genType >
    genType reflect (genType const &I, genType const &N)
    template<typename genType >
    genType refract (genType const &I, genType const &N, typename genType::value_type const &eta)
    template<typename genType >
    genType abs (genType const &x)
     
    template<typename genType >
    genType ceil (genType const &x)
     
    template<typename genType >
    genType clamp (genType const &x, genType const &minVal, genType const &maxVal)
     
    template<typename genType , typename genIType >
    genIType floatBitsToInt (genType const &value)
     
    template<typename genType , typename genUType >
    genUType floatBitsToUint (genType const &value)
     
    template<typename genType >
    genType floor (genType const &x)
     
    template<typename genType >
    genType fma (genType const &a, genType const &b, genType const &c)
     
    template<typename genType >
    genType fract (genType const &x)
     
    template<typename genType , typename genIType >
    genType frexp (genType const &x, genIType &exp)
     
    template<typename genType , typename genIType >
    genType intBitsToFloat (genIType const &value)
     
    template<typename genType >
    genType::bool_type isinf (genType const &x)
     
    template<typename genType >
    genType::bool_type isnan (genType const &x)
     
    template<typename genType , typename genIType >
    genType ldexp (genType const &x, genIType const &exp)
     
    template<typename genType >
    genType max (genType const &x, genType const &y)
     
    template<typename genType >
    genType min (genType const &x, genType const &y)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT mix (genTypeT const &x, genTypeT const &y, genTypeU const &a)
     
    template<typename genType >
    genType mod (genType const &x, genType const &y)
     
    template<typename genType >
    genType mod (genType const &x, typename genType::value_type const &y)
     
    template<typename genType >
    genType modf (genType const &x, genType &i)
     
    template<typename genType >
    genType round (genType const &x)
     
    template<typename genType >
    genType roundEven (genType const &x)
     
    template<typename genType >
    genType sign (genType const &x)
     
    template<typename genType >
    genType smoothstep (genType const &edge0, genType const &edge1, genType const &x)
     
    template<typename genType >
    genType step (genType const &edge, genType const &x)
     
    template<typename genType >
    genType trunc (genType const &x)
     
    template<typename genType , typename genUType >
    genType uintBitsToFloat (genUType const &value)
     
    -

    Detailed Description

    -

    These operate on vectors as vectors, not component-wise.

    -

    Function Documentation

    - +

    Detailed Description

    +

    These all operate component-wise.

    +

    The description is per component.

    +

    Function Documentation

    +
    - + - + + + + +
    detail::tvec3<valType> glm::cross genType glm::abs (detail::tvec3< valType > const & genType const & x)
    +
    + +

    Returns x if x >= 0; otherwise, it returns -x.

    +
    Template Parameters
    + + +
    genTypefloating-point or signed integer; scalar or vector types.
    +
    +
    +
    See Also
    GLSL abs man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::ceil (genType const & x)
    +
    + +

    Returns a value equal to the nearest integer that is greater than or equal to x.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL ceil man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + - - - - - - - - -
    genType glm::clamp (genType const &  x,
    detail::tvec3< valType > const & y 
    )
    -
    -
    - -

    Returns the cross product of x and y.

    -
    Template Parameters:
    - - -
    valTypeFloating-point scalar types.
    -
    -
    -
    See also:
    GLSL cross man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - -
    -
    - -
    -
    - - - - - + - + @@ -132,28 +206,347 @@ Functions
    genType::value_type glm::distance ( genType const & p0, minVal,
    genType const & p1 maxVal 
    -
    -
    +
    -

    Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).

    -
    Template Parameters:
    - - +

    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.

    +
    Template Parameters
    +
    genTypeFloating-point vector types.
    +
    genTypeFloating-point or integer; scalar or vector types.
    -
    See also:
    GLSL distance man page
    +
    See Also
    GLSL clamp man page
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +

    Referenced by glm::saturate().

    - +
    - + + + + + + +
    genType::value_type glm::dot genIType glm::floatBitsToInt (genType const & value)
    +
    + +

    Returns a signed integer value representing the encoding of a floating-point value.

    +

    The floatingpoint value's bit-level representation is preserved.

    +
    Template Parameters
    + + + +
    genTypeSingle-precision floating-point scalar or vector types.
    genITypeSigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL floatBitsToInt man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genUType glm::floatBitsToUint (genType const & value)
    +
    + +

    Returns a unsigned integer value representing the encoding of a floating-point value.

    +

    The floatingpoint value's bit-level representation is preserved.

    +
    Template Parameters
    + + + +
    genTypeSingle-precision floating-point scalar or vector types.
    genUTypeUnsigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL floatBitsToUint man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::floor (genType const & x)
    +
    + +

    Returns a value equal to the nearest integer that is less then or equal to x.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL floor man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genType glm::fma (genType const & a,
    genType const & b,
    genType const & c 
    )
    +
    + +

    Computes and returns a * b + c.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL fma man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::fract (genType const & x)
    +
    + +

    Return x - floor(x).

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL fract man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType glm::frexp (genType const & x,
    genIType & exp 
    )
    +
    + +

    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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL frexp man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::intBitsToFloat (genIType const & value)
    +
    + +

    Returns a floating-point value corresponding to a signed 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.

    +
    Template Parameters
    + + + +
    genTypeSingle-precision floating-point scalar or vector types.
    genITypeSigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL intBitsToFloat man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    +
    Todo:
    Clarify this declaration, we don't need to actually specify the return type
    + +
    +
    + +
    +
    + + + + + + + + +
    genType::bool_type glm::isinf (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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL isinf man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType::bool_type glm::isnan (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.

    +

    /!\ When using compiler fast math, this function may fail.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL isnan man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType glm::ldexp (genType const & x,
    genIType const & 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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL ldexp man page;
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + @@ -170,43 +563,36 @@ Functions
    genType glm::max ( genType const &  x,
    -
    -
    +
    -

    Returns the dot product of x and y, i.e., result = x * y.

    -
    Template Parameters:
    - - +

    Returns y if x < y; otherwise, it returns x.

    +
    Template Parameters
    +
    genTypeFloating-point vector types.
    +
    genTypeFloating-point or integer; scalar or vector types.
    -
    See also:
    GLSL dot man page
    +
    See Also
    GLSL max man page
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    - +
    - + - + - - - - - - - + @@ -214,87 +600,42 @@ Functions
    genType glm::faceforward genType glm::min ( genType const & N, x,
    genType const & I,
    genType const & Nref y 
    -
    -
    +
    -

    If dot(Nref, I) < 0.0, return N, otherwise, return -N.

    -
    Template Parameters:
    - - +

    Returns y if y < x; otherwise, it returns x.

    +
    Template Parameters
    +
    genTypeFloating-point vector types.
    +
    genTypeFloating-point or integer; scalar or vector types.
    -
    See also:
    GLSL faceforward man page
    +
    See Also
    GLSL min man page
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    - +
    - + - - - - -
    genType::value_type glm::length genTypeT glm::mix (genType const & x)
    -
    -
    - -

    Returns the length of x, i.e., sqrt(x * x).

    -
    Template Parameters:
    - - -
    genTypeFloating-point vector types.
    -
    -
    -
    See also:
    GLSL length man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::normalize (genType const & x)
    -
    -
    - -

    Returns a vector in the same direction as x but with length of 1.

    -
    See also:
    GLSL normalize man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - -
    -
    - -
    -
    - - - - - - + + - - + + + + + + + + @@ -302,43 +643,99 @@ Functions
    genType glm::reflect (genType const & I, genTypeT const & x,
    genType const & N genTypeT const & y,
    genTypeU const & a 
    -
    -
    - -

    For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.

    -
    Template Parameters:
    - - +
    +
    Returns
    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].
    +
    +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.
    +
    See Also
    GLSL mix man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    +
    Parameters
    +
    genTypeFloating-point vector types.
    + + +
    [in]xValue to interpolate.
    [in]yValue to interpolate.
    [in]aInterpolant.
    -
    See also:
    GLSL reflect man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +
    Template Parameters
    + + + +
    genTypeTFloating point scalar or vector.
    genTypeUFloating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
    +
    +
    +
    #include <glm/glm.hpp>
    +
    ...
    +
    float a;
    +
    bool b;
    + + + + +
    ...
    +
    glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
    +
    glm::vec4 s = glm::mix(g, h, b); // Teturns g or h;
    +
    glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
    +
    glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
    +
    +

    Referenced by glm::lerp(), and glm::slerp().

    - +
    - + - + - + + + + + + + +
    genType glm::refract genType glm::mod ( genType const & I, x,
    genType const & N, y 
    )
    +
    + +

    Modulus.

    +

    Returns x - y * floor(x / y) for each component in x using the floating point value y.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL mod man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + - + @@ -346,30 +743,283 @@ Functions
    genType glm::mod (genType const & x,
    typename genType::value_type const & eta y 
    -
    -
    +
    -

    For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.

    -
    Template Parameters:
    - - +

    Modulus.

    +

    Returns x - y * floor(x / y) for each component in x using the floating point value y.

    +
    Template Parameters
    +
    genTypeFloating-point vector types.
    +
    genTypeFloating-point scalar or vector types.
    -
    See also:
    GLSL refract man page
    +
    See Also
    GLSL mod man page
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType glm::modf (genType const & x,
    genType & i 
    )
    +
    + +

    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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL modf man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    +
    +
    + +
    +
    + + + + + + + + +
    genType glm::round (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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL round man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    +
    +
    + +
    +
    + + + + + + + + +
    genType glm::roundEven (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.)

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL roundEven man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    +
    +New round to even technique
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::sign (genType const & x)
    +
    + +

    Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.

    +
    Template Parameters
    + + +
    genTypeFloating-point or signed integer; scalar or vector types.
    +
    +
    +
    See Also
    GLSL sign man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genType glm::smoothstep (genType const & edge0,
    genType const & edge1,
    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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL smoothstep man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType glm::step (genType const & edge,
    genType const & x 
    )
    +
    + +

    Returns 0.0 if x < edge, otherwise it returns 1.0.

    +
    See Also
    GLSL step man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::trunc (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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL trunc man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::uintBitsToFloat (genUType const & value)
    +
    + +

    Returns a floating-point value corresponding to a 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.

    +
    Template Parameters
    + + + +
    genTypeSingle-precision floating-point scalar or vector types.
    genUTypeUnsigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL uintBitsToFloat man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    +
    Todo:
    Clarify this declaration, we don't need to actually specify the return type
    + +
    +
    +
    + - diff --git a/doc/api/a00130.html b/doc/api/a00130.html index f813658a..f9584e8d 100644 --- a/doc/api/a00130.html +++ b/doc/api/a00130.html @@ -2,323 +2,252 @@ - -Integer functions + +Exponential functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    Integer functions
    -
    +
    Exponential functions
    +
    GLM Core
    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type bitCount (genIUType< T > const &Value)
    template<typename genIUType >
    genIUType bitfieldExtract (genIUType const &Value, int const &Offset, int const &Bits)
    template<typename genIUType >
    genIUType bitfieldInsert (genIUType const &Base, genIUType const &Insert, int const &Offset, int const &Bits)
    template<typename genIUType >
    genIUType bitfieldReverse (genIUType const &value)
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type findLSB (genIUType< T > const &Value)
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type findMSB (genIUType< T > const &Value)
    template<typename genIType >
    void imulExtended (genIType const &x, genIType const &y, genIType &msb, genIType &lsb)
    template<typename genUType >
    genUType uaddCarry (genUType const &x, genUType const &y, genUType &carry)
    template<typename genUType >
    void umulExtended (genUType const &x, genUType const &y, genUType &msb, genUType &lsb)
    template<typename genUType >
    genUType usubBorrow (genUType const &x, genUType const &y, genUType &borrow)
    template<typename genType >
    genType exp (genType const &x)
     
    template<typename genType >
    genType exp2 (genType const &x)
     
    template<typename genType >
    genType inversesqrt (genType const &x)
     
    template<typename genType >
    genType log (genType const &x)
     
    template<typename genType >
    genType log2 (genType const &x)
     
    template<typename genType >
    genType pow (genType const &x, genType const &y)
     
    template<typename genType >
    genType sqrt (genType const &x)
     
    -

    Detailed Description

    +

    Detailed Description

    These all operate component-wise.

    -

    The description is per component. The notation [a, b] means the set of bits from bit-number a through bit-number b, inclusive. The lowest-order bit is bit 0.

    -

    Function Documentation

    - +

    The description is per component.

    +

    Function Documentation

    +
    - + - - + +
    genIUType<T>::signed_type glm::bitCount genType glm::exp (genIUType< T > const & Value)genType const & x)
    -
    -
    +
    -

    Returns the number of bits set to 1 in the binary representation of value.

    -
    Template Parameters:
    - - +

    Returns the natural exponentiation of x, i.e., e^x.

    +
    Parameters
    +
    genIUTypeSigned or unsigned integer scalar or vector types.
    +
    xexp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    -
    See also:
    GLSL bitCount man page
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL exp man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    -
    Todo:
    Clarify the declaration to specify that scalars are suported.
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + - - - - - - - - - - - - - - - - - - - - -
    genIUType glm::bitfieldExtract genType glm::exp2 (genIUType const & Value,
    int const & Offset,
    int const & Bits 
    )
    -
    -
    - -

    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.

    -
    Template Parameters:
    - - -
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    -
    -
    See also:
    GLSL bitfieldExtract man page
    -
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genIUType glm::bitfieldInsert (genIUType const & Base,
    genIUType const & Insert,
    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.

    -
    Template Parameters:
    - - -
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    -
    -
    See also:
    GLSL bitfieldInsert man page
    -
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    - -
    -
    - -
    -
    - - - - - - + +
    genIUType glm::bitfieldReverse (genIUType const & value)genType const & x)
    -
    -
    +
    -

    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.

    -
    Template Parameters:
    - - +

    Returns 2 raised to the x power.

    +
    Parameters
    +
    genIUTypeSigned or unsigned integer scalar or vector types.
    +
    xexp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    -
    See also:
    GLSL bitfieldReverse man page
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL exp2 man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + - - + +
    genIUType<T>::signed_type glm::findLSB genType glm::inversesqrt (genIUType< T > const & Value)genType const & x)
    -
    -
    +
    -

    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.

    -
    Template Parameters:
    - - +

    Returns the reciprocal of the positive square root of x.

    +
    Parameters
    +
    genIUTypeSigned or unsigned integer scalar or vector types.
    +
    xinversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
    -
    See also:
    GLSL findLSB man page
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL inversesqrt man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    -
    Todo:
    Clarify the declaration to specify that scalars are suported.
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + - - + +
    genIUType<T>::signed_type glm::findMSB genType glm::log (genIUType< T > const & Value)genType const & x)
    -
    -
    +
    -

    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.

    -
    Template Parameters:
    - - +

    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.

    +
    Parameters
    +
    genIUTypeSigned or unsigned integer scalar or vector types.
    +
    xlog function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
    -
    See also:
    GLSL findMSB man page
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL log man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    -
    Todo:
    Clarify the declaration to specify that scalars are suported.
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + - + + + + +
    void glm::imulExtended genType glm::log2 (genIType const & genType const & x)
    +
    + +

    Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.

    +
    Parameters
    + + +
    xlog2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
    +
    +
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL log2 man page
    +
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    + +
    +
    + +
    +
    + + + + + - - - - - - - - - - - - - - + + @@ -326,172 +255,67 @@ Functions
    genType glm::pow (genType const &  x,
    genIType const & y,
    genIType & msb,
    genIType & lsb genType const & y 
    -
    -
    +
    -

    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.

    -
    Template Parameters:
    - - +

    Returns x raised to the y power.

    +
    Parameters
    +
    genITypeSigned integer scalar or vector types.
    + +
    xpow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    y
    -
    See also:
    GLSL imulExtended man page
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL pow man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + - - - - - + + - - - - - - - - - - - - -
    genUType glm::uaddCarry genType glm::sqrt (genUType const & x,
    genType const & x) genUType const & y,
    genUType & carry 
    )
    -
    -
    +
    -

    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.

    -
    Template Parameters:
    - - +

    Returns the positive square root of x.

    +
    Parameters
    +
    genUTypeUnsigned integer scalar or vector types.
    +
    xsqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
    -
    See also:
    GLSL uaddCarry man page
    -
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void glm::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.

    -
    Template Parameters:
    - - +
    Template Parameters
    +
    genUTypeUnsigned integer scalar or vector types.
    +
    genTypeFloating-point scalar or vector types.
    -
    See also:
    GLSL umulExtended man page
    +
    See Also
    GLSL sqrt man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genUType glm::usubBorrow (genUType const & x,
    genUType const & y,
    genUType & borrow 
    )
    -
    -
    - -

    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.

    -
    Template Parameters:
    - - -
    genUTypeUnsigned integer scalar or vector types.
    -
    -
    -
    See also:
    GLSL usubBorrow man page
    -
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    - -
    -
    -
    - - + + - diff --git a/doc/api/a00131.html b/doc/api/a00131.html index 416f982e..0aad0fce 100644 --- a/doc/api/a00131.html +++ b/doc/api/a00131.html @@ -2,264 +2,87 @@ - -Matrix functions + +Geometric functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    Matrix functions
    -
    +
    Geometric functions
    +
    GLM Core
    - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tmat2x2< valType >
    -::value_type 
    determinant (detail::tmat2x2< valType > const &m)
    template<typename valType >
    detail::tmat3x3< valType >
    -::value_type 
    determinant (detail::tmat3x3< valType > const &m)
    template<typename valType >
    detail::tmat4x4< valType >
    -::value_type 
    determinant (detail::tmat4x4< valType > const &m)
    template<typename valType >
    detail::tmat2x2< valType > inverse (detail::tmat2x2< valType > const &m)
    template<typename valType >
    detail::tmat3x3< valType > inverse (detail::tmat3x3< valType > const &m)
    template<typename valType >
    detail::tmat4x4< valType > inverse (detail::tmat4x4< valType > const &m)
    template<typename matType >
    matType matrixCompMult (matType const &x, matType const &y)
    template<typename vecType , typename matType >
    matType outerProduct (vecType const &c, vecType const &r)
    template<typename matType >
    matType::transpose_type transpose (matType const &x)
    template<typename valType >
    detail::tvec3< valType > cross (detail::tvec3< valType > const &x, detail::tvec3< valType > const &y)
     
    template<typename genType >
    genType::value_type distance (genType const &p0, genType const &p1)
     
    template<typename genType >
    genType::value_type dot (genType const &x, genType const &y)
     
    template<typename genType >
    genType faceforward (genType const &N, genType const &I, genType const &Nref)
     
    template<typename genType >
    genType::value_type length (genType const &x)
     
    template<typename genType >
    genType normalize (genType const &x)
     
    template<typename genType >
    genType reflect (genType const &I, genType const &N)
     
    template<typename genType >
    genType refract (genType const &I, genType const &N, typename genType::value_type const &eta)
     
    -

    Detailed Description

    -

    For each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision.

    -

    Only the single-precision floating point version is shown.

    -

    Function Documentation

    - +

    Detailed Description

    +

    These operate on vectors as vectors, not component-wise.

    +

    Function Documentation

    +
    - + - - - - -
    detail::tmat2x2<valType>::value_type glm::determinant detail::tvec3<valType> glm::cross (detail::tmat2x2< valType > const & m)
    -
    -
    - -

    Return the determinant of a mat2 matrix.

    -
    Template Parameters:
    - - -
    valTypeFloating-point scalar types.
    -
    -
    -
    See also:
    GLSL determinant man page
    -
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<valType>::value_type glm::determinant (detail::tmat3x3< valType > const & m)
    -
    -
    - -

    Return the determinant of a mat3 matrix.

    -
    Template Parameters:
    - - -
    valTypeFloating-point scalar types.
    -
    -
    -
    See also:
    GLSL determinant man page
    -
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<valType>::value_type glm::determinant (detail::tmat4x4< valType > const & m)
    -
    -
    - -

    Return the determinant of a mat4 matrix.

    -
    Template Parameters:
    - - -
    valTypeFloating-point scalar types.
    -
    -
    -
    See also:
    GLSL determinant man page
    -
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat2x2<valType> glm::inverse (detail::tmat2x2< valType > const & m)
    -
    -
    - -

    Return the inverse of a mat2 matrix.

    -
    Template Parameters:
    - - -
    valTypeFloating-point scalar types.
    -
    -
    -
    See also:
    GLSL inverse man page
    -
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<valType> glm::inverse (detail::tmat3x3< valType > const & m)
    -
    -
    - -

    Return the inverse of a mat3 matrix.

    -
    Template Parameters:
    - - -
    valTypeFloating-point scalar types.
    -
    -
    -
    See also:
    GLSL inverse man page
    -
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<valType> glm::inverse (detail::tmat4x4< valType > const & m)
    -
    -
    - -

    Return the inverse of a mat4 matrix.

    -
    Template Parameters:
    - - -
    valTypeFloating-point scalar types.
    -
    -
    -
    See also:
    GLSL inverse man page
    -
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - -
    -
    - -
    -
    - - - - - + - + @@ -268,37 +91,36 @@ Functions
    matType glm::matrixCompMult (matType const & detail::tvec3< valType > const &  x,
    matType const & detail::tvec3< valType > const &  y 
    -
    -
    +
    -

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

    -
    Template Parameters:
    - - +

    Returns the cross product of x and y.

    +
    Template Parameters
    +
    matTypeFloating-point matrix types.
    +
    valTypeFloating-point scalar types.
    -
    See also:
    GLSL matrixCompMult man page
    +
    See Also
    GLSL cross man page
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - +
    - + - - + + - - + + @@ -306,59 +128,235 @@ Functions
    matType glm::outerProduct genType::value_type glm::distance (vecType const & c, genType const & p0,
    vecType const & r genType const & p1 
    -
    -
    +
    -

    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.

    -
    Template Parameters:
    - - +

    Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).

    +
    Template Parameters
    +
    matTypeFloating-point matrix types.
    +
    genTypeFloating-point vector types.
    -
    See also:
    GLSL outerProduct man page
    +
    See Also
    GLSL distance man page
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    -
    Todo:
    Clarify the declaration to specify that matType doesn't have to be provided when used.
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - +
    - + - + + + + + + + + + + + + + + +
    matType::transpose_type glm::transpose genType::value_type glm::dot (matType const & genType const & x,
    genType const & y 
    )
    +
    + +

    Returns the dot product of x and y, i.e., result = x * y.

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See Also
    GLSL dot man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genType glm::faceforward (genType const & N,
    genType const & I,
    genType const & Nref 
    )
    +
    + +

    If dot(Nref, I) < 0.0, return N, otherwise, return -N.

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See Also
    GLSL faceforward man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + +
    genType::value_type glm::length (genType const &  x)
    -
    -
    +
    -

    Returns the transposed matrix of x.

    -
    Template Parameters:
    - - +

    Returns the length of x, i.e., sqrt(x * x).

    +
    Template Parameters
    +
    matTypeFloating-point matrix types.
    +
    genTypeFloating-point vector types.
    -
    See also:
    GLSL transpose man page
    +
    See Also
    GLSL length man page
    -GLSL 4.20.8 specification, section 8.6 Matrix Functions
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + + + + + + + + +
    genType glm::normalize (genType const & x)
    +
    + +

    Returns a vector in the same direction as x but with length of 1.

    +
    See Also
    GLSL normalize man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType glm::reflect (genType const & I,
    genType const & N 
    )
    +
    +

    For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See Also
    GLSL reflect man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genType glm::refract (genType const & I,
    genType const & N,
    typename genType::value_type const & eta 
    )
    +
    + +

    For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See Also
    GLSL refract man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    +
    + - diff --git a/doc/api/a00132.html b/doc/api/a00132.html index 7da7093b..f19e2db5 100644 --- a/doc/api/a00132.html +++ b/doc/api/a00132.html @@ -2,192 +2,483 @@ - -Noise functions + +Integer functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    Noise functions
    -
    +
    Integer functions
    +
    GLM Core
    - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType::value_type noise1 (genType const &x)
    template<typename genType >
    detail::tvec2< typename
    -genType::value_type > 
    noise2 (genType const &x)
    template<typename genType >
    detail::tvec3< typename
    -genType::value_type > 
    noise3 (genType const &x)
    template<typename genType >
    detail::tvec4< typename
    -genType::value_type > 
    noise4 (genType const &x)
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type bitCount (genIUType< T > const &Value)
     
    template<typename genIUType >
    genIUType bitfieldExtract (genIUType const &Value, int const &Offset, int const &Bits)
     
    template<typename genIUType >
    genIUType bitfieldInsert (genIUType const &Base, genIUType const &Insert, int const &Offset, int const &Bits)
     
    template<typename genIUType >
    genIUType bitfieldReverse (genIUType const &Value)
     
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type findLSB (genIUType< T > const &Value)
     
    template<typename T , template< typename > class genIUType>
    genIUType< T >::signed_type findMSB (genIUType< T > const &Value)
     
    template<typename genIType >
    void imulExtended (genIType const &x, genIType const &y, genIType &msb, genIType &lsb)
     
    template<typename genUType >
    genUType uaddCarry (genUType const &x, genUType const &y, genUType &carry)
     
    template<typename genUType >
    void umulExtended (genUType const &x, genUType const &y, genUType &msb, genUType &lsb)
     
    template<typename genUType >
    genUType usubBorrow (genUType const &x, genUType const &y, genUType &borrow)
     
    -

    Detailed Description

    -

    Noise functions are stochastic functions that can be used to increase visual complexity.

    -

    Values returned by the following noise functions give the appearance of randomness, but are not truly random.

    -

    Function Documentation

    - +

    Detailed Description

    +

    These all operate component-wise.

    +

    The description is per component. The notation [a, b] means the set of bits from bit-number a through bit-number b, inclusive. The lowest-order bit is bit 0.

    +

    Function Documentation

    +
    - + - - + +
    genType::value_type glm::noise1 genIUType<T>::signed_type glm::bitCount (genType const & x)genIUType< T > const & Value)
    -
    -
    +
    -

    Returns a 1D noise value based on the input value x.

    -
    Template Parameters:
    - - +

    Returns the number of bits set to 1 in the binary representation of value.

    +
    Template Parameters
    +
    genTypeFloating-point scalar or vector types.
    +
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    See also:
    GLSL noise1 man page
    +
    See Also
    GLSL bitCount man page
    -GLSL 4.20.8 specification, section 8.13 Noise Functions
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    +
    Todo:
    Clarify the declaration to specify that scalars are suported.
    - +
    - + - - + + + + + + + + + + + + + + + + + +
    detail::tvec2<typename genType::value_type> glm::noise2 genIUType glm::bitfieldExtract (genType const & x)genIUType const & Value,
    int const & Offset,
    int const & Bits 
    )
    -
    -
    +
    -

    Returns a 2D noise value based on the input value x.

    -
    Template Parameters:
    - - +

    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.

    +
    Template Parameters
    +
    genTypeFloating-point scalar or vector types.
    +
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    See also:
    GLSL noise2 man page
    +
    See Also
    GLSL bitfieldExtract man page
    -GLSL 4.20.8 specification, section 8.13 Noise Functions
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tvec3<typename genType::value_type> glm::noise3 genIUType glm::bitfieldInsert (genType const & x)genIUType const & Base,
    genIUType const & Insert,
    int const & Offset,
    int const & Bits 
    )
    -
    -
    +
    -

    Returns a 3D noise value based on the input value x.

    -
    Template Parameters:
    - - +

    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.

    +
    Template Parameters
    +
    genTypeFloating-point scalar or vector types.
    +
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    See also:
    GLSL noise3 man page
    +
    See Also
    GLSL bitfieldInsert man page
    -GLSL 4.20.8 specification, section 8.13 Noise Functions
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    - +
    - + - - + +
    detail::tvec4<typename genType::value_type> glm::noise4 genIUType glm::bitfieldReverse (genType const & x)genIUType const & Value)
    -
    -
    +
    -

    Returns a 4D noise value based on the input value x.

    -
    Template Parameters:
    - - +

    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.

    +
    Template Parameters
    +
    genTypeFloating-point scalar or vector types.
    +
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    See also:
    GLSL noise4 man page
    +
    See Also
    GLSL bitfieldReverse man page
    -GLSL 4.20.8 specification, section 8.13 Noise Functions
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + + + + + + + + +
    genIUType<T>::signed_type glm::findLSB (genIUType< 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.

    +
    Template Parameters
    + + +
    genIUTypeSigned or unsigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL findLSB man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    +
    Todo:
    Clarify the declaration to specify that scalars are suported.
    +
    +
    + +
    +
    + + + + + + + + +
    genIUType<T>::signed_type glm::findMSB (genIUType< 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.

    +
    Template Parameters
    + + +
    genIUTypeSigned or unsigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL findMSB man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    +
    Todo:
    Clarify the declaration to specify that scalars are suported.
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void glm::imulExtended (genIType const & x,
    genIType const & y,
    genIType & msb,
    genIType & 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.

    +
    Template Parameters
    + + +
    genITypeSigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL imulExtended man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genUType glm::uaddCarry (genUType const & x,
    genUType const & y,
    genUType & carry 
    )
    +
    + +

    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.

    +
    Template Parameters
    + + +
    genUTypeUnsigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL uaddCarry man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void glm::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.

    +
    Template Parameters
    + + +
    genUTypeUnsigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL umulExtended man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genUType glm::usubBorrow (genUType const & x,
    genUType const & y,
    genUType & borrow 
    )
    +
    + +

    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.

    +
    Template Parameters
    + + +
    genUTypeUnsigned integer scalar or vector types.
    +
    +
    +
    See Also
    GLSL usubBorrow man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    +
    + - diff --git a/doc/api/a00133.html b/doc/api/a00133.html index 56f01477..f94e4ee1 100644 --- a/doc/api/a00133.html +++ b/doc/api/a00133.html @@ -2,372 +2,350 @@ - -Floating-Point Pack and Unpack Functions + +Matrix functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    Floating-Point Pack and Unpack Functions
    -
    +
    Matrix functions
    +
    GLM Core
    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    double packDouble2x32 (detail::tvec2< detail::uint32 > const &v)
    uint packHalf2x16 (vec2 const &v)
    detail::uint32 packSnorm2x16 (detail::tvec2< detail::float32 > const &v)
    detail::uint32 packSnorm4x8 (detail::tvec4< detail::float32 > const &v)
    detail::uint32 packUnorm2x16 (detail::tvec2< detail::float32 > const &v)
    detail::uint32 packUnorm4x8 (detail::tvec4< detail::float32 > const &v)
    detail::tvec2< detail::uint32 > unpackDouble2x32 (double const &v)
    vec2 unpackHalf2x16 (uint const &v)
    detail::tvec2< detail::float32 > unpackSnorm2x16 (detail::uint32 const &p)
    detail::tvec4< detail::float32 > unpackSnorm4x8 (detail::uint32 const &p)
    detail::tvec2< detail::float32 > unpackUnorm2x16 (detail::uint32 const &p)
    detail::tvec4< detail::float32 > unpackUnorm4x8 (detail::uint32 const &p)
    template<typename valType >
    detail::tmat2x2< valType >
    +::value_type 
    determinant (detail::tmat2x2< valType > const &m)
     
    template<typename valType >
    detail::tmat3x3< valType >
    +::value_type 
    determinant (detail::tmat3x3< valType > const &m)
     
    template<typename valType >
    detail::tmat4x4< valType >
    +::value_type 
    determinant (detail::tmat4x4< valType > const &m)
     
    template<typename valType >
    detail::tmat2x2< valType > inverse (detail::tmat2x2< valType > const &m)
     
    template<typename valType >
    detail::tmat3x3< valType > inverse (detail::tmat3x3< valType > const &m)
     
    template<typename valType >
    detail::tmat4x4< valType > inverse (detail::tmat4x4< valType > const &m)
     
    template<typename matType >
    matType matrixCompMult (matType const &x, matType const &y)
     
    template<typename vecType , typename matType >
    matType outerProduct (vecType const &c, vecType const &r)
     
    template<typename matType >
    matType::transpose_type transpose (matType const &x)
     
    -

    Detailed Description

    -

    These functions do not operate component-wise, rather as described in each case.

    -

    Function Documentation

    - +

    Detailed Description

    +

    For each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision.

    +

    Only the single-precision floating point version is shown.

    +

    Function Documentation

    +
    - + - - + +
    double glm::packDouble2x32 detail::tmat2x2<valType>::value_type glm::determinant (detail::tvec2< detail::uint32 > const & v)detail::tmat2x2< valType > const & m)
    -
    -
    +
    -

    Returns a double-precision value obtained by packing the components of v into a 64-bit value.

    -

    If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit- level representation of v is preserved. The first vector component specifies the 32 least significant bits; the second component specifies the 32 most significant bits.

    -
    See also:
    GLSL packDouble2x32 man page
    +

    Return the determinant of a mat2 matrix.

    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See Also
    GLSL determinant man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - +
    - + - - + +
    uint glm::packHalf2x16 detail::tmat3x3<valType>::value_type glm::determinant (vec2 const & v)detail::tmat3x3< valType > const & m)
    -
    -
    +
    -

    Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.

    -

    The first vector component specifies the 16 least-significant bits of the result; the second component specifies the 16 most-significant bits.

    -
    See also:
    GLSL packHalf2x16 man page
    +

    Return the determinant of a mat3 matrix.

    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See Also
    GLSL determinant man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - +
    - + - - + +
    detail::uint32 glm::packSnorm2x16 detail::tmat4x4<valType>::value_type glm::determinant (detail::tvec2< detail::float32 > const & v)detail::tmat4x4< valType > const & m)
    -
    -
    +
    -

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    -

    Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See also:
    GLSL packSnorm2x16 man page
    +

    Return the determinant of a mat4 matrix.

    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See Also
    GLSL determinant man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - +
    - + - - + +
    detail::uint32 glm::packSnorm4x8 detail::tmat2x2<valType> glm::inverse (detail::tvec4< detail::float32 > const & v)detail::tmat2x2< valType > const & m)
    -
    -
    +
    -

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    -

    Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packSnorm4x8: round(clamp(c, -1, +1) * 127.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See also:
    GLSL packSnorm4x8 man page
    +

    Return the inverse of a mat2 matrix.

    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See Also
    GLSL inverse man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - +
    - + - - + +
    detail::uint32 glm::packUnorm2x16 detail::tmat3x3<valType> glm::inverse (detail::tvec2< detail::float32 > const & v)detail::tmat3x3< valType > const & m)
    -
    -
    +
    -

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    -

    Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See also:
    GLSL packUnorm2x16 man page
    +

    Return the inverse of a mat3 matrix.

    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See Also
    GLSL inverse man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - +
    - + - - + +
    detail::uint32 glm::packUnorm4x8 detail::tmat4x4<valType> glm::inverse (detail::tvec4< detail::float32 > const & v)detail::tmat4x4< valType > const & m)
    -
    -
    +
    -

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    -

    Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm4x8: round(clamp(c, 0, +1) * 255.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See also:
    GLSL packUnorm4x8 man page
    +

    Return the inverse of a mat4 matrix.

    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See Also
    GLSL inverse man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - +
    - + - - + + + + + + + + + + + +
    detail::tvec2<detail::uint32> glm::unpackDouble2x32 matType glm::matrixCompMult (double const & v)matType const & x,
    matType const & y 
    )
    -
    -
    +
    -

    Returns a two-component unsigned integer vector representation of v.

    -

    The bit-level representation of v is preserved. The first component of the vector contains the 32 least significant bits of the double; the second component consists the 32 most significant bits.

    -
    See also:
    GLSL unpackDouble2x32 man page
    +

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

    +
    Template Parameters
    + + +
    matTypeFloating-point matrix types.
    +
    +
    +
    See Also
    GLSL matrixCompMult man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - +
    - + - - + + + + + + + + + + + +
    vec2 glm::unpackHalf2x16 matType glm::outerProduct (uint const & v)vecType const & c,
    vecType const & r 
    )
    -
    -
    +
    -

    Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.

    -

    The first component of the vector is obtained from the 16 least-significant bits of v; the second component is obtained from the 16 most-significant bits of v.

    -
    See also:
    GLSL unpackHalf2x16 man page
    +

    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.

    +
    Template Parameters
    + + +
    matTypeFloating-point matrix types.
    +
    +
    +
    See Also
    GLSL outerProduct man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    +
    Todo:
    Clarify the declaration to specify that matType doesn't have to be provided when used.
    - +
    - + - - + +
    detail::tvec2<detail::float32> glm::unpackSnorm2x16 matType::transpose_type glm::transpose (detail::uint32 const & p)matType const & x)
    -
    -
    +
    -

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x16: clamp(f / 32767.0, -1, +1)

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See also:
    GLSL unpackSnorm2x16 man page
    +

    Returns the transposed matrix of x.

    +
    Template Parameters
    + + +
    matTypeFloating-point matrix types.
    +
    +
    +
    See Also
    GLSL transpose man page
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    - -
    -
    - - - - - - - - -
    detail::tvec4<detail::float32> glm::unpackSnorm4x8 (detail::uint32 const & p)
    -
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x8: clamp(f / 127.0, -1, +1)

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See also:
    GLSL unpackSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec2<detail::float32> glm::unpackUnorm2x16 (detail::uint32 const & p)
    -
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm2x16: f / 65535.0

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See also:
    GLSL unpackUnorm2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec4<detail::float32> glm::unpackUnorm4x8 (detail::uint32 const & p)
    -
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See also:
    GLSL unpackUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    -
    - - + + - diff --git a/doc/api/a00134.html b/doc/api/a00134.html index 76e65e21..970b22b0 100644 --- a/doc/api/a00134.html +++ b/doc/api/a00134.html @@ -2,540 +2,179 @@ - -Angle and Trigonometry Functions + +Noise functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    Angle and Trigonometry Functions
    -
    +
    Noise functions
    +
    GLM Core
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType acos (genType const &x)
    template<typename genType >
    genType acosh (genType const &x)
    template<typename genType >
    genType asin (genType const &x)
    template<typename genType >
    genType asinh (genType const &x)
    template<typename genType >
    genType atan (genType const &y, genType const &x)
    template<typename genType >
    genType atan (genType const &y_over_x)
    template<typename genType >
    genType atanh (genType const &x)
    template<typename genType >
    genType cos (genType const &angle)
    template<typename genType >
    genType cosh (genType const &angle)
    template<typename genType >
    genType degrees (genType const &radians)
    template<typename genType >
    genType radians (genType const &degrees)
    template<typename genType >
    genType sin (genType const &angle)
    template<typename genType >
    genType sinh (genType const &angle)
    template<typename genType >
    genType tan (genType const &angle)
    template<typename genType >
    genType tanh (genType const &angle)
    template<typename genType >
    genType::value_type noise1 (genType const &x)
     
    template<typename genType >
    detail::tvec2< typename
    +genType::value_type > 
    noise2 (genType const &x)
     
    template<typename genType >
    detail::tvec3< typename
    +genType::value_type > 
    noise3 (genType const &x)
     
    template<typename genType >
    detail::tvec4< typename
    +genType::value_type > 
    noise4 (genType const &x)
     
    -

    Detailed Description

    -

    Function parameters specified as angle are assumed to be in units of radians.

    -

    In no case will any of these functions result in a divide by zero error. If the divisor of a ratio is 0, then results will be undefined.

    -

    These all operate component-wise. The description is per component.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Noise functions are stochastic functions that can be used to increase visual complexity.

    +

    Values returned by the following noise functions give the appearance of randomness, but are not truly random.

    +

    Function Documentation

    +
    - +
    genType glm::acos genType::value_type glm::noise1 ( 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.

    -
    Template Parameters:
    - - +

    Returns a 1D noise value based on the input value x.

    +
    Template Parameters
    +
    genTypeFloating-point scalar or vector types.
    +
    genTypeFloating-point scalar or vector types.
    -
    See also:
    GLSL acos man page
    +
    See Also
    GLSL noise1 man page
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +GLSL 4.20.8 specification, section 8.13 Noise Functions
    - +
    - +
    genType glm::acosh detail::tvec2<typename genType::value_type> glm::noise2 ( genType const &  x)
    -
    -
    +
    -

    Arc hyperbolic cosine; returns the non-negative inverse of cosh.

    -

    Results are undefined if x < 1.

    -
    Template Parameters:
    - - +

    Returns a 2D noise value based on the input value x.

    +
    Template Parameters
    +
    genTypeFloating-point scalar or vector types.
    +
    genTypeFloating-point scalar or vector types.
    -
    See also:
    GLSL acosh man page
    +
    See Also
    GLSL noise2 man page
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +GLSL 4.20.8 specification, section 8.13 Noise Functions
    - +
    - +
    genType glm::asin detail::tvec3<typename genType::value_type> glm::noise3 ( genType const &  x)
    -
    -
    +
    -

    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.

    -
    Template Parameters:
    - - +

    Returns a 3D noise value based on the input value x.

    +
    Template Parameters
    +
    genTypeFloating-point scalar or vector types.
    +
    genTypeFloating-point scalar or vector types.
    -
    See also:
    GLSL asin man page
    +
    See Also
    GLSL noise3 man page
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +GLSL 4.20.8 specification, section 8.13 Noise Functions
    - +
    - +
    genType glm::asinh detail::tvec4<typename genType::value_type> glm::noise4 ( genType const &  x)
    -
    -
    +
    -

    Arc hyperbolic sine; returns the inverse of sinh.

    -
    Template Parameters:
    - - +

    Returns a 4D noise value based on the input value x.

    +
    Template Parameters
    +
    genTypeFloating-point scalar or vector types.
    +
    genTypeFloating-point scalar or vector types.
    -
    See also:
    GLSL asinh man page
    +
    See Also
    GLSL noise4 man page
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +GLSL 4.20.8 specification, section 8.13 Noise Functions
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::atan (genType const & y,
    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.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL atan man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -

    Referenced by glm::atan2().

    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::atan (genType const & y_over_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].

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL atan man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::atanh (genType const & x)
    -
    -
    - -

    Arc hyperbolic tangent; returns the inverse of tanh.

    -

    Results are undefined if abs(x) >= 1.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL atanh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::cos (genType const & angle)
    -
    -
    - -

    The standard trigonometric cosine function.

    -

    The values returned by this function will range from [-1, 1].

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL cos man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::cosh (genType const & angle)
    -
    -
    - -

    Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL cosh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::degrees (genType const & radians)
    -
    -
    - -

    Converts radians to degrees and returns the result.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL degrees man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::radians (genType const & degrees)
    -
    -
    - -

    Converts degrees to radians and returns the result.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL radians man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::sin (genType const & angle)
    -
    -
    - -

    The standard trigonometric sine function.

    -

    The values returned by this function will range from [-1, 1].

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL sin man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::sinh (genType const & angle)
    -
    -
    - -

    Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL sinh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::tan (genType const & angle)
    -
    -
    - -

    The standard trigonometric tangent function.

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL tan man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::tanh (genType const & angle)
    -
    -
    - -

    Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)

    -
    Template Parameters:
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See also:
    GLSL tanh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - -
    -
    -
    - - + + - diff --git a/doc/api/a00135.html b/doc/api/a00135.html index 02d8701a..01990b3d 100644 --- a/doc/api/a00135.html +++ b/doc/api/a00135.html @@ -2,401 +2,359 @@ - -Vector Relational Functions + +Floating-Point Pack and Unpack Functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    Vector Relational Functions
    -
    +
    Floating-Point Pack and Unpack Functions
    +
    GLM Core
    - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<template< typename > class vecType>
    bool all (vecType< bool > const &v)
    template<template< typename > class vecType>
    bool any (vecType< bool > const &v)
    template<typename vecType >
    vecType::bool_type equal (vecType const &x, vecType const &y)
    template<typename vecType >
    vecType::bool_type greaterThan (vecType const &x, vecType const &y)
    template<typename vecType >
    vecType::bool_type greaterThanEqual (vecType const &x, vecType const &y)
    template<typename vecType >
    vecType::bool_type lessThan (vecType const &x, vecType const &y)
    template<typename vecType >
    vecType::bool_type lessThanEqual (vecType const &x, vecType const &y)
    template<template< typename > class vecType>
    vecType< bool > not_ (vecType< bool > const &v)
    template<typename vecType >
    vecType::bool_type notEqual (vecType const &x, vecType const &y)
    double packDouble2x32 (detail::tvec2< detail::uint32 > const &v)
     
    uint packHalf2x16 (vec2 const &v)
     
    detail::uint32 packSnorm2x16 (detail::tvec2< detail::float32 > const &v)
     
    detail::uint32 packSnorm4x8 (detail::tvec4< detail::float32 > const &v)
     
    detail::uint32 packUnorm2x16 (detail::tvec2< detail::float32 > const &v)
     
    detail::uint32 packUnorm4x8 (detail::tvec4< detail::float32 > const &v)
     
    detail::tvec2< detail::uint32 > unpackDouble2x32 (double const &v)
     
    vec2 unpackHalf2x16 (uint const &v)
     
    detail::tvec2< detail::float32 > unpackSnorm2x16 (detail::uint32 const &p)
     
    detail::tvec4< detail::float32 > unpackSnorm4x8 (detail::uint32 const &p)
     
    detail::tvec2< detail::float32 > unpackUnorm2x16 (detail::uint32 const &p)
     
    detail::tvec4< detail::float32 > unpackUnorm4x8 (detail::uint32 const &p)
     
    -

    Detailed Description

    -

    Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results.

    -

    For vector results, use the following built-in functions.

    -

    In all cases, the sizes of all the input and return vectors for any particular call must match.

    -

    Function Documentation

    - +

    Detailed Description

    +

    These functions do not operate component-wise, rather as described in each case.

    +

    Function Documentation

    +
    - + - +
    bool glm::all double glm::packDouble2x32 (vecType< bool > const & detail::tvec2< detail::uint32 > const &  v)
    -
    -
    +
    -

    Returns true if all components of x are true.

    -
    Template Parameters:
    - - -
    vecTypeBoolean vector types.
    -
    -
    -
    See also:
    GLSL all man page
    +

    Returns a double-precision value obtained by packing the components of v into a 64-bit value.

    +

    If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit- level representation of v is preserved. The first vector component specifies the 32 least significant bits; the second component specifies the 32 most significant bits.

    +
    See Also
    GLSL packDouble2x32 man page
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + - +
    bool glm::any uint glm::packHalf2x16 (vecType< bool > const & vec2 const &  v)
    -
    -
    +
    -

    Returns true if any component of x is true.

    -
    Template Parameters:
    - - -
    vecTypeBoolean vector types.
    -
    -
    -
    See also:
    GLSL any man page
    +

    Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.

    +

    The first vector component specifies the 16 least-significant bits of the result; the second component specifies the 16 most-significant bits.

    +
    See Also
    GLSL packHalf2x16 man page
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + - - - - - - - - - - - - - - -
    vecType::bool_type glm::equal detail::uint32 glm::packSnorm2x16 (vecType const & x,
    vecType const & y 
    )
    -
    -
    - -

    Returns the component-wise comparison of result x == y.

    -
    Template Parameters:
    - - -
    vecTypeFloating-point, integer or boolean vector types.
    -
    -
    -
    See also:
    GLSL equal man page
    -
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    vecType::bool_type glm::greaterThan (vecType const & x,
    vecType const & y 
    )
    -
    -
    - -

    Returns the component-wise comparison of result x > y.

    -
    Template Parameters:
    - - -
    vecTypeFloating-point or integer vector types.
    -
    -
    -
    See also:
    GLSL greaterThan man page
    -
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    vecType::bool_type glm::greaterThanEqual (vecType const & x,
    vecType const & y 
    )
    -
    -
    - -

    Returns the component-wise comparison of result x >= y.

    -
    Template Parameters:
    - - -
    vecTypeFloating-point or integer vector types.
    -
    -
    -
    See also:
    GLSL greaterThanEqual man page
    -
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    vecType::bool_type glm::lessThan (vecType const & x,
    vecType const & y 
    )
    -
    -
    - -

    Returns the component-wise comparison result of x < y.

    -
    Template Parameters:
    - - -
    vecTypeFloating-point or integer vector types.
    -
    -
    -
    See also:
    GLSL lessThan man page
    -
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    vecType::bool_type glm::lessThanEqual (vecType const & x,
    vecType const & y 
    )
    -
    -
    - -

    Returns the component-wise comparison of result x <= y.

    -
    Template Parameters:
    - - -
    vecTypeFloating-point or integer vector types.
    -
    -
    -
    See also:
    GLSL lessThanEqual man page
    -
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - -
    -
    - -
    -
    - - - - - +
    vecType<bool> glm::not_ (vecType< bool > const & detail::tvec2< detail::float32 > const &  v)
    -
    -
    +
    -

    Returns the component-wise logical complement of x.

    -

    /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.

    -
    Template Parameters:
    - - -
    vecTypeBoolean vector types.
    -
    -
    -
    See also:
    GLSL not man page
    +

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    +

    Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See Also
    GLSL packSnorm2x16 man page
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + - - - - - + + - - - - - - -
    vecType::bool_type glm::notEqual detail::uint32 glm::packSnorm4x8 (vecType const & x,
    detail::tvec4< detail::float32 > const & v) vecType const & y 
    )
    -
    -
    +
    -

    Returns the component-wise comparison of result x != y.

    -
    Template Parameters:
    - - -
    vecTypeFloating-point, integer or boolean vector types.
    -
    -
    -
    See also:
    GLSL notEqual man page
    +

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    +

    Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packSnorm4x8: round(clamp(c, -1, +1) * 127.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See Also
    GLSL packSnorm4x8 man page
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + + + + + + + + +
    detail::uint32 glm::packUnorm2x16 (detail::tvec2< detail::float32 > const & v)
    +
    + +

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    +

    Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See Also
    GLSL packUnorm2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +
    +
    + +
    +
    + + + + + + + + +
    detail::uint32 glm::packUnorm4x8 (detail::tvec4< detail::float32 > const & v)
    +
    +

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    +

    Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm4x8: round(clamp(c, 0, +1) * 255.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See Also
    GLSL packUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec2<detail::uint32> glm::unpackDouble2x32 (double const & v)
    +
    + +

    Returns a two-component unsigned integer vector representation of v.

    +

    The bit-level representation of v is preserved. The first component of the vector contains the 32 least significant bits of the double; the second component consists the 32 most significant bits.

    +
    See Also
    GLSL unpackDouble2x32 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    vec2 glm::unpackHalf2x16 (uint const & v)
    +
    + +

    Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.

    +

    The first component of the vector is obtained from the 16 least-significant bits of v; the second component is obtained from the 16 most-significant bits of v.

    +
    See Also
    GLSL unpackHalf2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec2<detail::float32> glm::unpackSnorm2x16 (detail::uint32 const & p)
    +
    + +

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x16: clamp(f / 32767.0, -1, +1)

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See Also
    GLSL unpackSnorm2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec4<detail::float32> glm::unpackSnorm4x8 (detail::uint32 const & p)
    +
    + +

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x8: clamp(f / 127.0, -1, +1)

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See Also
    GLSL unpackSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec2<detail::float32> glm::unpackUnorm2x16 (detail::uint32 const & p)
    +
    + +

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm2x16: f / 65535.0

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See Also
    GLSL unpackUnorm2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec4<detail::float32> glm::unpackUnorm4x8 (detail::uint32 const & p)
    +
    + +

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See Also
    GLSL unpackUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    +
    + - diff --git a/doc/api/a00136.html b/doc/api/a00136.html index 227207ab..7ff9ad4b 100644 --- a/doc/api/a00136.html +++ b/doc/api/a00136.html @@ -2,80 +2,527 @@ - -GTC Extensions (Stable) + +Angle and Trigonometry Functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Functions
    -
    GTC Extensions (Stable)
    - +
    Angle and Trigonometry Functions
    +
    GLM Core
    - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Modules

     GLM_GTC_half_float: Half-precision floating-point based types and functions
     GLM_GTC_matrix_access: Access matrix rows and columns
     GLM_GTC_matrix_integer: Integer matrix types
     GLM_GTC_matrix_inverse: Additional matrix inverse function
     GLM_GTC_matrix_transform: Matrix transform functions
     GLM_GTC_noise: Procedural noise functions
     GLM_GTC_quaternion: Quaternion types and functions
     GLM_GTC_random: Random number generation
     GLM_GTC_swizzle: Swizzle 'operator' implementation
     GLM_GTC_type_precision: Vector and matrix types with defined precisions
     GLM_GTC_type_ptr: Memory layout access

    +Functions

    template<typename genType >
    genType acos (genType const &x)
     
    template<typename genType >
    genType acosh (genType const &x)
     
    template<typename genType >
    genType asin (genType const &x)
     
    template<typename genType >
    genType asinh (genType const &x)
     
    template<typename genType >
    genType atan (genType const &y, genType const &x)
     
    template<typename genType >
    genType atan (genType const &y_over_x)
     
    template<typename genType >
    genType atanh (genType const &x)
     
    template<typename genType >
    genType cos (genType const &angle)
     
    template<typename genType >
    genType cosh (genType const &angle)
     
    template<typename genType >
    genType degrees (genType const &radians)
     
    template<typename genType >
    genType radians (genType const &degrees)
     
    template<typename genType >
    genType sin (genType const &angle)
     
    template<typename genType >
    genType sinh (genType const &angle)
     
    template<typename genType >
    genType tan (genType const &angle)
     
    template<typename genType >
    genType tanh (genType const &angle)
     
    -

    Detailed Description

    -

    Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.

    -

    GTC extensions aim to be stable.

    -

    Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

    +

    Detailed Description

    +

    Function parameters specified as angle are assumed to be in units of radians.

    +

    In no case will any of these functions result in a divide by zero error. If the divisor of a ratio is 0, then results will be undefined.

    +

    These all operate component-wise. The description is per component.

    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    genType glm::acos (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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL acos man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +
    +
    + +
    +
    + + + + + + + + +
    genType glm::acosh (genType const & x)
    +
    +

    Arc hyperbolic cosine; returns the non-negative inverse of cosh.

    +

    Results are undefined if x < 1.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL acosh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +
    +
    + +
    +
    + + + + + + + + +
    genType glm::asin (genType const & x)
    +
    + +

    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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL asin man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::asinh (genType const & x)
    +
    + +

    Arc hyperbolic sine; returns the inverse of sinh.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL asinh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType glm::atan (genType const & y,
    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.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL atan man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +

    Referenced by glm::atan2().

    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::atan (genType const & y_over_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].

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL atan man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::atanh (genType const & x)
    +
    + +

    Arc hyperbolic tangent; returns the inverse of tanh.

    +

    Results are undefined if abs(x) >= 1.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL atanh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::cos (genType const & angle)
    +
    + +

    The standard trigonometric cosine function.

    +

    The values returned by this function will range from [-1, 1].

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL cos man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::cosh (genType const & angle)
    +
    + +

    Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL cosh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::degrees (genType const & radians)
    +
    + +

    Converts radians to degrees and returns the result.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL degrees man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::radians (genType const & degrees)
    +
    + +

    Converts degrees to radians and returns the result.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL radians man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::sin (genType const & angle)
    +
    + +

    The standard trigonometric sine function.

    +

    The values returned by this function will range from [-1, 1].

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL sin man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::sinh (genType const & angle)
    +
    + +

    Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL sinh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::tan (genType const & angle)
    +
    + +

    The standard trigonometric tangent function.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL tan man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::tanh (genType const & angle)
    +
    + +

    Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See Also
    GLSL tanh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    +
    + - diff --git a/doc/api/a00137.html b/doc/api/a00137.html index 763dfca1..822d33c6 100644 --- a/doc/api/a00137.html +++ b/doc/api/a00137.html @@ -2,129 +2,388 @@ - -GTX Extensions (Experimental) + +Vector Relational Functions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Functions
    -
    GTX Extensions (Experimental)
    - +
    Vector Relational Functions
    +
    GLM Core
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Modules

     GLM_GTX_associated_min_max: Associated Min/Max
     GLM_GTX_bit: Extended bitwise operations
     GLM_GTX_closest_point: Find closest point
     GLM_GTX_color_cast: Color conversion
     GLM_GTX_color_space: RGB to HSV conversion
     GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion
     GLM_GTX_compatibility: Cg and HLSL compatibility
     GLM_GTX_component_wise: Component wise
     GLM_GTX_constants: Provide build-in constants
     GLM_GTX_epsilon: Epsilon comparison
     GLM_GTX_euler_angles: Matrix from euler angles
     GLM_GTX_extend: Position extending
     GLM_GTX_extented_min_max: Extended min max
     GLM_GTX_fast_exponential: Fast exponentiation functions
     GLM_GTX_fast_square_root: Fast square root functions
     GLM_GTX_fast_trigonometry: Fast trigonometric functions
     GLM_GTX_gradient_paint: Procedural gradient color
     GLM_GTX_handed_coordinate_space: Space Handedness
     GLM_GTX_inertia: Intertial matrix
     GLM_GTX_int_10_10_10_2: Packed integer
     GLM_GTX_integer: Extended integer functions
     GLM_GTX_intersect: Intersection tests
     GLM_GTX_log_base: Log with base
     GLM_GTX_matrix_cross_product: Cross product matrix form
     GLM_GTX_matrix_interpolation: Rotation and translation matrix interpolation
     GLM_GTX_matrix_major_storage: Build matrix
     GLM_GTX_matrix_operation: Extended matrix operations
     GLM_GTX_matrix_query: Query matrix properties
     GLM_GTX_mixed_producte: Mixed product
     GLM_GTX_multiple: Multiples
     GLM_GTX_noise: Procedural noise functions
     GLM_GTX_norm: Vector norm calculations
     GLM_GTX_normal: Compute normals
     GLM_GTX_normalize_dot: Normalize dot product
     GLM_GTX_number_precision: Number precision
     GLM_GTX_ocl_type: OpenCL types
     GLM_GTX_optimum_pow: Optimum pow
     GLM_GTX_orthonormalize: Orthonormalize
     GLM_GTX_perpendicular: Perpendicular
     GLM_GTX_polar_coordinates: Polar coordinates
     GLM_GTX_projection: Projection
     GLM_GTX_quaternion: Extented quaternion types and functions
     GLM_GTX_random: Random
     GLM_GTX_raw_data: Raw data
     GLM_GTX_reciprocal: Reciprocal
     GLM_GTX_rotate_vector: Rotate vector
     GLM_GTX_simd_mat4: SIMD mat4 type and functions
     GLM_GTX_simd_vec4: SIMD vec4 type and functions
     GLM_GTX_spline: Spline
     GLM_GTX_std_based_type: Add types based on STL
     GLM_GTX_string_cast: String cast
     GLM_GTX_transform: Extented transformation matrices
     GLM_GTX_transform2: Extra transformation matrices
     GLM_GTX_ulp: Accuracy measurement
     GLM_GTX_vec1: Add vec1 types
     GLM_GTX_vector_access: Vector access
     GLM_GTX_vector_angle: Vector angle
     GLM_GTX_vector_query: Vector query
     GLM_GTX_verbose_operator: Verbose operator
     GLM_GTX_wrap: Texture coordinate wrap modes

    +Functions

    template<template< typename > class vecType>
    bool all (vecType< bool > const &v)
     
    template<template< typename > class vecType>
    bool any (vecType< bool > const &v)
     
    template<typename vecType >
    vecType::bool_type equal (vecType const &x, vecType const &y)
     
    template<typename vecType >
    vecType::bool_type greaterThan (vecType const &x, vecType const &y)
     
    template<typename vecType >
    vecType::bool_type greaterThanEqual (vecType const &x, vecType const &y)
     
    template<typename vecType >
    vecType::bool_type lessThan (vecType const &x, vecType const &y)
     
    template<typename vecType >
    vecType::bool_type lessThanEqual (vecType const &x, vecType const &y)
     
    template<template< typename > class vecType>
    vecType< bool > not_ (vecType< bool > const &v)
     
    template<typename vecType >
    vecType::bool_type notEqual (vecType const &x, vecType const &y)
     
    -

    Detailed Description

    -

    Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.

    -

    Experimental extensions are useful functions and types, but the development of their API and functionality is not necessarily stable. They can change substantially between versions. Backwards compatibility is not much of an issue for them.

    -

    Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

    +

    Detailed Description

    +

    Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results.

    +

    For vector results, use the following built-in functions.

    +

    In all cases, the sizes of all the input and return vectors for any particular call must match.

    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    bool glm::all (vecType< bool > const & v)
    +
    + +

    Returns true if all components of x are true.

    +
    Template Parameters
    + + +
    vecTypeBoolean vector types.
    +
    +
    +
    See Also
    GLSL all man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +
    +
    + +
    +
    + + + + + + + + +
    bool glm::any (vecType< bool > const & v)
    +
    +

    Returns true if any component of x is true.

    +
    Template Parameters
    + + +
    vecTypeBoolean vector types.
    +
    +
    +
    See Also
    GLSL any man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    vecType::bool_type glm::equal (vecType const & x,
    vecType const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x == y.

    +
    Template Parameters
    + + +
    vecTypeFloating-point, integer or boolean vector types.
    +
    +
    +
    See Also
    GLSL equal man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    vecType::bool_type glm::greaterThan (vecType const & x,
    vecType const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x > y.

    +
    Template Parameters
    + + +
    vecTypeFloating-point or integer vector types.
    +
    +
    +
    See Also
    GLSL greaterThan man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    vecType::bool_type glm::greaterThanEqual (vecType const & x,
    vecType const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x >= y.

    +
    Template Parameters
    + + +
    vecTypeFloating-point or integer vector types.
    +
    +
    +
    See Also
    GLSL greaterThanEqual man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    vecType::bool_type glm::lessThan (vecType const & x,
    vecType const & y 
    )
    +
    + +

    Returns the component-wise comparison result of x < y.

    +
    Template Parameters
    + + +
    vecTypeFloating-point or integer vector types.
    +
    +
    +
    See Also
    GLSL lessThan man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    vecType::bool_type glm::lessThanEqual (vecType const & x,
    vecType const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x <= y.

    +
    Template Parameters
    + + +
    vecTypeFloating-point or integer vector types.
    +
    +
    +
    See Also
    GLSL lessThanEqual man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    vecType<bool> glm::not_ (vecType< bool > const & v)
    +
    + +

    Returns the component-wise logical complement of x.

    +

    /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.

    +
    Template Parameters
    + + +
    vecTypeBoolean vector types.
    +
    +
    +
    See Also
    GLSL not man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    vecType::bool_type glm::notEqual (vecType const & x,
    vecType const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x != y.

    +
    Template Parameters
    + + +
    vecTypeFloating-point, integer or boolean vector types.
    +
    +
    +
    See Also
    GLSL notEqual man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    +
    + - diff --git a/doc/api/a00138.html b/doc/api/a00138.html index 1c1bca58..28c01fc3 100644 --- a/doc/api/a00138.html +++ b/doc/api/a00138.html @@ -2,68 +2,86 @@ - -VIRTREV Extensions + +GTC Extensions (Stable) + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    VIRTREV Extensions
    -
    +
    GTC Extensions (Stable)
    +
    - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Modules

     GLM_VIRTREV_xstream: xml like output
     GLM_GTC_constants
     
     GLM_GTC_epsilon
     
     GLM_GTC_half_float
     
     GLM_GTC_matrix_access
     
     GLM_GTC_matrix_integer
     
     GLM_GTC_matrix_inverse
     
     GLM_GTC_matrix_transform
     
     GLM_GTC_noise
     
     GLM_GTC_quaternion
     
     GLM_GTC_random
     
     GLM_GTC_reciprocal
     
     GLM_GTC_swizzle
     
     GLM_GTC_type_precision
     
     GLM_GTC_type_ptr
     
     GLM_GTC_ulp
     
    -

    Detailed Description

    -

    Extensions develop and maintain by Mathieu [matrem] Roumillac (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660).

    -
    - - +

    Detailed Description

    +

    Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.

    +

    GTC extensions aim to be stable.

    +

    Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

    + + - diff --git a/doc/api/a00139.html b/doc/api/a00139.html index 523325bd..4e6c9af3 100644 --- a/doc/api/a00139.html +++ b/doc/api/a00139.html @@ -2,82 +2,164 @@ - -GLM Core + +GTX Extensions (Experimental) + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM Core
    -
    +
    GTX Extensions (Experimental)
    +
    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Modules

     Common functions
     Exponential functions
     Geometric functions
     Integer functions
     Matrix functions
     Noise functions
     Floating-Point Pack and Unpack Functions
     Angle and Trigonometry Functions
     Vector Relational Functions
     Types
     Precision types
     Template types
     GLM_GTX_associated_min_max
     
     GLM_GTX_bit
     
     GLM_GTX_closest_point
     
     GLM_GTX_color_cast
     
     GLM_GTX_color_space
     
     GLM_GTX_color_space_YCoCg
     
     GLM_GTX_compatibility
     
     GLM_GTX_component_wise
     
     GLM_GTX_euler_angles
     
     GLM_GTX_extend
     
     GLM_GTX_extented_min_max
     
     GLM_GTX_fast_exponential
     
     GLM_GTX_fast_square_root
     
     GLM_GTX_fast_trigonometry
     
     GLM_GTX_gradient_paint
     
     GLM_GTX_handed_coordinate_space
     
     GLM_GTX_inertia
     
     GLM_GTX_int_10_10_10_2
     
     GLM_GTX_integer
     
     GLM_GTX_intersect
     
     GLM_GTX_log_base
     
     GLM_GTX_matrix_cross_product
     
     GLM_GTX_matrix_interpolation
     
     GLM_GTX_matrix_major_storage
     
     GLM_GTX_matrix_operation
     
     GLM_GTX_matrix_query
     
     GLM_GTX_mixed_producte
     
     GLM_GTX_multiple
     
     GLM_GTX_norm
     
     GLM_GTX_normal
     
     GLM_GTX_normalize_dot
     
     GLM_GTX_number_precision
     
     GLM_GTX_ocl_type
     
     GLM_GTX_optimum_pow
     
     GLM_GTX_orthonormalize
     
     GLM_GTX_perpendicular
     
     GLM_GTX_polar_coordinates
     
     GLM_GTX_projection
     
     GLM_GTX_quaternion
     
     GLM_GTX_raw_data
     
     GLM_GTX_rotate_vector
     
     GLM_GTX_simd_mat4
     
     GLM_GTX_simd_vec4
     
     GLM_GTX_spline
     
     GLM_GTX_std_based_type
     
     GLM_GTX_string_cast
     
     GLM_GTX_transform
     
     GLM_GTX_transform2
     
     GLM_GTX_vec1
     
     GLM_GTX_vector_access
     
     GLM_GTX_vector_angle
     
     GLM_GTX_vector_query
     
     GLM_GTX_verbose_operator
     
     GLM_GTX_wrap
     
    -

    Detailed Description

    -

    The core of GLM, which implements exactly and only the GLSL specification to the degree possible.

    -

    The GLM core consists of C++ types that mirror GLSL types and C++ functions that mirror the GLSL functions. It also includes a set of precision-based types that can be used in the appropriate functions. The C++ types are all based on a basic set of template types.

    -

    The best documentation for GLM Core is the current GLSL specification, version 4.2 (pdf file). There are a few differences between GLM core and GLSL.

    -

    GLM core functionnalities require <glm/glm.hpp> to be included to be used.

    -
    - - +

    Detailed Description

    +

    Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.

    +

    Experimental extensions are useful functions and types, but the development of their API and functionality is not necessarily stable. They can change substantially between versions. Backwards compatibility is not much of an issue for them.

    +

    Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

    + + - diff --git a/doc/api/a00140.html b/doc/api/a00140.html index 9f5bb25e..76bc4e22 100644 --- a/doc/api/a00140.html +++ b/doc/api/a00140.html @@ -2,810 +2,56 @@ - -Types + +VIRTREV Extensions + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Modules
    -
    Types
    -
    GLM Core
    +
    VIRTREV Extensions
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +

    -Typedefs

    typedef detail::tvec2< bool > bvec2
    typedef detail::tvec3< bool > bvec3
    typedef detail::tvec4< bool > bvec4
    typedef detail::tmat2x2< double > dmat2
    typedef detail::tmat2x2< double > dmat2x2
    typedef detail::tmat2x3< double > dmat2x3
    typedef detail::tmat2x4< double > dmat2x4
    typedef detail::tmat3x3< double > dmat3
    typedef detail::tmat3x2< double > dmat3x2
    typedef detail::tmat3x3< double > dmat3x3
    typedef detail::tmat3x4< double > dmat3x4
    typedef detail::tmat4x4< double > dmat4
    typedef detail::tmat4x2< double > dmat4x2
    typedef detail::tmat4x3< double > dmat4x3
    typedef detail::tmat4x4< double > dmat4x4
    typedef detail::tvec2< double > dvec2
    typedef detail::tvec3< double > dvec3
    typedef detail::tvec4< double > dvec4
    typedef mediump_ivec2 ivec2
    typedef mediump_ivec3 ivec3
    typedef mediump_ivec4 ivec4
    typedef mat2x2 mat2
    typedef mediump_mat2x2 mat2x2
    typedef mediump_mat2x3 mat2x3
    typedef mediump_mat2x4 mat2x4
    typedef mat3x3 mat3
    typedef mediump_mat3x2 mat3x2
    typedef mediump_mat3x3 mat3x3
    typedef mediump_mat3x4 mat3x4
    typedef mat4x4 mat4
    typedef mediump_mat4x2 mat4x2
    typedef mediump_mat4x3 mat4x3
    typedef mediump_mat4x4 mat4x4
    typedef mediump_uvec2 uvec2
    typedef mediump_uvec3 uvec3
    typedef mediump_uvec4 uvec4
    typedef mediump_vec2 vec2
    typedef mediump_vec3 vec3
    typedef mediump_vec4 vec4

    +Modules

     GLM_VIRTREV_xstream: xml like output
     
    -

    Detailed Description

    -

    The standard types defined by the specification.

    -

    These types are all typedefs of more generalized, template types. To see the definiton of these template types, go to Template types.

    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef detail::tvec2<bool> bvec2
    -
    -
    - -

    2 components vector of boolean.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 248 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<bool> bvec3
    -
    -
    - -

    3 components vector of boolean.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 253 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<bool> bvec4
    -
    -
    - -

    4 components vector of boolean.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 258 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<double> dmat2
    -
    -
    - -

    2 * 2 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 281 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<double> dmat2x2
    -
    -
    - -

    2 * 2 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 296 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<double> dmat2x3
    -
    -
    - -

    2 * 3 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 301 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<double> dmat2x4
    -
    -
    - -

    2 * 4 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 306 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<double> dmat3
    -
    -
    - -

    3 * 3 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 286 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<double> dmat3x2
    -
    -
    - -

    3 * 2 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 311 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<double> dmat3x3
    -
    -
    - -

    3 * 3 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 316 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<double> dmat3x4
    -
    -
    - -

    3 * 4 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 321 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<double> dmat4
    -
    -
    - -

    4 * 4 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 291 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<double> dmat4x2
    -
    -
    - -

    4 * 2 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 326 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<double> dmat4x3
    -
    -
    - -

    4 * 3 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 331 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<double> dmat4x4
    -
    -
    - -

    4 * 4 matrix of double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 336 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<double> dvec2
    -
    -
    - -

    Vector of 2 double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 266 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<double> dvec3
    -
    -
    - -

    Vector of 3 double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 271 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<double> dvec4
    -
    -
    - -

    Vector of 4 double-precision floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 276 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_ivec2 ivec2
    -
    -
    - -

    2 components vector of signed integer numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 197 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_ivec3 ivec3
    -
    -
    - -

    3 components vector of signed integer numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 202 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_ivec4 ivec4
    -
    -
    - -

    4 components vector of signed integer numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 207 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mat2x2 mat2
    -
    -
    - -

    2 columns of 2 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 166 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat2x2 mat2x2
    -
    -
    - -

    2 columns of 2 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 119 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat2x3 mat2x3
    -
    -
    - -

    2 columns of 3 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 124 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat2x4 mat2x4
    -
    -
    - -

    2 columns of 4 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 129 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mat3x3 mat3
    -
    -
    - -

    3 columns of 3 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 171 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat3x2 mat3x2
    -
    -
    - -

    3 columns of 2 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 134 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat3x3 mat3x3
    -
    -
    - -

    3 columns of 3 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 139 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat3x4 mat3x4
    -
    -
    - -

    3 columns of 4 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 144 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mat4x4 mat4
    -
    -
    - -

    4 columns of 4 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 176 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat4x2 mat4x2
    -
    -
    - -

    4 columns of 2 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 149 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat4x3 mat4x3
    -
    -
    - -

    4 columns of 3 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 154 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_mat4x4 mat4x4
    -
    -
    - -

    4 columns of 4 components matrix of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 159 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_uvec2 uvec2
    -
    -
    - -

    2 components vector of unsigned integer numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 229 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_uvec3 uvec3
    -
    -
    - -

    3 components vector of unsigned integer numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 234 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_uvec4 uvec4
    -
    -
    - -

    4 components vector of unsigned integer numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 239 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_vec2 vec2
    -
    -
    - -

    2 components vector of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 104 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_vec3 vec3
    -
    -
    - -

    3 components vector of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 109 of file type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_vec4 vec4
    -
    -
    - -

    4 components vector of floating-point numbers.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 114 of file type.hpp.

    - -
    -
    -
    - - +

    Detailed Description

    +

    Extensions develop and maintain by Mathieu [matrem] Roumillac (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660).

    + + - diff --git a/doc/api/a00141.html b/doc/api/a00141.html index e6c585a3..6b4ad268 100644 --- a/doc/api/a00141.html +++ b/doc/api/a00141.html @@ -2,1722 +2,81 @@ - -Precision types + +GLM Core + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Modules
    -
    Precision types
    -
    GLM Core
    +
    GLM Core
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    typedef highp_float_t highp_float
    typedef detail::highp_int_t highp_int
    typedef detail::tvec2< highp_int > highp_ivec2
    typedef detail::tvec3< highp_int > highp_ivec3
    typedef detail::tvec4< highp_int > highp_ivec4
    typedef detail::tmat2x2
    -< highp_float > 
    highp_mat2
    typedef detail::tmat2x2
    -< highp_float > 
    highp_mat2x2
    typedef detail::tmat2x3
    -< highp_float > 
    highp_mat2x3
    typedef detail::tmat2x4
    -< highp_float > 
    highp_mat2x4
    typedef detail::tmat3x3
    -< highp_float > 
    highp_mat3
    typedef detail::tmat3x2
    -< highp_float > 
    highp_mat3x2
    typedef detail::tmat3x3
    -< highp_float > 
    highp_mat3x3
    typedef detail::tmat3x4
    -< highp_float > 
    highp_mat3x4
    typedef detail::tmat4x4
    -< highp_float > 
    highp_mat4
    typedef detail::tmat4x2
    -< highp_float > 
    highp_mat4x2
    typedef detail::tmat4x3
    -< highp_float > 
    highp_mat4x3
    typedef detail::tmat4x4
    -< highp_float > 
    highp_mat4x4
    typedef detail::highp_uint_t highp_uint
    typedef detail::tvec2< highp_uint > highp_uvec2
    typedef detail::tvec3< highp_uint > highp_uvec3
    typedef detail::tvec4< highp_uint > highp_uvec4
    typedef detail::tvec2
    -< highp_float > 
    highp_vec2
    typedef detail::tvec3
    -< highp_float > 
    highp_vec3
    typedef detail::tvec4
    -< highp_float > 
    highp_vec4
    typedef lowp_float_t lowp_float
    typedef detail::lowp_int_t lowp_int
    typedef detail::tvec2< lowp_int > lowp_ivec2
    typedef detail::tvec3< lowp_int > lowp_ivec3
    typedef detail::tvec4< lowp_int > lowp_ivec4
    typedef detail::tmat2x2
    -< lowp_float > 
    lowp_mat2
    typedef detail::tmat2x2
    -< lowp_float > 
    lowp_mat2x2
    typedef detail::tmat2x3
    -< lowp_float > 
    lowp_mat2x3
    typedef detail::tmat2x4
    -< lowp_float > 
    lowp_mat2x4
    typedef detail::tmat3x3
    -< lowp_float > 
    lowp_mat3
    typedef detail::tmat3x2
    -< lowp_float > 
    lowp_mat3x2
    typedef detail::tmat3x3
    -< lowp_float > 
    lowp_mat3x3
    typedef detail::tmat3x4
    -< lowp_float > 
    lowp_mat3x4
    typedef detail::tmat4x4
    -< lowp_float > 
    lowp_mat4
    typedef detail::tmat4x2
    -< lowp_float > 
    lowp_mat4x2
    typedef detail::tmat4x3
    -< lowp_float > 
    lowp_mat4x3
    typedef detail::tmat4x4
    -< lowp_float > 
    lowp_mat4x4
    typedef detail::lowp_uint_t lowp_uint
    typedef detail::tvec2< lowp_uint > lowp_uvec2
    typedef detail::tvec3< lowp_uint > lowp_uvec3
    typedef detail::tvec4< lowp_uint > lowp_uvec4
    typedef detail::tvec2< lowp_float > lowp_vec2
    typedef detail::tvec3< lowp_float > lowp_vec3
    typedef detail::tvec4< lowp_float > lowp_vec4
    typedef mediump_float_t mediump_float
    typedef detail::mediump_int_t mediump_int
    typedef detail::tvec2
    -< mediump_int > 
    mediump_ivec2
    typedef detail::tvec3
    -< mediump_int > 
    mediump_ivec3
    typedef detail::tvec4
    -< mediump_int > 
    mediump_ivec4
    typedef detail::tmat2x2
    -< mediump_float > 
    mediump_mat2
    typedef detail::tmat2x2
    -< mediump_float > 
    mediump_mat2x2
    typedef detail::tmat2x3
    -< mediump_float > 
    mediump_mat2x3
    typedef detail::tmat2x4
    -< mediump_float > 
    mediump_mat2x4
    typedef detail::tmat3x3
    -< mediump_float > 
    mediump_mat3
    typedef detail::tmat3x2
    -< mediump_float > 
    mediump_mat3x2
    typedef detail::tmat3x3
    -< mediump_float > 
    mediump_mat3x3
    typedef detail::tmat3x4
    -< mediump_float > 
    mediump_mat3x4
    typedef detail::tmat4x4
    -< mediump_float > 
    mediump_mat4
    typedef detail::tmat4x2
    -< mediump_float > 
    mediump_mat4x2
    typedef detail::tmat4x3
    -< mediump_float > 
    mediump_mat4x3
    typedef detail::tmat4x4
    -< mediump_float > 
    mediump_mat4x4
    typedef detail::mediump_uint_t mediump_uint
    typedef detail::tvec2
    -< mediump_uint > 
    mediump_uvec2
    typedef detail::tvec3
    -< mediump_uint > 
    mediump_uvec3
    typedef detail::tvec4
    -< mediump_uint > 
    mediump_uvec4
    typedef detail::tvec2
    -< mediump_float > 
    mediump_vec2
    typedef detail::tvec3
    -< mediump_float > 
    mediump_vec3
    typedef detail::tvec4
    -< mediump_float > 
    mediump_vec4
    typedef uint_t uint

    +Modules

     Common functions
     
     Exponential functions
     
     Geometric functions
     
     Integer functions
     
     Matrix functions
     
     Noise functions
     
     Floating-Point Pack and Unpack Functions
     
     Angle and Trigonometry Functions
     
     Vector Relational Functions
     
     Types
     
     Precision types
     
     Template types
     
    -

    Detailed Description

    -

    Non-GLSL types that are used to define precision-based types.

    -

    The GLSL language allows the user to define the precision of a particular variable. In OpenGL's GLSL, these precision qualifiers have no effect; they are there for compatibility with OpenGL ES's precision qualifiers, where they do have an effect.

    -

    C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing: a number of typedefs of the Template types that use a particular precision.

    -

    None of these types make any guarantees about the actual precision used.

    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef highp_float_t highp_float
    -
    -
    - -

    High precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.4 Floats
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 67 of file type_float.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::highp_int_t highp_int
    -
    -
    - -

    High precision signed integer.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 81 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<highp_int> highp_ivec2
    -
    -
    - -

    2 components vector of high precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 275 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<highp_int> highp_ivec3
    -
    -
    - -

    3 components vector of high precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 300 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<highp_int> highp_ivec4
    -
    -
    - -

    4 components vector of high precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 357 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<highp_float> highp_mat2
    -
    -
    - -

    2 columns of 2 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 286 of file type_mat2x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<highp_float> highp_mat2x2
    -
    -
    - -

    2 columns of 2 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 307 of file type_mat2x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<highp_float> highp_mat2x3
    -
    -
    - -

    2 columns of 3 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 250 of file type_mat2x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<highp_float> highp_mat2x4
    -
    -
    - -

    2 columns of 4 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 252 of file type_mat2x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<highp_float> highp_mat3
    -
    -
    - -

    3 columns of 3 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 290 of file type_mat3x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<highp_float> highp_mat3x2
    -
    -
    - -

    3 columns of 2 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 258 of file type_mat3x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<highp_float> highp_mat3x3
    -
    -
    - -

    3 columns of 3 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 311 of file type_mat3x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<highp_float> highp_mat3x4
    -
    -
    - -

    3 columns of 4 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 258 of file type_mat3x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<highp_float> highp_mat4
    -
    -
    - -

    4 columns of 4 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 291 of file type_mat4x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<highp_float> highp_mat4x2
    -
    -
    - -

    4 columns of 2 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 263 of file type_mat4x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<highp_float> highp_mat4x3
    -
    -
    - -

    4 columns of 3 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 261 of file type_mat4x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<highp_float> highp_mat4x4
    -
    -
    - -

    4 columns of 4 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 312 of file type_mat4x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::highp_uint_t highp_uint
    -
    -
    - -

    High precision unsigned integer.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 102 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<highp_uint> highp_uvec2
    -
    -
    - -

    2 components vector of high precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 296 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<highp_uint> highp_uvec3
    -
    -
    - -

    3 components vector of high precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 321 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<highp_uint> highp_uvec4
    -
    -
    - -

    4 components vector of high precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 378 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<highp_float> highp_vec2
    -
    -
    - -

    2 components vector of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 254 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<highp_float> highp_vec3
    -
    -
    - -

    3 components vector of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 279 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<highp_float> highp_vec4
    -
    -
    - -

    4 components vector of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 336 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_float_t lowp_float
    -
    -
    - -

    Low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.4 Floats
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 53 of file type_float.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::lowp_int_t lowp_int
    -
    -
    - -

    Low precision signed integer.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 67 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<lowp_int> lowp_ivec2
    -
    -
    - -

    2 components vector of low precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 289 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<lowp_int> lowp_ivec3
    -
    -
    - -

    3 components vector of low precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 314 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<lowp_int> lowp_ivec4
    -
    -
    - -

    4 components vector of low precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 371 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<lowp_float> lowp_mat2
    -
    -
    - -

    2 columns of 2 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 272 of file type_mat2x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<lowp_float> lowp_mat2x2
    -
    -
    - -

    2 columns of 2 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 293 of file type_mat2x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<lowp_float> lowp_mat2x3
    -
    -
    - -

    2 columns of 3 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 236 of file type_mat2x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<lowp_float> lowp_mat2x4
    -
    -
    - -

    2 columns of 4 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 238 of file type_mat2x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<lowp_float> lowp_mat3
    -
    -
    - -

    3 columns of 3 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 276 of file type_mat3x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<lowp_float> lowp_mat3x2
    -
    -
    - -

    3 columns of 2 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 244 of file type_mat3x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<lowp_float> lowp_mat3x3
    -
    -
    - -

    3 columns of 3 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 297 of file type_mat3x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<lowp_float> lowp_mat3x4
    -
    -
    - -

    3 columns of 4 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 244 of file type_mat3x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<lowp_float> lowp_mat4
    -
    -
    - -

    4 columns of 4 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 277 of file type_mat4x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<lowp_float> lowp_mat4x2
    -
    -
    - -

    4 columns of 2 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 249 of file type_mat4x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<lowp_float> lowp_mat4x3
    -
    -
    - -

    4 columns of 3 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 247 of file type_mat4x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<lowp_float> lowp_mat4x4
    -
    -
    - -

    4 columns of 4 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 298 of file type_mat4x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::lowp_uint_t lowp_uint
    -
    -
    - -

    Low precision unsigned integer.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 88 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<lowp_uint> lowp_uvec2
    -
    -
    - -

    2 components vector of low precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 310 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<lowp_uint> lowp_uvec3
    -
    -
    - -

    3 components vector of low precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 335 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<lowp_uint> lowp_uvec4
    -
    -
    - -

    4 components vector of low precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 392 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<lowp_float> lowp_vec2
    -
    -
    - -

    2 components vector of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 268 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<lowp_float> lowp_vec3
    -
    -
    - -

    3 components vector of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 293 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<lowp_float> lowp_vec4
    -
    -
    - -

    4 components vector of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 350 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_float_t mediump_float
    -
    -
    - -

    Medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.4 Floats
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 60 of file type_float.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::mediump_int_t mediump_int
    -
    -
    - -

    Medium precision signed integer.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 74 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<mediump_int> mediump_ivec2
    -
    -
    - -

    2 components vector of medium precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 282 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<mediump_int> mediump_ivec3
    -
    -
    - -

    3 components vector of medium precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 307 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<mediump_int> mediump_ivec4
    -
    -
    - -

    4 components vector of medium precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 364 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<mediump_float> mediump_mat2
    -
    -
    - -

    2 columns of 2 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 279 of file type_mat2x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<mediump_float> mediump_mat2x2
    -
    -
    - -

    2 columns of 2 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 300 of file type_mat2x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<mediump_float> mediump_mat2x3
    -
    -
    - -

    2 columns of 3 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 243 of file type_mat2x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<mediump_float> mediump_mat2x4
    -
    -
    - -

    2 columns of 4 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 245 of file type_mat2x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<mediump_float> mediump_mat3
    -
    -
    - -

    3 columns of 3 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 283 of file type_mat3x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<mediump_float> mediump_mat3x2
    -
    -
    - -

    3 columns of 2 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 251 of file type_mat3x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<mediump_float> mediump_mat3x3
    -
    -
    - -

    3 columns of 3 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 304 of file type_mat3x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<mediump_float> mediump_mat3x4
    -
    -
    - -

    3 columns of 4 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 251 of file type_mat3x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<mediump_float> mediump_mat4
    -
    -
    - -

    4 columns of 4 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 284 of file type_mat4x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<mediump_float> mediump_mat4x2
    -
    -
    - -

    4 columns of 2 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 256 of file type_mat4x2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<mediump_float> mediump_mat4x3
    -
    -
    - -

    4 columns of 3 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 254 of file type_mat4x3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<mediump_float> mediump_mat4x4
    -
    -
    - -

    4 columns of 4 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 305 of file type_mat4x4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::mediump_uint_t mediump_uint
    -
    -
    - -

    Medium precision unsigned integer.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 95 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<mediump_uint> mediump_uvec2
    -
    -
    - -

    2 components vector of medium precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 303 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<mediump_uint> mediump_uvec3
    -
    -
    - -

    3 components vector of medium precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 328 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<mediump_uint> mediump_uvec4
    -
    -
    - -

    4 components vector of medium precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 385 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<mediump_float> mediump_vec2
    -
    -
    - -

    2 components vector of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 261 of file type_vec2.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<mediump_float> mediump_vec3
    -
    -
    - -

    3 components vector of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 286 of file type_vec3.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<mediump_float> mediump_vec4
    -
    -
    - -

    4 components vector of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 343 of file type_vec4.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef uint_t uint
    -
    -
    - -

    Unsigned integer type.

    -
    See also:
    GLSL 4.20.8 specification, section 4.1.3 Integers
    - -

    Definition at line 131 of file type_int.hpp.

    - -
    -
    -
    - - +

    Detailed Description

    +

    The core of GLM, which implements exactly and only the GLSL specification to the degree possible.

    +

    The GLM core consists of C++ types that mirror GLSL types and C++ functions that mirror the GLSL functions. It also includes a set of precision-based types that can be used in the appropriate functions. The C++ types are all based on a basic set of template types.

    +

    The best documentation for GLM Core is the current GLSL specification, version 4.2 (pdf file). There are a few differences between GLM core and GLSL.

    +

    GLM core functionnalities require <glm/glm.hpp> to be included to be used.

    + + - diff --git a/doc/api/a00142.html b/doc/api/a00142.html index 3cb7c97f..29e7f6a5 100644 --- a/doc/api/a00142.html +++ b/doc/api/a00142.html @@ -2,61 +2,797 @@ - -Template types + +Types + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +
    -
    Template types
    -
    +
    Types
    +
    GLM Core
    -

    The generic template types used as the basis for the core types.

    -

    These types are all templates used to define the actual Types. These templetes are implementation details of GLM types and should not be used explicitly.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef detail::tvec2< bool > bvec2
     
    typedef detail::tvec3< bool > bvec3
     
    typedef detail::tvec4< bool > bvec4
     
    typedef detail::tmat2x2< double > dmat2
     
    typedef detail::tmat2x2< double > dmat2x2
     
    typedef detail::tmat2x3< double > dmat2x3
     
    typedef detail::tmat2x4< double > dmat2x4
     
    typedef detail::tmat3x3< double > dmat3
     
    typedef detail::tmat3x2< double > dmat3x2
     
    typedef detail::tmat3x3< double > dmat3x3
     
    typedef detail::tmat3x4< double > dmat3x4
     
    typedef detail::tmat4x4< double > dmat4
     
    typedef detail::tmat4x2< double > dmat4x2
     
    typedef detail::tmat4x3< double > dmat4x3
     
    typedef detail::tmat4x4< double > dmat4x4
     
    typedef detail::tvec2< double > dvec2
     
    typedef detail::tvec3< double > dvec3
     
    typedef detail::tvec4< double > dvec4
     
    typedef mediump_ivec2 ivec2
     
    typedef mediump_ivec3 ivec3
     
    typedef mediump_ivec4 ivec4
     
    typedef mat2x2 mat2
     
    typedef mediump_mat2x2 mat2x2
     
    typedef mediump_mat2x3 mat2x3
     
    typedef mediump_mat2x4 mat2x4
     
    typedef mat3x3 mat3
     
    typedef mediump_mat3x2 mat3x2
     
    typedef mediump_mat3x3 mat3x3
     
    typedef mediump_mat3x4 mat3x4
     
    typedef mat4x4 mat4
     
    typedef mediump_mat4x2 mat4x2
     
    typedef mediump_mat4x3 mat4x3
     
    typedef mediump_mat4x4 mat4x4
     
    typedef mediump_uvec2 uvec2
     
    typedef mediump_uvec3 uvec3
     
    typedef mediump_uvec4 uvec4
     
    typedef mediump_vec2 vec2
     
    typedef mediump_vec3 vec3
     
    typedef mediump_vec4 vec4
     
    +

    Detailed Description

    +

    The standard types defined by the specification.

    +

    These types are all typedefs of more generalized, template types. To see the definiton of these template types, go to Template types.

    +

    Typedef Documentation

    + +
    +
    + + + + +
    typedef detail::tvec2<bool> bvec2
    +
    + +

    2 components vector of boolean.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 248 of file type.hpp.

    +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<bool> bvec3
    +
    +

    3 components vector of boolean.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +

    Definition at line 253 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<bool> bvec4
    +
    + +

    4 components vector of boolean.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 258 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<double> dmat2
    +
    + +

    2 * 2 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 281 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<double> dmat2x2
    +
    + +

    2 * 2 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 296 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<double> dmat2x3
    +
    + +

    2 * 3 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 301 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<double> dmat2x4
    +
    + +

    2 * 4 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 306 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<double> dmat3
    +
    + +

    3 * 3 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 286 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<double> dmat3x2
    +
    + +

    3 * 2 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 311 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<double> dmat3x3
    +
    + +

    3 * 3 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 316 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<double> dmat3x4
    +
    + +

    3 * 4 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 321 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<double> dmat4
    +
    + +

    4 * 4 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 291 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<double> dmat4x2
    +
    + +

    4 * 2 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 326 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<double> dmat4x3
    +
    + +

    4 * 3 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 331 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<double> dmat4x4
    +
    + +

    4 * 4 matrix of double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 336 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<double> dvec2
    +
    + +

    Vector of 2 double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 266 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<double> dvec3
    +
    + +

    Vector of 3 double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 271 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<double> dvec4
    +
    + +

    Vector of 4 double-precision floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 276 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_ivec2 ivec2
    +
    + +

    2 components vector of signed integer numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 197 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_ivec3 ivec3
    +
    + +

    3 components vector of signed integer numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 202 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_ivec4 ivec4
    +
    + +

    4 components vector of signed integer numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 207 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mat2x2 mat2
    +
    + +

    2 columns of 2 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 166 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat2x2 mat2x2
    +
    + +

    2 columns of 2 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 119 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat2x3 mat2x3
    +
    + +

    2 columns of 3 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 124 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat2x4 mat2x4
    +
    + +

    2 columns of 4 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 129 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mat3x3 mat3
    +
    + +

    3 columns of 3 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 171 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat3x2 mat3x2
    +
    + +

    3 columns of 2 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 134 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat3x3 mat3x3
    +
    + +

    3 columns of 3 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 139 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat3x4 mat3x4
    +
    + +

    3 columns of 4 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 144 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mat4x4 mat4
    +
    + +

    4 columns of 4 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 176 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat4x2 mat4x2
    +
    + +

    4 columns of 2 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 149 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat4x3 mat4x3
    +
    + +

    4 columns of 3 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 154 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_mat4x4 mat4x4
    +
    + +

    4 columns of 4 components matrix of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 159 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_uvec2 uvec2
    +
    + +

    2 components vector of unsigned integer numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 229 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_uvec3 uvec3
    +
    + +

    3 components vector of unsigned integer numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 234 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_uvec4 uvec4
    +
    + +

    4 components vector of unsigned integer numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 239 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_vec2 vec2
    +
    + +

    2 components vector of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 104 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_vec3 vec3
    +
    + +

    3 components vector of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 109 of file type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_vec4 vec4
    +
    + +

    4 components vector of floating-point numbers.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 114 of file type.hpp.

    + +
    +
    +
    + - diff --git a/doc/api/a00143.html b/doc/api/a00143.html index a42e442d..3e059d7a 100644 --- a/doc/api/a00143.html +++ b/doc/api/a00143.html @@ -2,393 +2,1433 @@ - -GLM_GTC_half_float: Half-precision floating-point based types and functions + +Precision types + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    -
    +
    Precision types
    +
    GLM Core
    - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Classes

    class  half
     16-bit floating point type. More...

    +

    Typedefs

    typedef detail::half half
    typedef detail::tmat2x2
    -< detail::half > 
    hmat2
    typedef detail::tmat2x2
    -< detail::half > 
    hmat2x2
    typedef detail::tmat2x3
    -< detail::half > 
    hmat2x3
    typedef detail::tmat2x4
    -< detail::half > 
    hmat2x4
    typedef detail::tmat3x3
    -< detail::half > 
    hmat3
    typedef detail::tmat3x2
    -< detail::half > 
    hmat3x2
    typedef detail::tmat3x3
    -< detail::half > 
    hmat3x3
    typedef detail::tmat3x4
    -< detail::half > 
    hmat3x4
    typedef detail::tmat4x4
    -< detail::half > 
    hmat4
    typedef detail::tmat4x2
    -< detail::half > 
    hmat4x2
    typedef detail::tmat4x3
    -< detail::half > 
    hmat4x3
    typedef detail::tmat4x4
    -< detail::half > 
    hmat4x4
    typedef detail::tvec2
    -< detail::half > 
    hvec2
    typedef detail::tvec3
    -< detail::half > 
    hvec3
    typedef detail::tvec4
    -< detail::half > 
    hvec4
    typedef highp_float_t highp_float
     
    typedef detail::highp_int_t highp_int
     
    typedef detail::tvec2< highp_int > highp_ivec2
     
    typedef detail::tvec3< highp_int > highp_ivec3
     
    typedef detail::tvec4< highp_int > highp_ivec4
     
    typedef detail::tmat2x2
    +< highp_float > 
    highp_mat2
     
    typedef detail::tmat2x2
    +< highp_float > 
    highp_mat2x2
     
    typedef detail::tmat2x3
    +< highp_float > 
    highp_mat2x3
     
    typedef detail::tmat2x4
    +< highp_float > 
    highp_mat2x4
     
    typedef detail::tmat3x2
    +< highp_float > 
    highp_mat3x2
     
    typedef detail::tmat3x4
    +< highp_float > 
    highp_mat3x4
     
    typedef detail::tmat4x2
    +< highp_float > 
    highp_mat4x2
     
    typedef detail::tmat4x3
    +< highp_float > 
    highp_mat4x3
     
    typedef detail::highp_uint_t highp_uint
     
    typedef detail::tvec2< highp_uint > highp_uvec2
     
    typedef detail::tvec3< highp_uint > highp_uvec3
     
    typedef detail::tvec4< highp_uint > highp_uvec4
     
    typedef detail::tvec2
    +< highp_float > 
    highp_vec2
     
    typedef detail::tvec3
    +< highp_float > 
    highp_vec3
     
    typedef detail::tvec4
    +< highp_float > 
    highp_vec4
     
    typedef lowp_float_t lowp_float
     
    typedef detail::lowp_int_t lowp_int
     
    typedef detail::tvec2< lowp_int > lowp_ivec2
     
    typedef detail::tvec3< lowp_int > lowp_ivec3
     
    typedef detail::tvec4< lowp_int > lowp_ivec4
     
    typedef detail::tmat2x2
    +< lowp_float > 
    lowp_mat2
     
    typedef detail::tmat2x2
    +< lowp_float > 
    lowp_mat2x2
     
    typedef detail::tmat2x3
    +< lowp_float > 
    lowp_mat2x3
     
    typedef detail::tmat2x4
    +< lowp_float > 
    lowp_mat2x4
     
    typedef detail::tmat3x2
    +< lowp_float > 
    lowp_mat3x2
     
    typedef detail::tmat3x4
    +< lowp_float > 
    lowp_mat3x4
     
    typedef detail::tmat4x2
    +< lowp_float > 
    lowp_mat4x2
     
    typedef detail::tmat4x3
    +< lowp_float > 
    lowp_mat4x3
     
    typedef detail::lowp_uint_t lowp_uint
     
    typedef detail::tvec2< lowp_uint > lowp_uvec2
     
    typedef detail::tvec3< lowp_uint > lowp_uvec3
     
    typedef detail::tvec4< lowp_uint > lowp_uvec4
     
    typedef detail::tvec2< lowp_float > lowp_vec2
     
    typedef detail::tvec3< lowp_float > lowp_vec3
     
    typedef detail::tvec4< lowp_float > lowp_vec4
     
    typedef mediump_float_t mediump_float
     
    typedef detail::mediump_int_t mediump_int
     
    typedef detail::tvec2
    +< mediump_int > 
    mediump_ivec2
     
    typedef detail::tvec3
    +< mediump_int > 
    mediump_ivec3
     
    typedef detail::tvec4
    +< mediump_int > 
    mediump_ivec4
     
    typedef detail::tmat2x2
    +< mediump_float > 
    mediump_mat2
     
    typedef detail::tmat2x2
    +< mediump_float > 
    mediump_mat2x2
     
    typedef detail::tmat2x3
    +< mediump_float > 
    mediump_mat2x3
     
    typedef detail::tmat2x4
    +< mediump_float > 
    mediump_mat2x4
     
    typedef detail::tmat3x2
    +< mediump_float > 
    mediump_mat3x2
     
    typedef detail::tmat3x4
    +< mediump_float > 
    mediump_mat3x4
     
    typedef detail::tmat4x2
    +< mediump_float > 
    mediump_mat4x2
     
    typedef detail::tmat4x3
    +< mediump_float > 
    mediump_mat4x3
     
    typedef detail::mediump_uint_t mediump_uint
     
    typedef detail::tvec2
    +< mediump_uint > 
    mediump_uvec2
     
    typedef detail::tvec3
    +< mediump_uint > 
    mediump_uvec3
     
    typedef detail::tvec4
    +< mediump_uint > 
    mediump_uvec4
     
    typedef detail::tvec2
    +< mediump_float > 
    mediump_vec2
     
    typedef detail::tvec3
    +< mediump_float > 
    mediump_vec3
     
    typedef detail::tvec4
    +< mediump_float > 
    mediump_vec4
     
    typedef uint_t uint
     
    -

    Detailed Description

    -

    Defines the half-precision floating-point type, along with various typedefs for vectors and matrices.

    -

    <glm/gtc/half_float.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    Detailed Description

    +

    Non-GLSL types that are used to define precision-based types.

    +

    The GLSL language allows the user to define the precision of a particular variable. In OpenGL's GLSL, these precision qualifiers have no effect; they are there for compatibility with OpenGL ES's precision qualifiers, where they do have an effect.

    +

    C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing: a number of typedefs of the Template types that use a particular precision.

    +

    None of these types make any guarantees about the actual precision used.

    +

    Typedef Documentation

    +
    - +
    typedef detail::half halftypedef highp_float_t highp_float
    -
    -
    +
    -

    Type for half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    High precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 357 of file half_float.hpp.

    +

    Definition at line 67 of file type_float.hpp.

    - +
    - +
    typedef detail::tmat2x2<detail::half> hmat2typedef detail::highp_int_t highp_int
    -
    -
    +
    -

    2 * 2 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    High precision signed integer.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 373 of file half_float.hpp.

    +

    Definition at line 81 of file type_int.hpp.

    - +
    - +
    typedef detail::tmat2x2<detail::half> hmat2x2typedef detail::tvec2<highp_int> highp_ivec2
    -
    -
    +
    -

    2 * 2 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    2 components vector of high precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 385 of file half_float.hpp.

    +

    Definition at line 273 of file type_vec2.hpp.

    - +
    - +
    typedef detail::tmat2x3<detail::half> hmat2x3typedef detail::tvec3<highp_int> highp_ivec3
    -
    -
    +
    -

    2 * 3 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    3 components vector of high precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 389 of file half_float.hpp.

    +

    Definition at line 298 of file type_vec3.hpp.

    - +
    - +
    typedef detail::tmat2x4<detail::half> hmat2x4typedef detail::tvec4<highp_int> highp_ivec4
    -
    -
    +
    -

    2 * 4 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    4 components vector of high precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 393 of file half_float.hpp.

    +

    Definition at line 355 of file type_vec4.hpp.

    - +
    - +
    typedef detail::tmat3x3<detail::half> hmat3typedef detail::tmat2x2<highp_float> highp_mat2
    -
    -
    +
    -

    3 * 3 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    2 columns of 2 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 377 of file half_float.hpp.

    +

    Definition at line 284 of file type_mat2x2.hpp.

    - +
    - +
    typedef detail::tmat3x2<detail::half> hmat3x2typedef detail::tmat2x2<highp_float> highp_mat2x2
    -
    -
    +
    -

    3 * 2 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    2 columns of 2 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 397 of file half_float.hpp.

    +

    Definition at line 305 of file type_mat2x2.hpp.

    - +
    - +
    typedef detail::tmat3x3<detail::half> hmat3x3typedef detail::tmat2x3<highp_float> highp_mat2x3
    -
    -
    +
    -

    3 * 3 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    2 columns of 3 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 401 of file half_float.hpp.

    +

    Definition at line 249 of file type_mat2x3.hpp.

    - +
    - +
    typedef detail::tmat3x4<detail::half> hmat3x4typedef detail::tmat2x4<highp_float> highp_mat2x4
    -
    -
    +
    -

    3 * 4 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    2 columns of 4 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 405 of file half_float.hpp.

    +

    Definition at line 251 of file type_mat2x4.hpp.

    - +
    - +
    typedef detail::tmat4x4<detail::half> hmat4typedef detail::tmat3x2<highp_float> highp_mat3x2
    -
    -
    +
    -

    4 * 4 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    3 columns of 2 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 381 of file half_float.hpp.

    +

    Definition at line 256 of file type_mat3x2.hpp.

    - +
    - +
    typedef detail::tmat4x2<detail::half> hmat4x2typedef detail::tmat3x4<highp_float> highp_mat3x4
    -
    -
    +
    -

    4 * 2 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    3 columns of 4 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 409 of file half_float.hpp.

    +

    Definition at line 257 of file type_mat3x4.hpp.

    - +
    - +
    typedef detail::tmat4x3<detail::half> hmat4x3typedef detail::tmat4x2<highp_float> highp_mat4x2
    -
    -
    +
    -

    4 * 3 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    4 columns of 2 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 413 of file half_float.hpp.

    +

    Definition at line 261 of file type_mat4x2.hpp.

    - +
    - +
    typedef detail::tmat4x4<detail::half> hmat4x4typedef detail::tmat4x3<highp_float> highp_mat4x3
    -
    -
    +
    -

    4 * 4 matrix of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    4 columns of 3 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 417 of file half_float.hpp.

    +

    Definition at line 259 of file type_mat4x3.hpp.

    - +
    - +
    typedef detail::tvec2<detail::half> hvec2typedef detail::highp_uint_t highp_uint
    -
    -
    +
    -

    Vector of 2 half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    High precision unsigned integer.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 361 of file half_float.hpp.

    +

    Definition at line 102 of file type_int.hpp.

    - +
    - +
    typedef detail::tvec3<detail::half> hvec3typedef detail::tvec2<highp_uint> highp_uvec2
    -
    -
    +
    -

    Vector of 3 half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    2 components vector of high precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 365 of file half_float.hpp.

    +

    Definition at line 294 of file type_vec2.hpp.

    - +
    - +
    typedef detail::tvec4<detail::half> hvec4typedef detail::tvec3<highp_uint> highp_uvec3
    -
    -
    +
    -

    Vector of 4 half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_half_float: Half-precision floating-point based types and functions
    +

    3 components vector of high precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -

    Definition at line 369 of file half_float.hpp.

    +

    Definition at line 319 of file type_vec3.hpp.

    + +
    +
    + + + + +
    typedef detail::tvec4<highp_uint> highp_uvec4
    +
    + +

    4 components vector of high precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 376 of file type_vec4.hpp.

    +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<highp_float> highp_vec2
    +
    +

    2 components vector of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +

    Definition at line 252 of file type_vec2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<highp_float> highp_vec3
    +
    + +

    3 components vector of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 277 of file type_vec3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<highp_float> highp_vec4
    +
    + +

    4 components vector of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 334 of file type_vec4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_float_t lowp_float
    +
    + +

    Low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 53 of file type_float.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::lowp_int_t lowp_int
    +
    + +

    Low precision signed integer.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 67 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<lowp_int> lowp_ivec2
    +
    + +

    2 components vector of low precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 287 of file type_vec2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<lowp_int> lowp_ivec3
    +
    + +

    3 components vector of low precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 312 of file type_vec3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<lowp_int> lowp_ivec4
    +
    + +

    4 components vector of low precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 369 of file type_vec4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<lowp_float> lowp_mat2
    +
    + +

    2 columns of 2 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 270 of file type_mat2x2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<lowp_float> lowp_mat2x2
    +
    + +

    2 columns of 2 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 291 of file type_mat2x2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<lowp_float> lowp_mat2x3
    +
    + +

    2 columns of 3 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 235 of file type_mat2x3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<lowp_float> lowp_mat2x4
    +
    + +

    2 columns of 4 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 237 of file type_mat2x4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<lowp_float> lowp_mat3x2
    +
    + +

    3 columns of 2 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 242 of file type_mat3x2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<lowp_float> lowp_mat3x4
    +
    + +

    3 columns of 4 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 243 of file type_mat3x4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<lowp_float> lowp_mat4x2
    +
    + +

    4 columns of 2 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 247 of file type_mat4x2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<lowp_float> lowp_mat4x3
    +
    + +

    4 columns of 3 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 245 of file type_mat4x3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::lowp_uint_t lowp_uint
    +
    + +

    Low precision unsigned integer.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 88 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<lowp_uint> lowp_uvec2
    +
    + +

    2 components vector of low precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 308 of file type_vec2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<lowp_uint> lowp_uvec3
    +
    + +

    3 components vector of low precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 333 of file type_vec3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<lowp_uint> lowp_uvec4
    +
    + +

    4 components vector of low precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 390 of file type_vec4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<lowp_float> lowp_vec2
    +
    + +

    2 components vector of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 266 of file type_vec2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<lowp_float> lowp_vec3
    +
    + +

    3 components vector of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 291 of file type_vec3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<lowp_float> lowp_vec4
    +
    + +

    4 components vector of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 348 of file type_vec4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_float_t mediump_float
    +
    + +

    Medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 60 of file type_float.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::mediump_int_t mediump_int
    +
    + +

    Medium precision signed integer.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 74 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<mediump_int> mediump_ivec2
    +
    + +

    2 components vector of medium precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 280 of file type_vec2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<mediump_int> mediump_ivec3
    +
    + +

    3 components vector of medium precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 305 of file type_vec3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<mediump_int> mediump_ivec4
    +
    + +

    4 components vector of medium precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 362 of file type_vec4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<mediump_float> mediump_mat2
    +
    + +

    2 columns of 2 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 277 of file type_mat2x2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<mediump_float> mediump_mat2x2
    +
    + +

    2 columns of 2 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 298 of file type_mat2x2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<mediump_float> mediump_mat2x3
    +
    + +

    2 columns of 3 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 242 of file type_mat2x3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<mediump_float> mediump_mat2x4
    +
    + +

    2 columns of 4 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 244 of file type_mat2x4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<mediump_float> mediump_mat3x2
    +
    + +

    3 columns of 2 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 249 of file type_mat3x2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<mediump_float> mediump_mat3x4
    +
    + +

    3 columns of 4 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 250 of file type_mat3x4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<mediump_float> mediump_mat4x2
    +
    + +

    4 columns of 2 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 254 of file type_mat4x2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<mediump_float> mediump_mat4x3
    +
    + +

    4 columns of 3 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 252 of file type_mat4x3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::mediump_uint_t mediump_uint
    +
    + +

    Medium precision unsigned integer.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 95 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<mediump_uint> mediump_uvec2
    +
    + +

    2 components vector of medium precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 301 of file type_vec2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<mediump_uint> mediump_uvec3
    +
    + +

    3 components vector of medium precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 326 of file type_vec3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<mediump_uint> mediump_uvec4
    +
    + +

    4 components vector of medium precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 383 of file type_vec4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<mediump_float> mediump_vec2
    +
    + +

    2 components vector of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 259 of file type_vec2.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<mediump_float> mediump_vec3
    +
    + +

    3 components vector of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 284 of file type_vec3.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<mediump_float> mediump_vec4
    +
    + +

    4 components vector of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 341 of file type_vec4.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef uint_t uint
    +
    + +

    Unsigned integer type.

    +
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    + +

    Definition at line 131 of file type_int.hpp.

    + +
    +
    +
    + - diff --git a/doc/api/a00144.html b/doc/api/a00144.html index 0a54229d..b66feb55 100644 --- a/doc/api/a00144.html +++ b/doc/api/a00144.html @@ -2,209 +2,48 @@ - -GLM_GTC_matrix_access: Access matrix rows and columns + +Template types + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    -
    GLM_GTC_matrix_access: Access matrix rows and columns
    -
    +
    Template types
    +
    GLM Core
    - - - - - - - - - - -

    -Functions

    template<typename genType >
    genType::col_type column (genType const &m, int index)
    template<typename genType >
    genType column (genType const &m, int index, typename genType::col_type const &x)
    template<typename genType >
    genType::row_type row (genType const &m, int index)
    template<typename genType >
    genType row (genType const &m, int index, typename genType::row_type const &x)
    -

    Detailed Description

    -

    Defines functions to access rows or columns of a matrix easily.

    -

    <glm/gtc/matrix_access.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType::col_type glm::column (genType const & m,
    int index 
    )
    -
    -
    - -

    Get a specific column of a matrix.

    -
    See also:
    GLM_GTC_matrix_access: Access matrix rows and columns
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::column (genType const & m,
    int index,
    typename genType::col_type const & x 
    )
    -
    -
    - -

    Set a specific column to a matrix.

    -
    See also:
    GLM_GTC_matrix_access: Access matrix rows and columns
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType::row_type glm::row (genType const & m,
    int index 
    )
    -
    -
    - -

    Get a specific row of a matrix.

    -
    See also:
    GLM_GTC_matrix_access: Access matrix rows and columns
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::row (genType const & m,
    int index,
    typename genType::row_type const & x 
    )
    -
    -
    - -

    Set a specific row to a matrix.

    -
    See also:
    GLM_GTC_matrix_access: Access matrix rows and columns
    - -
    -
    -
    - - +

    The generic template types used as the basis for the core types.

    +

    These types are all templates used to define the actual Types. These templetes are implementation details of GLM types and should not be used explicitly.

    + + - diff --git a/doc/api/a00145.html b/doc/api/a00145.html index 72b24b49..8c8d1eea 100644 --- a/doc/api/a00145.html +++ b/doc/api/a00145.html @@ -2,1953 +2,582 @@ - -GLM_GTC_matrix_integer: Integer matrix types + +GLM_GTC_constants + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Functions
    -
    GLM_GTC_matrix_integer: Integer matrix types
    -
    GTC Extensions (Stable)
    +
    GLM_GTC_constants
    +
    GTC Extensions (Stable)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    typedef detail::tmat2x2
    -< highp_int > 
    highp_imat2
    typedef detail::tmat2x2
    -< highp_int > 
    highp_imat2x2
    typedef detail::tmat2x3
    -< highp_int > 
    highp_imat2x3
    typedef detail::tmat2x4
    -< highp_int > 
    highp_imat2x4
    typedef detail::tmat3x3
    -< highp_int > 
    highp_imat3
    typedef detail::tmat3x2
    -< highp_int > 
    highp_imat3x2
    typedef detail::tmat3x3
    -< highp_int > 
    highp_imat3x3
    typedef detail::tmat3x4
    -< highp_int > 
    highp_imat3x4
    typedef detail::tmat4x4
    -< highp_int > 
    highp_imat4
    typedef detail::tmat4x2
    -< highp_int > 
    highp_imat4x2
    typedef detail::tmat4x3
    -< highp_int > 
    highp_imat4x3
    typedef detail::tmat4x4
    -< highp_int > 
    highp_imat4x4
    typedef detail::tmat2x2
    -< highp_uint > 
    highp_umat2
    typedef detail::tmat2x2
    -< highp_uint > 
    highp_umat2x2
    typedef detail::tmat2x3
    -< highp_uint > 
    highp_umat2x3
    typedef detail::tmat2x4
    -< highp_uint > 
    highp_umat2x4
    typedef detail::tmat3x3
    -< highp_uint > 
    highp_umat3
    typedef detail::tmat3x2
    -< highp_uint > 
    highp_umat3x2
    typedef detail::tmat3x3
    -< highp_uint > 
    highp_umat3x3
    typedef detail::tmat3x4
    -< highp_uint > 
    highp_umat3x4
    typedef detail::tmat4x4
    -< highp_uint > 
    highp_umat4
    typedef detail::tmat4x2
    -< highp_uint > 
    highp_umat4x2
    typedef detail::tmat4x3
    -< highp_uint > 
    highp_umat4x3
    typedef detail::tmat4x4
    -< highp_uint > 
    highp_umat4x4
    typedef mediump_imat2 imat2
    typedef mediump_imat2x2 imat2x2
    typedef mediump_imat2x3 imat2x3
    typedef mediump_imat2x4 imat2x4
    typedef mediump_imat3 imat3
    typedef mediump_imat3x2 imat3x2
    typedef mediump_imat3x3 imat3x3
    typedef mediump_imat3x4 imat3x4
    typedef mediump_imat4 imat4
    typedef mediump_imat4x2 imat4x2
    typedef mediump_imat4x3 imat4x3
    typedef mediump_imat4x4 imat4x4
    typedef detail::tmat2x2< lowp_int > lowp_imat2
    typedef detail::tmat2x2< lowp_int > lowp_imat2x2
    typedef detail::tmat2x3< lowp_int > lowp_imat2x3
    typedef detail::tmat2x4< lowp_int > lowp_imat2x4
    typedef detail::tmat3x3< lowp_int > lowp_imat3
    typedef detail::tmat3x2< lowp_int > lowp_imat3x2
    typedef detail::tmat3x3< lowp_int > lowp_imat3x3
    typedef detail::tmat3x4< lowp_int > lowp_imat3x4
    typedef detail::tmat4x4< lowp_int > lowp_imat4
    typedef detail::tmat4x2< lowp_int > lowp_imat4x2
    typedef detail::tmat4x3< lowp_int > lowp_imat4x3
    typedef detail::tmat4x4< lowp_int > lowp_imat4x4
    typedef detail::tmat2x2
    -< lowp_uint > 
    lowp_umat2
    typedef detail::tmat2x2
    -< lowp_uint > 
    lowp_umat2x2
    typedef detail::tmat2x3
    -< lowp_uint > 
    lowp_umat2x3
    typedef detail::tmat2x4
    -< lowp_uint > 
    lowp_umat2x4
    typedef detail::tmat3x3
    -< lowp_uint > 
    lowp_umat3
    typedef detail::tmat3x2
    -< lowp_uint > 
    lowp_umat3x2
    typedef detail::tmat3x3
    -< lowp_uint > 
    lowp_umat3x3
    typedef detail::tmat3x4
    -< lowp_uint > 
    lowp_umat3x4
    typedef detail::tmat4x4
    -< lowp_uint > 
    lowp_umat4
    typedef detail::tmat4x2
    -< lowp_uint > 
    lowp_umat4x2
    typedef detail::tmat4x3
    -< lowp_uint > 
    lowp_umat4x3
    typedef detail::tmat4x4
    -< lowp_uint > 
    lowp_umat4x4
    typedef detail::tmat2x2
    -< mediump_int > 
    mediump_imat2
    typedef detail::tmat2x2
    -< mediump_int > 
    mediump_imat2x2
    typedef detail::tmat2x3
    -< mediump_int > 
    mediump_imat2x3
    typedef detail::tmat2x4
    -< mediump_int > 
    mediump_imat2x4
    typedef detail::tmat3x3
    -< mediump_int > 
    mediump_imat3
    typedef detail::tmat3x2
    -< mediump_int > 
    mediump_imat3x2
    typedef detail::tmat3x3
    -< mediump_int > 
    mediump_imat3x3
    typedef detail::tmat3x4
    -< mediump_int > 
    mediump_imat3x4
    typedef detail::tmat4x4
    -< mediump_int > 
    mediump_imat4
    typedef detail::tmat4x2
    -< mediump_int > 
    mediump_imat4x2
    typedef detail::tmat4x3
    -< mediump_int > 
    mediump_imat4x3
    typedef detail::tmat4x4
    -< mediump_int > 
    mediump_imat4x4
    typedef detail::tmat2x2
    -< mediump_uint > 
    mediump_umat2
    typedef detail::tmat2x2
    -< mediump_uint > 
    mediump_umat2x2
    typedef detail::tmat2x3
    -< mediump_uint > 
    mediump_umat2x3
    typedef detail::tmat2x4
    -< mediump_uint > 
    mediump_umat2x4
    typedef detail::tmat3x3
    -< mediump_uint > 
    mediump_umat3
    typedef detail::tmat3x2
    -< mediump_uint > 
    mediump_umat3x2
    typedef detail::tmat3x3
    -< mediump_uint > 
    mediump_umat3x3
    typedef detail::tmat3x4
    -< mediump_uint > 
    mediump_umat3x4
    typedef detail::tmat4x4
    -< mediump_uint > 
    mediump_umat4
    typedef detail::tmat4x2
    -< mediump_uint > 
    mediump_umat4x2
    typedef detail::tmat4x3
    -< mediump_uint > 
    mediump_umat4x3
    typedef detail::tmat4x4
    -< mediump_uint > 
    mediump_umat4x4
    typedef mediump_umat2 umat2
    typedef mediump_umat2x2 umat2x2
    typedef mediump_umat2x3 umat2x3
    typedef mediump_umat2x4 umat2x4
    typedef mediump_umat3 umat3
    typedef mediump_umat3x2 umat3x2
    typedef mediump_umat3x3 umat3x3
    typedef mediump_umat3x4 umat3x4
    typedef mediump_umat4 umat4
    typedef mediump_umat4x2 umat4x2
    typedef mediump_umat4x3 umat4x3
    typedef mediump_umat4x4 umat4x4

    +Functions

    template<typename T >
    GLM_CONSTEXPR T e ()
     
    template<typename T >
    GLM_CONSTEXPR T epsilon ()
     
    template<typename T >
    GLM_CONSTEXPR T euler ()
     
    template<typename T >
    GLM_CONSTEXPR T golden_ratio ()
     
    template<typename T >
    GLM_CONSTEXPR T half_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T ln_ln_two ()
     
    template<typename T >
    GLM_CONSTEXPR T ln_ten ()
     
    template<typename T >
    GLM_CONSTEXPR T ln_two ()
     
    template<typename T >
    GLM_CONSTEXPR T one ()
     
    template<typename T >
    GLM_CONSTEXPR T one_over_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T one_over_root_two ()
     
    template<typename T >
    GLM_CONSTEXPR T pi ()
     
    template<typename T >
    GLM_CONSTEXPR T quarter_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T root_five ()
     
    template<typename T >
    GLM_CONSTEXPR T root_half_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T root_ln_four ()
     
    template<typename T >
    GLM_CONSTEXPR T root_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T root_three ()
     
    template<typename T >
    GLM_CONSTEXPR T root_two ()
     
    template<typename T >
    GLM_CONSTEXPR T root_two_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T third ()
     
    template<typename T >
    GLM_CONSTEXPR T two_over_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T two_over_root_pi ()
     
    template<typename T >
    GLM_CONSTEXPR T two_thirds ()
     
    template<typename T >
    GLM_CONSTEXPR T zero ()
     
    -

    Detailed Description

    -

    Defines a number of matrices with integer types.

    -

    <glm/gtc/matrix_integer.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    Detailed Description

    +

    Allow to perform bit operations on integer values.

    +

    <glm/gtc/constants.hpp> need to be included to use these features.

    +

    Function Documentation

    +
    - + + + +
    typedef detail::tmat2x2<highp_int> highp_imat2GLM_CONSTEXPR T glm::e ()
    -
    -
    - -

    High-precision signed integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 54 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<highp_int> highp_imat2x2
    -
    -
    - -

    High-precision signed integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 66 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<highp_int> highp_imat2x3
    -
    -
    - -

    High-precision signed integer 2x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 70 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<highp_int> highp_imat2x4
    -
    -
    - -

    High-precision signed integer 2x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 74 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<highp_int> highp_imat3
    -
    -
    - -

    High-precision signed integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 58 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<highp_int> highp_imat3x2
    -
    -
    - -

    High-precision signed integer 3x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 78 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<highp_int> highp_imat3x3
    -
    -
    - -

    High-precision signed integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 82 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<highp_int> highp_imat3x4
    -
    -
    - -

    High-precision signed integer 3x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 86 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<highp_int> highp_imat4
    -
    -
    - -

    High-precision signed integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 62 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<highp_int> highp_imat4x2
    -
    -
    - -

    High-precision signed integer 4x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 90 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<highp_int> highp_imat4x3
    -
    -
    - -

    High-precision signed integer 4x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 94 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<highp_int> highp_imat4x4
    -
    -
    - -

    High-precision signed integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 98 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<highp_uint> highp_umat2
    -
    -
    - -

    High-precision unsigned integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 203 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<highp_uint> highp_umat2x2
    -
    -
    - -

    High-precision unsigned integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 215 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<highp_uint> highp_umat2x3
    -
    -
    - -

    High-precision unsigned integer 2x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 219 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<highp_uint> highp_umat2x4
    -
    -
    - -

    High-precision unsigned integer 2x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 223 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<highp_uint> highp_umat3
    -
    -
    - -

    High-precision unsigned integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 207 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<highp_uint> highp_umat3x2
    -
    -
    - -

    High-precision unsigned integer 3x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 227 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<highp_uint> highp_umat3x3
    -
    -
    - -

    High-precision unsigned integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 231 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<highp_uint> highp_umat3x4
    -
    -
    - -

    High-precision unsigned integer 3x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 235 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<highp_uint> highp_umat4
    -
    -
    - -

    High-precision unsigned integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 211 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<highp_uint> highp_umat4x2
    -
    -
    - -

    High-precision unsigned integer 4x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 239 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<highp_uint> highp_umat4x3
    -
    -
    - -

    High-precision unsigned integer 4x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 243 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<highp_uint> highp_umat4x4
    -
    -
    - -

    High-precision unsigned integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 247 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat2 imat2
    -
    -
    - -

    Signed integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 379 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat2x2 imat2x2
    -
    -
    - -

    Signed integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 391 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat2x3 imat2x3
    -
    -
    - -

    Signed integer 2x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 395 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat2x4 imat2x4
    -
    -
    - -

    Signed integer 2x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 399 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat3 imat3
    -
    -
    - -

    Signed integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 383 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat3x2 imat3x2
    -
    -
    - -

    Signed integer 3x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 403 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat3x3 imat3x3
    -
    -
    - -

    Signed integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 407 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat3x4 imat3x4
    -
    -
    - -

    Signed integer 3x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 411 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat4 imat4
    -
    -
    - -

    Signed integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 387 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat4x2 imat4x2
    -
    -
    - -

    Signed integer 4x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 415 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat4x3 imat4x3
    -
    -
    - -

    Signed integer 4x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 419 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat4x4 imat4x4
    -
    -
    - -

    Signed integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 423 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<lowp_int> lowp_imat2
    -
    -
    - -

    Low-precision signed integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 153 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<lowp_int> lowp_imat2x2
    -
    -
    - -

    Low-precision signed integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 166 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<lowp_int> lowp_imat2x3
    -
    -
    - -

    Low-precision signed integer 2x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 170 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<lowp_int> lowp_imat2x4
    -
    -
    - -

    Low-precision signed integer 2x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 174 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<lowp_int> lowp_imat3
    -
    -
    - -

    Low-precision signed integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 157 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<lowp_int> lowp_imat3x2
    -
    -
    - -

    Low-precision signed integer 3x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 178 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<lowp_int> lowp_imat3x3
    -
    -
    - -

    Low-precision signed integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 182 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<lowp_int> lowp_imat3x4
    -
    -
    - -

    Low-precision signed integer 3x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 186 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<lowp_int> lowp_imat4
    -
    -
    - -

    Low-precision signed integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 161 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<lowp_int> lowp_imat4x2
    -
    -
    - -

    Low-precision signed integer 4x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 190 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<lowp_int> lowp_imat4x3
    -
    -
    - -

    Low-precision signed integer 4x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 194 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<lowp_int> lowp_imat4x4
    -
    -
    - -

    Low-precision signed integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 198 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<lowp_uint> lowp_umat2
    -
    -
    - -

    Low-precision unsigned integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 302 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<lowp_uint> lowp_umat2x2
    -
    -
    - -

    Low-precision unsigned integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 315 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<lowp_uint> lowp_umat2x3
    -
    -
    - -

    Low-precision unsigned integer 2x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 319 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<lowp_uint> lowp_umat2x4
    -
    -
    - -

    Low-precision unsigned integer 2x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 323 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<lowp_uint> lowp_umat3
    -
    -
    - -

    Low-precision unsigned integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 306 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<lowp_uint> lowp_umat3x2
    -
    -
    - -

    Low-precision unsigned integer 3x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 327 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<lowp_uint> lowp_umat3x3
    -
    -
    +
    -

    Low-precision unsigned integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 331 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<lowp_uint> lowp_umat3x4
    -
    -
    - -

    Low-precision unsigned integer 3x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 335 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<lowp_uint> lowp_umat4
    -
    -
    - -

    Low-precision unsigned integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 310 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<lowp_uint> lowp_umat4x2
    -
    -
    - -

    Low-precision unsigned integer 4x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 339 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<lowp_uint> lowp_umat4x3
    -
    -
    - -

    Low-precision unsigned integer 4x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 343 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<lowp_uint> lowp_umat4x4
    -
    -
    - -

    Low-precision unsigned integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 347 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<mediump_int> mediump_imat2
    -
    -
    - -

    Medium-precision signed integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 103 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<mediump_int> mediump_imat2x2
    -
    -
    - -

    Medium-precision signed integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 116 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<mediump_int> mediump_imat2x3
    -
    -
    - -

    Medium-precision signed integer 2x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 120 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<mediump_int> mediump_imat2x4
    -
    -
    - -

    Medium-precision signed integer 2x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 124 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<mediump_int> mediump_imat3
    -
    -
    - -

    Medium-precision signed integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 107 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<mediump_int> mediump_imat3x2
    -
    -
    - -

    Medium-precision signed integer 3x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 128 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<mediump_int> mediump_imat3x3
    -
    -
    - -

    Medium-precision signed integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 132 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<mediump_int> mediump_imat3x4
    -
    -
    - -

    Medium-precision signed integer 3x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 136 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<mediump_int> mediump_imat4
    -
    -
    - -

    Medium-precision signed integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 111 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<mediump_int> mediump_imat4x2
    -
    -
    - -

    Medium-precision signed integer 4x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 140 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<mediump_int> mediump_imat4x3
    -
    -
    - -

    Medium-precision signed integer 4x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 144 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<mediump_int> mediump_imat4x4
    -
    -
    - -

    Medium-precision signed integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 148 of file matrix_integer.hpp.

    +

    Return e constant.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat2x2<mediump_uint> mediump_umat2GLM_CONSTEXPR T glm::epsilon ()
    -
    -
    +
    -

    Medium-precision unsigned integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 252 of file matrix_integer.hpp.

    +

    Return the epsilon constant for floating point types.

    +
    Todo:
    Implement epsilon for half-precision floating point type.
    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat2x2<mediump_uint> mediump_umat2x2GLM_CONSTEXPR T glm::euler ()
    -
    -
    +
    -

    Medium-precision unsigned integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 265 of file matrix_integer.hpp.

    +

    Return Euler's constant.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat2x3<mediump_uint> mediump_umat2x3GLM_CONSTEXPR T glm::golden_ratio ()
    -
    -
    +
    -

    Medium-precision unsigned integer 2x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 269 of file matrix_integer.hpp.

    +

    Return the golden ratio constant.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat2x4<mediump_uint> mediump_umat2x4GLM_CONSTEXPR T glm::half_pi ()
    -
    -
    +
    -

    Medium-precision unsigned integer 2x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 273 of file matrix_integer.hpp.

    +

    Return pi / 2.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat3x3<mediump_uint> mediump_umat3GLM_CONSTEXPR T glm::ln_ln_two ()
    -
    -
    +
    -

    Medium-precision unsigned integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 256 of file matrix_integer.hpp.

    +

    Return ln(ln(2)).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat3x2<mediump_uint> mediump_umat3x2GLM_CONSTEXPR T glm::ln_ten ()
    -
    -
    +
    -

    Medium-precision unsigned integer 3x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 277 of file matrix_integer.hpp.

    +

    Return ln(10).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat3x3<mediump_uint> mediump_umat3x3GLM_CONSTEXPR T glm::ln_two ()
    -
    -
    +
    -

    Medium-precision unsigned integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 281 of file matrix_integer.hpp.

    +

    Return ln(2).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat3x4<mediump_uint> mediump_umat3x4GLM_CONSTEXPR T glm::one ()
    -
    -
    +
    -

    Medium-precision unsigned integer 3x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 285 of file matrix_integer.hpp.

    +

    Return 1.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat4x4<mediump_uint> mediump_umat4GLM_CONSTEXPR T glm::one_over_pi ()
    -
    -
    +
    -

    Medium-precision unsigned integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 260 of file matrix_integer.hpp.

    +

    Return 1 / pi.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat4x2<mediump_uint> mediump_umat4x2GLM_CONSTEXPR T glm::one_over_root_two ()
    -
    -
    +
    -

    Medium-precision unsigned integer 4x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 289 of file matrix_integer.hpp.

    +

    Return 1 / sqrt(2).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat4x3<mediump_uint> mediump_umat4x3GLM_CONSTEXPR T glm::pi ()
    -
    -
    +
    -

    Medium-precision unsigned integer 4x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 293 of file matrix_integer.hpp.

    +

    Return the pi constant.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef detail::tmat4x4<mediump_uint> mediump_umat4x4GLM_CONSTEXPR T glm::quarter_pi ()
    -
    -
    +
    -

    Medium-precision unsigned integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 297 of file matrix_integer.hpp.

    +

    Return pi / 4.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat2 umat2GLM_CONSTEXPR T glm::root_five ()
    -
    -
    +
    -

    Unsigned integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 456 of file matrix_integer.hpp.

    +

    Return sqrt(5).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat2x2 umat2x2GLM_CONSTEXPR T glm::root_half_pi ()
    -
    -
    +
    -

    Unsigned integer 2x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 468 of file matrix_integer.hpp.

    +

    Return sqrt(pi / 2).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat2x3 umat2x3GLM_CONSTEXPR T glm::root_ln_four ()
    -
    -
    +
    -

    Unsigned integer 2x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 472 of file matrix_integer.hpp.

    +

    Return sqrt(ln(4)).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat2x4 umat2x4GLM_CONSTEXPR T glm::root_pi ()
    -
    -
    +
    -

    Unsigned integer 2x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 476 of file matrix_integer.hpp.

    +

    Return square root of pi.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat3 umat3GLM_CONSTEXPR T glm::root_three ()
    -
    -
    +
    -

    Unsigned integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 460 of file matrix_integer.hpp.

    +

    Return sqrt(3).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat3x2 umat3x2GLM_CONSTEXPR T glm::root_two ()
    -
    -
    +
    -

    Unsigned integer 3x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 480 of file matrix_integer.hpp.

    +

    Return sqrt(2).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat3x3 umat3x3GLM_CONSTEXPR T glm::root_two_pi ()
    -
    -
    +
    -

    Unsigned integer 3x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 484 of file matrix_integer.hpp.

    +

    Return sqrt(2 * pi).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat3x4 umat3x4GLM_CONSTEXPR T glm::third ()
    -
    -
    +
    -

    Unsigned integer 3x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 488 of file matrix_integer.hpp.

    +

    Return 1 / 3.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat4 umat4GLM_CONSTEXPR T glm::two_over_pi ()
    -
    -
    +
    -

    Unsigned integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 464 of file matrix_integer.hpp.

    +

    Return 2 / pi.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat4x2 umat4x2GLM_CONSTEXPR T glm::two_over_root_pi ()
    -
    -
    +
    -

    Unsigned integer 4x2 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 492 of file matrix_integer.hpp.

    +

    Return 2 / sqrt(pi).

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat4x3 umat4x3GLM_CONSTEXPR T glm::two_thirds ()
    -
    -
    +
    -

    Unsigned integer 4x3 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    - -

    Definition at line 496 of file matrix_integer.hpp.

    +

    Return 2 / 3.

    +
    See Also
    GLM_GTC_constants
    - +
    - + + + +
    typedef mediump_umat4x4 umat4x4GLM_CONSTEXPR T glm::zero ()
    -
    -
    +
    -

    Unsigned integer 4x4 matrix.

    -
    See also:
    GLM_GTC_matrix_integer: Integer matrix types
    +

    Return 0.

    +
    See Also
    GLM_GTC_constants
    -

    Definition at line 500 of file matrix_integer.hpp.

    - -
    - - + + - diff --git a/doc/api/a00146.html b/doc/api/a00146.html index 0a731169..aec6337d 100644 --- a/doc/api/a00146.html +++ b/doc/api/a00146.html @@ -2,138 +2,208 @@ - -GLM_GTC_matrix_inverse: Additional matrix inverse function + +GLM_GTC_epsilon + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTC_matrix_inverse: Additional matrix inverse function
    -
    +
    GLM_GTC_epsilon
    +
    GTC Extensions (Stable)
    - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType affineInverse (genType const &m)
    template<typename genType >
    GLM_FUNC_QUALIFIER
    -genType::value_type 
    inverseTranspose (genType const &m)
    template<typename genType >
    genType::boolType epsilonEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    genType::boolType epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename genType >
    genType::boolType epsilonNotEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    genType::boolType epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
     
    -

    Detailed Description

    -

    Defines additional matrix inverting functions.

    -

    <glm/gtc/matrix_inverse.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Comparison functions for a user defined epsilon values.

    +

    <glm/gtc/epsilon.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - + + + + + + + + + + + + + + + + +
    genType glm::affineInverse genType::boolType glm::epsilonEqual ( genType const & m)x,
    genType const & y,
    typename genType::value_type const & epsilon 
    )
    -
    -
    +
    -

    Fast matrix inverse for affine matrix.

    -
    Parameters:
    - - -
    mInput matrix to invert.
    -
    -
    -
    Template Parameters:
    - - -
    genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
    -
    -
    -
    See also:
    GLM_GTC_matrix_inverse: Additional matrix inverse function
    +

    Returns the component-wise compare of |x - y| < epsilon.

    +
    See Also
    GLM_GTC_epsilon
    - +
    - + - + + + + + + + + + + + + + + + + +
    GLM_FUNC_QUALIFIER genType::value_type glm::inverseTranspose genType::boolType glm::epsilonEqual ( genType const & m)x,
    genType const & y,
    genType const & epsilon 
    )
    -
    -
    +
    -

    Compute the inverse transpose of a matrix.

    -
    Parameters:
    - - -
    mInput matrix to invert transpose.
    -
    -
    -
    Template Parameters:
    - - -
    genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
    -
    -
    -
    See also:
    GLM_GTC_matrix_inverse: Additional matrix inverse function
    +

    Returns the component-wise compare of |x - y| < epsilon.

    +
    See Also
    GLM_GTC_epsilon
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genType::boolType glm::epsilonNotEqual (genType const & x,
    genType const & y,
    typename genType::value_type const & epsilon 
    )
    +
    + +

    Returns the component-wise compare of |x - y| < epsilon.

    +
    See Also
    GLM_GTC_epsilon
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genType::boolType glm::epsilonNotEqual (genType const & x,
    genType const & y,
    genType const & epsilon 
    )
    +
    +

    Returns the component-wise compare of |x - y| >= epsilon.

    +
    See Also
    GLM_GTC_epsilon
    +
    +
    +
    + - diff --git a/doc/api/a00147.html b/doc/api/a00147.html index 8c881dfa..d84eda3a 100644 --- a/doc/api/a00147.html +++ b/doc/api/a00147.html @@ -2,903 +2,464 @@ - -GLM_GTC_matrix_transform: Matrix transform functions + +GLM_GTC_half_float + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTC_matrix_transform: Matrix transform functions
    -
    +
    GLM_GTC_half_float
    +
    GTC Extensions (Stable)
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    +Typedefs

    typedef detail::half half
     
    typedef detail::tmat2x2
    +< detail::half > 
    hmat2
     
    typedef detail::tmat2x2
    +< detail::half > 
    hmat2x2
     
    typedef detail::tmat2x3
    +< detail::half > 
    hmat2x3
     
    typedef detail::tmat2x4
    +< detail::half > 
    hmat2x4
     
    typedef detail::tmat3x3
    +< detail::half > 
    hmat3
     
    typedef detail::tmat3x2
    +< detail::half > 
    hmat3x2
     
    typedef detail::tmat3x3
    +< detail::half > 
    hmat3x3
     
    typedef detail::tmat3x4
    +< detail::half > 
    hmat3x4
     
    typedef detail::tmat4x4
    +< detail::half > 
    hmat4
     
    typedef detail::tmat4x2
    +< detail::half > 
    hmat4x2
     
    typedef detail::tmat4x3
    +< detail::half > 
    hmat4x3
     
    typedef detail::tmat4x4
    +< detail::half > 
    hmat4x4
     
    typedef detail::tvec2
    +< detail::half > 
    hvec2
     
    typedef detail::tvec3
    +< detail::half > 
    hvec3
     
    typedef detail::tvec4
    +< detail::half > 
    hvec4
     
    + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + +

    Functions

    template<typename T >
    detail::tmat4x4< T > frustum (T const &left, T const &right, T const &bottom, T const &top, T const &near, T const &far)
    template<typename T >
    detail::tmat4x4< T > infinitePerspective (T fovy, T aspect, T near)
    template<typename T >
    detail::tmat4x4< T > lookAt (detail::tvec3< T > const &eye, detail::tvec3< T > const &center, detail::tvec3< T > const &up)
    template<typename T >
    detail::tmat4x4< T > ortho (T const &left, T const &right, T const &bottom, T const &top, T const &zNear, T const &zFar)
    template<typename T >
    detail::tmat4x4< T > ortho (T const &left, T const &right, T const &bottom, T const &top)
    template<typename T >
    detail::tmat4x4< T > perspective (T const &fovy, T const &aspect, T const &near, T const &far)
    template<typename valType >
    detail::tmat4x4< valType > perspectiveFov (valType const &fov, valType const &width, valType const &height, valType const &near, valType const &far)
    template<typename T , typename U >
    detail::tmat4x4< T > pickMatrix (detail::tvec2< T > const &center, detail::tvec2< T > const &delta, detail::tvec4< U > const &viewport)
    template<typename T , typename U >
    detail::tvec3< T > project (detail::tvec3< T > const &obj, detail::tmat4x4< T > const &model, detail::tmat4x4< T > const &proj, detail::tvec4< U > const &viewport)
    template<typename T >
    detail::tmat4x4< T > rotate (detail::tmat4x4< T > const &m, T const &angle, detail::tvec3< T > const &axis)
    template<typename T >
    detail::tmat4x4< T > scale (detail::tmat4x4< T > const &m, detail::tvec3< T > const &v)
    template<typename T >
    detail::tmat4x4< T > translate (detail::tmat4x4< T > const &m, detail::tvec3< T > const &v)
    template<typename T >
    detail::tmat4x4< T > tweakedInfinitePerspective (T fovy, T aspect, T near)
    template<typename T , typename U >
    detail::tvec3< T > unProject (detail::tvec3< T > const &win, detail::tmat4x4< T > const &model, detail::tmat4x4< T > const &proj, detail::tvec4< U > const &viewport)
    half abs (half const &x)
     
    hvec2 abs (hvec2 const &x)
     
    hvec3 abs (hvec3 const &x)
     
    hvec4 abs (hvec4 const &x)
     
    -

    Detailed Description

    -

    Defines functions that generate common transformation matrices.

    -

    The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.

    -

    <glm/gtc/matrix_transform.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Defines the half-precision floating-point type, along with various typedefs for vectors and matrices.

    +

    <glm/gtc/half_float.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::frustum (T const & left,
    T const & right,
    T const & bottom,
    T const & top,
    T const & near,
    T const & far 
    )typedef detail::half half
    -
    -
    +
    -

    Creates a frustum matrix.

    -
    Parameters:
    - - - - - - - -
    left
    right
    bottom
    top
    near
    far
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    +

    Type for half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 357 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::infinitePerspective (fovy,
    aspect,
    near 
    )typedef detail::tmat2x2<detail::half> hmat2
    -
    -
    +
    -

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite.

    -
    Parameters:
    - - - - -
    fovy
    aspect
    near
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    +

    2 * 2 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 373 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::lookAt (detail::tvec3< T > const & eye,
    detail::tvec3< T > const & center,
    detail::tvec3< T > const & up 
    )typedef detail::tmat2x2<detail::half> hmat2x2
    -
    -
    +
    -

    Build a look at view matrix.

    -
    Parameters:
    - - - - -
    eyePosition of the camera
    centerPosition where the camera is looking at
    upNormalized up vector, how the camera is oriented. Typically (0, 0, 1)
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    -
    -- frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal)
    +

    2 * 2 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 385 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::ortho (T const & left,
    T const & right,
    T const & bottom,
    T const & top,
    T const & zNear,
    T const & zFar 
    )typedef detail::tmat2x3<detail::half> hmat2x3
    -
    -
    +
    -

    Creates a matrix for an orthographic parallel viewing volume.

    -
    Parameters:
    - - - - - - - -
    left
    right
    bottom
    top
    zNear
    zFar
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    -
    -- glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
    +

    2 * 3 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 389 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::ortho (T const & left,
    T const & right,
    T const & bottom,
    T const & top 
    )typedef detail::tmat2x4<detail::half> hmat2x4
    -
    -
    +
    -

    Creates a matrix for projecting two-dimensional coordinates onto the screen.

    -
    Parameters:
    - - - - - -
    left
    right
    bottom
    top
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    -
    -- glm::ortho(T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar)
    +

    2 * 4 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 393 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::perspective (T const & fovy,
    T const & aspect,
    T const & near,
    T const & far 
    )typedef detail::tmat3x3<detail::half> hmat3
    -
    -
    +
    -

    Creates a matrix for a symetric perspective-view frustum.

    -
    Parameters:
    - - - - - -
    fovy
    aspect
    near
    far
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    +

    3 * 3 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 377 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<valType> glm::perspectiveFov (valType const & fov,
    valType const & width,
    valType const & height,
    valType const & near,
    valType const & far 
    )typedef detail::tmat3x2<detail::half> hmat3x2
    -
    -
    +
    -

    Builds a perspective projection matrix based on a field of view.

    -
    Parameters:
    - - - - - - -
    fov
    width
    height
    near
    far
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    +

    3 * 2 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 397 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::pickMatrix (detail::tvec2< T > const & center,
    detail::tvec2< T > const & delta,
    detail::tvec4< U > const & viewport 
    )typedef detail::tmat3x3<detail::half> hmat3x3
    -
    -
    +
    -

    Define a picking region.

    -
    Parameters:
    - - - - -
    center
    delta
    viewport
    -
    -
    -
    Template Parameters:
    - - - -
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    +

    3 * 3 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 401 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    detail::tvec3<T> glm::project (detail::tvec3< T > const & obj,
    detail::tmat4x4< T > const & model,
    detail::tmat4x4< T > const & proj,
    detail::tvec4< U > const & viewport 
    )typedef detail::tmat3x4<detail::half> hmat3x4
    -
    -
    +
    -

    Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.

    -
    Parameters:
    - - - - - -
    obj
    model
    proj
    viewport
    -
    -
    -
    Template Parameters:
    - - - -
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    +

    3 * 4 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 405 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::rotate (detail::tmat4x4< T > const & m,
    T const & angle,
    detail::tvec3< T > const & axis 
    )typedef detail::tmat4x4<detail::half> hmat4
    -
    -
    +
    -

    Builds a rotation 4 * 4 matrix created from an axis vector and an angle expressed in degrees.

    -
    Parameters:
    - - - - -
    mInput matrix multiplied by this rotation matrix.
    angleRotation angle expressed in degrees.
    axisRotation axis, recommanded to be normalized.
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    -
    -GLM_GTX_transform: Extented transformation matrices
    -
    -- rotate(T angle, T x, T y, T z)
    -
    -- rotate(detail::tmat4x4<T> const & m, T angle, T x, T y, T z)
    -
    -- rotate(T angle, detail::tvec3<T> const & v)
    +

    4 * 4 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 381 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::scale (detail::tmat4x4< T > const & m,
    detail::tvec3< T > const & v 
    )typedef detail::tmat4x2<detail::half> hmat4x2
    -
    -
    +
    -

    Builds a scale 4 * 4 matrix created from 3 scalars.

    -
    Parameters:
    - - - -
    mInput matrix multiplied by this scale matrix.
    vRatio of scaling for each axis.
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    -
    -GLM_GTX_transform: Extented transformation matrices
    -
    -- scale(T x, T y, T z) scale(T const & x, T const & y, T const & z)
    -
    -- scale(detail::tmat4x4<T> const & m, T x, T y, T z)
    -
    -- scale(detail::tvec3<T> const & v)
    +

    4 * 2 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 409 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::translate (detail::tmat4x4< T > const & m,
    detail::tvec3< T > const & v 
    )typedef detail::tmat4x3<detail::half> hmat4x3
    -
    -
    +
    -

    Builds a translation 4 * 4 matrix created from a vector of 3 components.

    -
    Parameters:
    - - - -
    mInput matrix multiplied by this translation matrix.
    vCoordinates of a translation vector.
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
     #include <glm/glm.hpp>
    - #include <glm/gtc/matrix_transform.hpp>
    - ...
    - glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));
    - // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f
    - // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f
    - // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f
    - // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f
    -
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    -
    -GLM_GTX_transform: Extented transformation matrices
    -
    -- translate(T x, T y, T z)
    -
    -- translate(detail::tmat4x4<T> const & m, T x, T y, T z)
    -
    -- translate(detail::tvec3<T> const & v)
    +

    4 * 3 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 413 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::tweakedInfinitePerspective (fovy,
    aspect,
    near 
    )typedef detail::tmat4x4<detail::half> hmat4x4
    -
    -
    +
    -

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.

    -
    Parameters:
    - - - - -
    fovy
    aspect
    near
    -
    -
    -
    Template Parameters:
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    +

    4 * 4 matrix of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 417 of file half_float.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    detail::tvec3<T> glm::unProject (detail::tvec3< T > const & win,
    detail::tmat4x4< T > const & model,
    detail::tmat4x4< T > const & proj,
    detail::tvec4< U > const & viewport 
    )typedef detail::tvec2<detail::half> hvec2
    -
    -
    +
    -

    Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.

    -
    Parameters:
    - - - - - -
    win
    model
    proj
    viewport
    -
    -
    -
    Template Parameters:
    - - - -
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    -
    -
    -
    See also:
    GLM_GTC_matrix_transform: Matrix transform functions
    +

    Vector of 2 half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 361 of file half_float.hpp.

    + +
    +
    + + + + +
    typedef detail::tvec3<detail::half> hvec3
    +
    + +

    Vector of 3 half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    + +

    Definition at line 365 of file half_float.hpp.

    +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<detail::half> hvec4
    +
    +

    Vector of 4 half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_half_float
    +

    Definition at line 369 of file half_float.hpp.

    + +
    +
    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    half glm::abs (half const & x)
    +
    + +

    Returns the absolute value of a half-precision floating-point value.

    +
    See Also
    GLM_GTC_half_float
    + +
    +
    + +
    +
    + + + + + + + + +
    hvec2 glm::abs (hvec2 const & x)
    +
    + +

    Returns the absolute value of a half-precision floating-point two dimensional vector.

    +
    See Also
    GLM_GTC_half_float
    + +
    +
    + +
    +
    + + + + + + + + +
    hvec3 glm::abs (hvec3 const & x)
    +
    + +

    Returns the absolute value of a half-precision floating-point three dimensional vector.

    +
    See Also
    GLM_GTC_half_float
    + +
    +
    + +
    +
    + + + + + + + + +
    hvec4 glm::abs (hvec4 const & x)
    +
    + +

    Returns the absolute value of a half-precision floating-point four dimensional vector.

    +
    See Also
    GLM_GTC_half_float
    + +
    +
    +
    + - diff --git a/doc/api/a00148.html b/doc/api/a00148.html index 2ed326d3..3f88bb42 100644 --- a/doc/api/a00148.html +++ b/doc/api/a00148.html @@ -2,101 +2,77 @@ - -GLM_GTC_noise: Procedural noise functions + +GLM_GTC_matrix_access + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTC_noise: Procedural noise functions
    -
    +
    GLM_GTC_matrix_access
    +
    GTC Extensions (Stable)
    - - - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename T , template< typename > class vecType>
    perlin (vecType< T > const &p)
    template<typename T , template< typename > class vecType>
    perlin (vecType< T > const &p, vecType< T > const &rep)
    template<typename T , template< typename > class vecType>
    simplex (vecType< T > const &p)
    template<typename genType >
    genType::col_type column (genType const &m, int index)
     
    template<typename genType >
    genType column (genType const &m, int index, typename genType::col_type const &x)
     
    template<typename genType >
    genType::row_type row (genType const &m, int index)
     
    template<typename genType >
    genType row (genType const &m, int index, typename genType::row_type const &x)
     
    -

    Detailed Description

    -

    Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf <glm/gtc/noise.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Defines functions to access rows or columns of a matrix easily.

    +

    <glm/gtc/matrix_access.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - - -
    T glm::perlin genType::col_type glm::column (vecType< T > const & p)
    -
    -
    - -

    Classic perlin noise.

    -
    See also:
    GLM_GTC_noise: Procedural noise functions
    - -
    -
    - -
    -
    - - - - - - + + - - + + @@ -104,42 +80,118 @@ Functions
    T glm::perlin (vecType< T > const & p, genType const & m,
    vecType< T > const & rep int index 
    -
    -
    +
    -

    Periodic perlin noise.

    -
    See also:
    GLM_GTC_noise: Procedural noise functions
    +

    Get a specific column of a matrix.

    +
    See Also
    GLM_GTC_matrix_access
    - +
    - + - - + + + + + + + + + + + + + + + + + +
    T glm::simplex genType glm::column (vecType< T > const & p)genType const & m,
    int index,
    typename genType::col_type const & x 
    )
    -
    -
    +
    -

    Simplex noise.

    -
    See also:
    GLM_GTC_noise: Procedural noise functions
    +

    Set a specific column to a matrix.

    +
    See Also
    GLM_GTC_matrix_access
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType::row_type glm::row (genType const & m,
    int index 
    )
    +
    + +

    Get a specific row of a matrix.

    +
    See Also
    GLM_GTC_matrix_access
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genType glm::row (genType const & m,
    int index,
    typename genType::row_type const & x 
    )
    +
    +

    Set a specific row to a matrix.

    +
    See Also
    GLM_GTC_matrix_access
    +
    +
    +
    + - diff --git a/doc/api/a00149.html b/doc/api/a00149.html index 0192d167..2e5bf5af 100644 --- a/doc/api/a00149.html +++ b/doc/api/a00149.html @@ -2,504 +2,1940 @@ - -GLM_GTC_quaternion: Quaternion types and functions + +GLM_GTC_matrix_integer + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Typedefs
    -
    GLM_GTC_quaternion: Quaternion types and functions
    -
    GTC Extensions (Stable)
    +
    GLM_GTC_matrix_integer
    +
    GTC Extensions (Stable)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Classes

    struct  tquat< T >
     Template for quaternion. More...

    +

    Typedefs

    typedef detail::tquat< double > dquat
    typedef detail::tquat< float > fquat
    typedef detail::tquat
    -< highp_float > 
    highp_quat
    typedef detail::tquat
    -< detail::half > 
    hquat
    typedef detail::tquat< lowp_float > lowp_quat
    typedef detail::tquat
    -< mediump_float > 
    mediump_quat
    typedef detail::tquat< float > quat

    -Functions

    template<typename T >
    detail::tquat< T > conjugate (detail::tquat< T > const &q)
    template<typename T >
    dot (detail::tquat< T > const &q1, detail::tquat< T > const &q2)
    template<typename T >
    detail::tquat< T > inverse (detail::tquat< T > const &q)
    template<typename T >
    length (detail::tquat< T > const &q)
    template<typename T >
    detail::tmat3x3< T > mat3_cast (detail::tquat< T > const &x)
    template<typename T >
    detail::tmat4x4< T > mat4_cast (detail::tquat< T > const &x)
    template<typename T >
    detail::tquat< T > mix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
    template<typename T >
    detail::tquat< T > normalize (detail::tquat< T > const &q)
    template<typename T >
    detail::tquat< T > quat_cast (detail::tmat3x3< T > const &x)
    template<typename T >
    detail::tquat< T > quat_cast (detail::tmat4x4< T > const &x)
    template<typename T >
    detail::tquat< T > rotate (detail::tquat< T > const &q, typename detail::tquat< T >::value_type const &angle, detail::tvec3< T > const &v)
    typedef detail::tmat2x2
    +< highp_int > 
    highp_imat2
     
    typedef detail::tmat2x2
    +< highp_int > 
    highp_imat2x2
     
    typedef detail::tmat2x3
    +< highp_int > 
    highp_imat2x3
     
    typedef detail::tmat2x4
    +< highp_int > 
    highp_imat2x4
     
    typedef detail::tmat3x3
    +< highp_int > 
    highp_imat3
     
    typedef detail::tmat3x2
    +< highp_int > 
    highp_imat3x2
     
    typedef detail::tmat3x3
    +< highp_int > 
    highp_imat3x3
     
    typedef detail::tmat3x4
    +< highp_int > 
    highp_imat3x4
     
    typedef detail::tmat4x4
    +< highp_int > 
    highp_imat4
     
    typedef detail::tmat4x2
    +< highp_int > 
    highp_imat4x2
     
    typedef detail::tmat4x3
    +< highp_int > 
    highp_imat4x3
     
    typedef detail::tmat4x4
    +< highp_int > 
    highp_imat4x4
     
    typedef detail::tmat2x2
    +< highp_uint > 
    highp_umat2
     
    typedef detail::tmat2x2
    +< highp_uint > 
    highp_umat2x2
     
    typedef detail::tmat2x3
    +< highp_uint > 
    highp_umat2x3
     
    typedef detail::tmat2x4
    +< highp_uint > 
    highp_umat2x4
     
    typedef detail::tmat3x3
    +< highp_uint > 
    highp_umat3
     
    typedef detail::tmat3x2
    +< highp_uint > 
    highp_umat3x2
     
    typedef detail::tmat3x3
    +< highp_uint > 
    highp_umat3x3
     
    typedef detail::tmat3x4
    +< highp_uint > 
    highp_umat3x4
     
    typedef detail::tmat4x4
    +< highp_uint > 
    highp_umat4
     
    typedef detail::tmat4x2
    +< highp_uint > 
    highp_umat4x2
     
    typedef detail::tmat4x3
    +< highp_uint > 
    highp_umat4x3
     
    typedef detail::tmat4x4
    +< highp_uint > 
    highp_umat4x4
     
    typedef mediump_imat2 imat2
     
    typedef mediump_imat2x2 imat2x2
     
    typedef mediump_imat2x3 imat2x3
     
    typedef mediump_imat2x4 imat2x4
     
    typedef mediump_imat3 imat3
     
    typedef mediump_imat3x2 imat3x2
     
    typedef mediump_imat3x3 imat3x3
     
    typedef mediump_imat3x4 imat3x4
     
    typedef mediump_imat4 imat4
     
    typedef mediump_imat4x2 imat4x2
     
    typedef mediump_imat4x3 imat4x3
     
    typedef mediump_imat4x4 imat4x4
     
    typedef detail::tmat2x2< lowp_int > lowp_imat2
     
    typedef detail::tmat2x2< lowp_int > lowp_imat2x2
     
    typedef detail::tmat2x3< lowp_int > lowp_imat2x3
     
    typedef detail::tmat2x4< lowp_int > lowp_imat2x4
     
    typedef detail::tmat3x3< lowp_int > lowp_imat3
     
    typedef detail::tmat3x2< lowp_int > lowp_imat3x2
     
    typedef detail::tmat3x3< lowp_int > lowp_imat3x3
     
    typedef detail::tmat3x4< lowp_int > lowp_imat3x4
     
    typedef detail::tmat4x4< lowp_int > lowp_imat4
     
    typedef detail::tmat4x2< lowp_int > lowp_imat4x2
     
    typedef detail::tmat4x3< lowp_int > lowp_imat4x3
     
    typedef detail::tmat4x4< lowp_int > lowp_imat4x4
     
    typedef detail::tmat2x2
    +< lowp_uint > 
    lowp_umat2
     
    typedef detail::tmat2x2
    +< lowp_uint > 
    lowp_umat2x2
     
    typedef detail::tmat2x3
    +< lowp_uint > 
    lowp_umat2x3
     
    typedef detail::tmat2x4
    +< lowp_uint > 
    lowp_umat2x4
     
    typedef detail::tmat3x3
    +< lowp_uint > 
    lowp_umat3
     
    typedef detail::tmat3x2
    +< lowp_uint > 
    lowp_umat3x2
     
    typedef detail::tmat3x3
    +< lowp_uint > 
    lowp_umat3x3
     
    typedef detail::tmat3x4
    +< lowp_uint > 
    lowp_umat3x4
     
    typedef detail::tmat4x4
    +< lowp_uint > 
    lowp_umat4
     
    typedef detail::tmat4x2
    +< lowp_uint > 
    lowp_umat4x2
     
    typedef detail::tmat4x3
    +< lowp_uint > 
    lowp_umat4x3
     
    typedef detail::tmat4x4
    +< lowp_uint > 
    lowp_umat4x4
     
    typedef detail::tmat2x2
    +< mediump_int > 
    mediump_imat2
     
    typedef detail::tmat2x2
    +< mediump_int > 
    mediump_imat2x2
     
    typedef detail::tmat2x3
    +< mediump_int > 
    mediump_imat2x3
     
    typedef detail::tmat2x4
    +< mediump_int > 
    mediump_imat2x4
     
    typedef detail::tmat3x3
    +< mediump_int > 
    mediump_imat3
     
    typedef detail::tmat3x2
    +< mediump_int > 
    mediump_imat3x2
     
    typedef detail::tmat3x3
    +< mediump_int > 
    mediump_imat3x3
     
    typedef detail::tmat3x4
    +< mediump_int > 
    mediump_imat3x4
     
    typedef detail::tmat4x4
    +< mediump_int > 
    mediump_imat4
     
    typedef detail::tmat4x2
    +< mediump_int > 
    mediump_imat4x2
     
    typedef detail::tmat4x3
    +< mediump_int > 
    mediump_imat4x3
     
    typedef detail::tmat4x4
    +< mediump_int > 
    mediump_imat4x4
     
    typedef detail::tmat2x2
    +< mediump_uint > 
    mediump_umat2
     
    typedef detail::tmat2x2
    +< mediump_uint > 
    mediump_umat2x2
     
    typedef detail::tmat2x3
    +< mediump_uint > 
    mediump_umat2x3
     
    typedef detail::tmat2x4
    +< mediump_uint > 
    mediump_umat2x4
     
    typedef detail::tmat3x3
    +< mediump_uint > 
    mediump_umat3
     
    typedef detail::tmat3x2
    +< mediump_uint > 
    mediump_umat3x2
     
    typedef detail::tmat3x3
    +< mediump_uint > 
    mediump_umat3x3
     
    typedef detail::tmat3x4
    +< mediump_uint > 
    mediump_umat3x4
     
    typedef detail::tmat4x4
    +< mediump_uint > 
    mediump_umat4
     
    typedef detail::tmat4x2
    +< mediump_uint > 
    mediump_umat4x2
     
    typedef detail::tmat4x3
    +< mediump_uint > 
    mediump_umat4x3
     
    typedef detail::tmat4x4
    +< mediump_uint > 
    mediump_umat4x4
     
    typedef mediump_umat2 umat2
     
    typedef mediump_umat2x2 umat2x2
     
    typedef mediump_umat2x3 umat2x3
     
    typedef mediump_umat2x4 umat2x4
     
    typedef mediump_umat3 umat3
     
    typedef mediump_umat3x2 umat3x2
     
    typedef mediump_umat3x3 umat3x3
     
    typedef mediump_umat3x4 umat3x4
     
    typedef mediump_umat4 umat4
     
    typedef mediump_umat4x2 umat4x2
     
    typedef mediump_umat4x3 umat4x3
     
    typedef mediump_umat4x4 umat4x4
     
    -

    Detailed Description

    -

    Defines a templated quaternion type and several quaternion operations.

    -

    <glm/gtc/quaternion.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    Detailed Description

    +

    Defines a number of matrices with integer types.

    +

    <glm/gtc/matrix_integer.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - +
    typedef detail::tquat<double> dquattypedef detail::tmat2x2<highp_int> highp_imat2
    -
    -
    +
    -

    Quaternion of double-precision floating-point numbers.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Definition at line 253 of file gtc/quaternion.hpp.

    +

    Definition at line 54 of file matrix_integer.hpp.

    - +
    - +
    typedef detail::tquat<float> fquattypedef detail::tmat2x2<highp_int> highp_imat2x2
    -
    -
    +
    -

    Quaternion of single-precision floating-point numbers.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Definition at line 248 of file gtc/quaternion.hpp.

    +

    Definition at line 66 of file matrix_integer.hpp.

    - +
    - +
    typedef detail::tquat<highp_float> highp_quattypedef detail::tmat2x3<highp_int> highp_imat2x3
    -
    -
    +
    -

    Quaternion of high precision floating-point numbers.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 2x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Definition at line 268 of file gtc/quaternion.hpp.

    +

    Definition at line 70 of file matrix_integer.hpp.

    - +
    - +
    typedef detail::tquat<detail::half> hquattypedef detail::tmat2x4<highp_int> highp_imat2x4
    -
    -
    +
    -

    Quaternion of half-precision floating-point numbers.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 2x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Definition at line 243 of file gtc/quaternion.hpp.

    +

    Definition at line 74 of file matrix_integer.hpp.

    - +
    - +
    typedef detail::tquat<lowp_float> lowp_quattypedef detail::tmat3x3<highp_int> highp_imat3
    -
    -
    +
    -

    Quaternion of low precision floating-point numbers.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Definition at line 258 of file gtc/quaternion.hpp.

    +

    Definition at line 58 of file matrix_integer.hpp.

    - +
    - +
    typedef detail::tquat<mediump_float> mediump_quattypedef detail::tmat3x2<highp_int> highp_imat3x2
    -
    -
    +
    -

    Quaternion of medium precision floating-point numbers.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 3x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Definition at line 263 of file gtc/quaternion.hpp.

    +

    Definition at line 78 of file matrix_integer.hpp.

    - +
    - +
    typedef detail::tquat<float> quattypedef detail::tmat3x3<highp_int> highp_imat3x3
    -
    -
    +
    -

    Quaternion of floating-point numbers.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Definition at line 238 of file gtc/quaternion.hpp.

    +

    Definition at line 82 of file matrix_integer.hpp.

    -

    Function Documentation

    - +
    - - - - - +
    detail::tquat<T> glm::conjugate (detail::tquat< T > const & q)typedef detail::tmat3x4<highp_int> highp_imat3x4
    -
    -
    +
    -

    Returns the q conjugate.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 3x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 86 of file matrix_integer.hpp.

    - +
    - - - - - - - - - - - - - - - +
    T glm::dot (detail::tquat< T > const & q1,
    detail::tquat< T > const & q2 
    )typedef detail::tmat4x4<highp_int> highp_imat4
    -
    -
    +
    -

    Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 62 of file matrix_integer.hpp.

    - +
    - - - - - +
    detail::tquat<T> glm::inverse (detail::tquat< T > const & q)typedef detail::tmat4x2<highp_int> highp_imat4x2
    -
    -
    +
    -

    Returns the q inverse.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 4x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 90 of file matrix_integer.hpp.

    - +
    - - - - - +
    T glm::length (detail::tquat< T > const & q)typedef detail::tmat4x3<highp_int> highp_imat4x3
    -
    -
    +
    -

    Returns the length of the quaternion.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 4x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 94 of file matrix_integer.hpp.

    - +
    - - - - - +
    detail::tmat3x3<T> glm::mat3_cast (detail::tquat< T > const & x)typedef detail::tmat4x4<highp_int> highp_imat4x4
    -
    -
    +
    -

    Converts a quaternion to a 3 * 3 matrix.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision signed integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Referenced by glm::toMat3().

    +

    Definition at line 98 of file matrix_integer.hpp.

    - +
    - - - - - +
    detail::tmat4x4<T> glm::mat4_cast (detail::tquat< T > const & x)typedef detail::tmat2x2<highp_uint> highp_umat2
    -
    -
    +
    -

    Converts a quaternion to a 4 * 4 matrix.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision unsigned integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Referenced by glm::toMat4().

    +

    Definition at line 203 of file matrix_integer.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tquat<T> glm::mix (detail::tquat< T > const & x,
    detail::tquat< T > const & y,
    T const & a 
    )typedef detail::tmat2x2<highp_uint> highp_umat2x2
    -
    -
    +
    -

    Returns a SLERP interpolated quaternion of x and y according a.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision unsigned integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 215 of file matrix_integer.hpp.

    - +
    - - - - - +
    detail::tquat<T> glm::normalize (detail::tquat< T > const & q)typedef detail::tmat2x3<highp_uint> highp_umat2x3
    -
    -
    +
    -

    Returns the normalized quaternion.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision unsigned integer 2x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 219 of file matrix_integer.hpp.

    - +
    - - - - - +
    detail::tquat<T> glm::quat_cast (detail::tmat3x3< T > const & x)typedef detail::tmat2x4<highp_uint> highp_umat2x4
    -
    -
    +
    -

    Converts a 3 * 3 matrix to a quaternion.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision unsigned integer 2x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    -

    Referenced by glm::toQuat().

    +

    Definition at line 223 of file matrix_integer.hpp.

    - +
    - - - - - +
    detail::tquat<T> glm::quat_cast (detail::tmat4x4< T > const & x)typedef detail::tmat3x3<highp_uint> highp_umat3
    -
    -
    +
    -

    Converts a 4 * 4 matrix to a quaternion.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision unsigned integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 207 of file matrix_integer.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tquat<T> glm::rotate (detail::tquat< T > const & q,
    typename detail::tquat< T >::value_type const & angle,
    detail::tvec3< T > const & v 
    )typedef detail::tmat3x2<highp_uint> highp_umat3x2
    -
    -
    +
    -

    Rotates a quaternion from an vector of 3 components axis and an angle expressed in degrees.

    -
    See also:
    GLM_GTC_quaternion: Quaternion types and functions
    +

    High-precision unsigned integer 3x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 227 of file matrix_integer.hpp.

    + +
    +
    + + + + +
    typedef detail::tmat3x3<highp_uint> highp_umat3x3
    +
    + +

    High-precision unsigned integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 231 of file matrix_integer.hpp.

    +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<highp_uint> highp_umat3x4
    +
    +

    High-precision unsigned integer 3x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    +

    Definition at line 235 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<highp_uint> highp_umat4
    +
    + +

    High-precision unsigned integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 211 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<highp_uint> highp_umat4x2
    +
    + +

    High-precision unsigned integer 4x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 239 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<highp_uint> highp_umat4x3
    +
    + +

    High-precision unsigned integer 4x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 243 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<highp_uint> highp_umat4x4
    +
    + +

    High-precision unsigned integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 247 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat2 imat2
    +
    + +

    Signed integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 379 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat2x2 imat2x2
    +
    + +

    Signed integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 391 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat2x3 imat2x3
    +
    + +

    Signed integer 2x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 395 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat2x4 imat2x4
    +
    + +

    Signed integer 2x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 399 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat3 imat3
    +
    + +

    Signed integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 383 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat3x2 imat3x2
    +
    + +

    Signed integer 3x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 403 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat3x3 imat3x3
    +
    + +

    Signed integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 407 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat3x4 imat3x4
    +
    + +

    Signed integer 3x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 411 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat4 imat4
    +
    + +

    Signed integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 387 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat4x2 imat4x2
    +
    + +

    Signed integer 4x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 415 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat4x3 imat4x3
    +
    + +

    Signed integer 4x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 419 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat4x4 imat4x4
    +
    + +

    Signed integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 423 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<lowp_int> lowp_imat2
    +
    + +

    Low-precision signed integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 153 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<lowp_int> lowp_imat2x2
    +
    + +

    Low-precision signed integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 166 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<lowp_int> lowp_imat2x3
    +
    + +

    Low-precision signed integer 2x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 170 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<lowp_int> lowp_imat2x4
    +
    + +

    Low-precision signed integer 2x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 174 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<lowp_int> lowp_imat3
    +
    + +

    Low-precision signed integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 157 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<lowp_int> lowp_imat3x2
    +
    + +

    Low-precision signed integer 3x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 178 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<lowp_int> lowp_imat3x3
    +
    + +

    Low-precision signed integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 182 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<lowp_int> lowp_imat3x4
    +
    + +

    Low-precision signed integer 3x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 186 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<lowp_int> lowp_imat4
    +
    + +

    Low-precision signed integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 161 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<lowp_int> lowp_imat4x2
    +
    + +

    Low-precision signed integer 4x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 190 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<lowp_int> lowp_imat4x3
    +
    + +

    Low-precision signed integer 4x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 194 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<lowp_int> lowp_imat4x4
    +
    + +

    Low-precision signed integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 198 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<lowp_uint> lowp_umat2
    +
    + +

    Low-precision unsigned integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 302 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<lowp_uint> lowp_umat2x2
    +
    + +

    Low-precision unsigned integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 315 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<lowp_uint> lowp_umat2x3
    +
    + +

    Low-precision unsigned integer 2x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 319 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<lowp_uint> lowp_umat2x4
    +
    + +

    Low-precision unsigned integer 2x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 323 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<lowp_uint> lowp_umat3
    +
    + +

    Low-precision unsigned integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 306 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<lowp_uint> lowp_umat3x2
    +
    + +

    Low-precision unsigned integer 3x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 327 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<lowp_uint> lowp_umat3x3
    +
    + +

    Low-precision unsigned integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 331 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<lowp_uint> lowp_umat3x4
    +
    + +

    Low-precision unsigned integer 3x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 335 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<lowp_uint> lowp_umat4
    +
    + +

    Low-precision unsigned integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 310 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<lowp_uint> lowp_umat4x2
    +
    + +

    Low-precision unsigned integer 4x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 339 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<lowp_uint> lowp_umat4x3
    +
    + +

    Low-precision unsigned integer 4x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 343 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<lowp_uint> lowp_umat4x4
    +
    + +

    Low-precision unsigned integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 347 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<mediump_int> mediump_imat2
    +
    + +

    Medium-precision signed integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 103 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<mediump_int> mediump_imat2x2
    +
    + +

    Medium-precision signed integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 116 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<mediump_int> mediump_imat2x3
    +
    + +

    Medium-precision signed integer 2x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 120 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<mediump_int> mediump_imat2x4
    +
    + +

    Medium-precision signed integer 2x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 124 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<mediump_int> mediump_imat3
    +
    + +

    Medium-precision signed integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 107 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<mediump_int> mediump_imat3x2
    +
    + +

    Medium-precision signed integer 3x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 128 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<mediump_int> mediump_imat3x3
    +
    + +

    Medium-precision signed integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 132 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<mediump_int> mediump_imat3x4
    +
    + +

    Medium-precision signed integer 3x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 136 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<mediump_int> mediump_imat4
    +
    + +

    Medium-precision signed integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 111 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<mediump_int> mediump_imat4x2
    +
    + +

    Medium-precision signed integer 4x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 140 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<mediump_int> mediump_imat4x3
    +
    + +

    Medium-precision signed integer 4x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 144 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<mediump_int> mediump_imat4x4
    +
    + +

    Medium-precision signed integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 148 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<mediump_uint> mediump_umat2
    +
    + +

    Medium-precision unsigned integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 252 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<mediump_uint> mediump_umat2x2
    +
    + +

    Medium-precision unsigned integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 265 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<mediump_uint> mediump_umat2x3
    +
    + +

    Medium-precision unsigned integer 2x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 269 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<mediump_uint> mediump_umat2x4
    +
    + +

    Medium-precision unsigned integer 2x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 273 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<mediump_uint> mediump_umat3
    +
    + +

    Medium-precision unsigned integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 256 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<mediump_uint> mediump_umat3x2
    +
    + +

    Medium-precision unsigned integer 3x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 277 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<mediump_uint> mediump_umat3x3
    +
    + +

    Medium-precision unsigned integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 281 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<mediump_uint> mediump_umat3x4
    +
    + +

    Medium-precision unsigned integer 3x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 285 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<mediump_uint> mediump_umat4
    +
    + +

    Medium-precision unsigned integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 260 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<mediump_uint> mediump_umat4x2
    +
    + +

    Medium-precision unsigned integer 4x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 289 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<mediump_uint> mediump_umat4x3
    +
    + +

    Medium-precision unsigned integer 4x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 293 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<mediump_uint> mediump_umat4x4
    +
    + +

    Medium-precision unsigned integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 297 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat2 umat2
    +
    + +

    Unsigned integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 456 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat2x2 umat2x2
    +
    + +

    Unsigned integer 2x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 468 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat2x3 umat2x3
    +
    + +

    Unsigned integer 2x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 472 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat2x4 umat2x4
    +
    + +

    Unsigned integer 2x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 476 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat3 umat3
    +
    + +

    Unsigned integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 460 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat3x2 umat3x2
    +
    + +

    Unsigned integer 3x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 480 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat3x3 umat3x3
    +
    + +

    Unsigned integer 3x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 484 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat3x4 umat3x4
    +
    + +

    Unsigned integer 3x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 488 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat4 umat4
    +
    + +

    Unsigned integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 464 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat4x2 umat4x2
    +
    + +

    Unsigned integer 4x2 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 492 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat4x3 umat4x3
    +
    + +

    Unsigned integer 4x3 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 496 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat4x4 umat4x4
    +
    + +

    Unsigned integer 4x4 matrix.

    +
    See Also
    GLM_GTC_matrix_integer
    + +

    Definition at line 500 of file matrix_integer.hpp.

    + +
    +
    +
    + - diff --git a/doc/api/a00150.html b/doc/api/a00150.html index 5d21b334..f46e51ba 100644 --- a/doc/api/a00150.html +++ b/doc/api/a00150.html @@ -2,266 +2,125 @@ - -GLM_GTC_random: Random number generation + +GLM_GTC_matrix_inverse + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTC_random: Random number generation
    -
    +
    GLM_GTC_matrix_inverse
    +
    GTC Extensions (Stable)
    - - - - - - - - - - - - - + + + + + +

    +

    Functions

    template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    ballRand (T const &Radius)
    template<typename T >
    detail::tvec2< T > circularRand (T const &Radius)
    template<typename T >
    detail::tvec2< T > diskRand (T const &Radius)
    template<typename genType >
    genType gaussRand (genType const &Mean, genType const &Deviation)
    template<typename genType >
    genType linearRand (genType const &Min, genType const &Max)
    template<typename T >
    detail::tvec3< T > sphericalRand (T const &Radius)
    template<typename genType >
    genType affineInverse (genType const &m)
     
    template<typename genType >
    GLM_FUNC_QUALIFIER
    +genType::value_type 
    inverseTranspose (genType const &m)
     
    -

    Detailed Description

    -

    Generate random number from various distribution methods.

    -

    <glm/gtc/random.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Defines additional matrix inverting functions.

    +

    <glm/gtc/matrix_inverse.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - - - - - - -
    GLM_FUNC_QUALIFIER detail::tvec3<T> glm::ballRand (T const & Radius)
    -
    -
    - -

    Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.

    -
    Parameters:
    - - -
    Radius
    -
    -
    -
    See also:
    GLM_GTC_random: Random number generation
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec2<T> glm::circularRand (T const & Radius)
    -
    -
    - -

    Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.

    -
    Parameters:
    - - -
    Radius
    -
    -
    -
    See also:
    GLM_GTC_random: Random number generation
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec2<T> glm::diskRand (T const & Radius)
    -
    -
    - -

    Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.

    -
    Parameters:
    - - -
    Radius
    -
    -
    -
    See also:
    GLM_GTC_random: Random number generation
    - -
    -
    - -
    -
    - - - + - - - - + - - - - - - -
    genType glm::gaussRand genType glm::affineInverse ( genType const & Mean,
    m) genType const & Deviation 
    )
    -
    -
    +
    -

    Generate random numbers in the interval [Min, Max], according a gaussian distribution.

    -
    Parameters:
    +

    Fast matrix inverse for affine matrix.

    +
    Parameters
    - - +
    Mean
    Deviation
    mInput matrix to invert.
    -
    See also:
    GLM_GTC_random: Random number generation
    +
    Template Parameters
    + + +
    genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
    +
    +
    +
    See Also
    GLM_GTC_matrix_inverse
    - +
    - + - - - - - - - - - - - - - -
    genType glm::linearRand GLM_FUNC_QUALIFIER genType::value_type glm::inverseTranspose ( genType const & Min,
    genType const & Max 
    )
    -
    -
    - -

    Generate random numbers in the interval [Min, Max], according a linear distribution.

    -
    Parameters:
    - - - -
    Min
    Max
    -
    -
    -
    Template Parameters:
    - - -
    genTypeValue type. Currently supported: half (not recommanded), float or double scalars and vectors.
    -
    -
    -
    See also:
    GLM_GTC_random: Random number generation
    - -
    -
    - -
    -
    - - - - - - +
    detail::tvec3<T> glm::sphericalRand (T const & Radius)m)
    -
    -
    +
    -

    Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.

    -
    Parameters:
    +

    Compute the inverse transpose of a matrix.

    +
    Parameters
    - +
    Radius
    mInput matrix to invert transpose.
    -
    See also:
    GLM_GTC_random: Random number generation
    +
    Template Parameters
    + + +
    genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
    +
    +
    +
    See Also
    GLM_GTC_matrix_inverse
    -
    - - + + - diff --git a/doc/api/a00151.html b/doc/api/a00151.html index 18fb4972..ea0be2c3 100644 --- a/doc/api/a00151.html +++ b/doc/api/a00151.html @@ -2,84 +2,132 @@ - -GLM_GTC_swizzle: Swizzle 'operator' implementation + +GLM_GTC_matrix_transform + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTC_swizzle: Swizzle 'operator' implementation
    -
    +
    GLM_GTC_matrix_transform
    +
    GTC Extensions (Stable)
    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T , template< typename > class vecType>
    detail::tvec2< T > const & swizzle (vecType< T > const &v, comp x, comp y)
    template<typename T >
    detail::tmat4x4< T > frustum (T const &left, T const &right, T const &bottom, T const &top, T const &near, T const &far)
     
    template<typename T >
    detail::tmat4x4< T > infinitePerspective (T fovy, T aspect, T near)
     
    template<typename T >
    detail::tmat4x4< T > lookAt (detail::tvec3< T > const &eye, detail::tvec3< T > const &center, detail::tvec3< T > const &up)
     
    template<typename T >
    detail::tmat4x4< T > ortho (T const &left, T const &right, T const &bottom, T const &top, T const &zNear, T const &zFar)
     
    template<typename T >
    detail::tmat4x4< T > ortho (T const &left, T const &right, T const &bottom, T const &top)
     
    template<typename T >
    detail::tmat4x4< T > perspective (T const &fovy, T const &aspect, T const &near, T const &far)
     
    template<typename valType >
    detail::tmat4x4< valType > perspectiveFov (valType const &fov, valType const &width, valType const &height, valType const &near, valType const &far)
     
    template<typename T , typename U >
    detail::tmat4x4< T > pickMatrix (detail::tvec2< T > const &center, detail::tvec2< T > const &delta, detail::tvec4< U > const &viewport)
     
    template<typename T , typename U >
    detail::tvec3< T > project (detail::tvec3< T > const &obj, detail::tmat4x4< T > const &model, detail::tmat4x4< T > const &proj, detail::tvec4< U > const &viewport)
     
    template<typename T >
    detail::tmat4x4< T > rotate (detail::tmat4x4< T > const &m, T const &angle, detail::tvec3< T > const &axis)
     
    template<typename T >
    detail::tmat4x4< T > scale (detail::tmat4x4< T > const &m, detail::tvec3< T > const &v)
     
    template<typename T >
    detail::tmat4x4< T > translate (detail::tmat4x4< T > const &m, detail::tvec3< T > const &v)
     
    template<typename T >
    detail::tmat4x4< T > tweakedInfinitePerspective (T fovy, T aspect, T near)
     
    template<typename T , typename U >
    detail::tvec3< T > unProject (detail::tvec3< T > const &win, detail::tmat4x4< T > const &model, detail::tmat4x4< T > const &proj, detail::tvec4< U > const &viewport)
     
    -

    Detailed Description

    -

    Provide functions to emulate GLSL swizzle operator fonctionalities.

    -

    <glm/gtc/swizzle.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Defines functions that generate common transformation matrices.

    +

    The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.

    +

    <glm/gtc/matrix_transform.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -87,34 +135,757 @@ Functions
    detail::tvec2<T> const& glm::swizzle detail::tmat4x4<T> glm::frustum (vecType< T > const & v, T const & left,
    comp x, T const & right,
    comp y T const & bottom,
    T const & top,
    T const & near,
    T const & far 
    -
    -
    -
    Parameters:
    +
    + +

    Creates a frustum matrix.

    +
    Parameters
    - - + + + + + +
    vVector source
    x
    left
    right
    bottom
    top
    near
    far
    -
    Template Parameters:
    - - - +
    Template Parameters
    +
    T
    vecType
    +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    See also:
    GLM_GTC_swizzle: Swizzle 'operator' implementation
    +
    See Also
    GLM_GTC_matrix_transform
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::infinitePerspective (fovy,
    aspect,
    near 
    )
    +
    + +

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite.

    +
    Parameters
    + + + + +
    fovyExpressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    aspect
    near
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::lookAt (detail::tvec3< T > const & eye,
    detail::tvec3< T > const & center,
    detail::tvec3< T > const & up 
    )
    +
    +

    Build a look at view matrix.

    +
    Parameters
    + + + + +
    eyePosition of the camera
    centerPosition where the camera is looking at
    upNormalized up vector, how the camera is oriented. Typically (0, 0, 1)
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    +
    +- frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal)
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::ortho (T const & left,
    T const & right,
    T const & bottom,
    T const & top,
    T const & zNear,
    T const & zFar 
    )
    +
    + +

    Creates a matrix for an orthographic parallel viewing volume.

    +
    Parameters
    + + + + + + + +
    left
    right
    bottom
    top
    zNear
    zFar
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    +
    +- glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::ortho (T const & left,
    T const & right,
    T const & bottom,
    T const & top 
    )
    +
    + +

    Creates a matrix for projecting two-dimensional coordinates onto the screen.

    +
    Parameters
    + + + + + +
    left
    right
    bottom
    top
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    +
    +- glm::ortho(T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::perspective (T const & fovy,
    T const & aspect,
    T const & near,
    T const & far 
    )
    +
    + +

    Creates a matrix for a symetric perspective-view frustum.

    +
    Parameters
    + + + + + +
    fovyExpressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    aspect
    near
    far
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<valType> glm::perspectiveFov (valType const & fov,
    valType const & width,
    valType const & height,
    valType const & near,
    valType const & far 
    )
    +
    + +

    Builds a perspective projection matrix based on a field of view.

    +
    Parameters
    + + + + + + +
    fovExpressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    width
    height
    near
    far
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::pickMatrix (detail::tvec2< T > const & center,
    detail::tvec2< T > const & delta,
    detail::tvec4< U > const & viewport 
    )
    +
    + +

    Define a picking region.

    +
    Parameters
    + + + + +
    center
    delta
    viewport
    +
    +
    +
    Template Parameters
    + + + +
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tvec3<T> glm::project (detail::tvec3< T > const & obj,
    detail::tmat4x4< T > const & model,
    detail::tmat4x4< T > const & proj,
    detail::tvec4< U > const & viewport 
    )
    +
    + +

    Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.

    +
    Parameters
    + + + + + +
    obj
    model
    proj
    viewport
    +
    +
    +
    Template Parameters
    + + + +
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::rotate (detail::tmat4x4< T > const & m,
    T const & angle,
    detail::tvec3< T > const & axis 
    )
    +
    + +

    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.

    +
    Parameters
    + + + + +
    mInput matrix multiplied by this rotation matrix.
    angleRotation angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisRotation axis, recommanded to be normalized.
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    +
    +GLM_GTX_transform
    +
    +- rotate(T angle, T x, T y, T z)
    +
    +- rotate(detail::tmat4x4<T> const & m, T angle, T x, T y, T z)
    +
    +- rotate(T angle, detail::tvec3<T> const & v)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::scale (detail::tmat4x4< T > const & m,
    detail::tvec3< T > const & v 
    )
    +
    + +

    Builds a scale 4 * 4 matrix created from 3 scalars.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this scale matrix.
    vRatio of scaling for each axis.
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    +
    +GLM_GTX_transform
    +
    +- scale(T x, T y, T z) scale(T const & x, T const & y, T const & z)
    +
    +- scale(detail::tmat4x4<T> const & m, T x, T y, T z)
    +
    +- scale(detail::tvec3<T> const & v)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::translate (detail::tmat4x4< T > const & m,
    detail::tvec3< T > const & v 
    )
    +
    + +

    Builds a translation 4 * 4 matrix created from a vector of 3 components.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this translation matrix.
    vCoordinates of a translation vector.
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    #include <glm/glm.hpp>
    + +
    ...
    +
    glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));
    +
    // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f
    +
    // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f
    +
    // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f
    +
    // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f
    +
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    +
    +GLM_GTX_transform
    +
    +- translate(T x, T y, T z)
    +
    +- translate(detail::tmat4x4<T> const & m, T x, T y, T z)
    +
    +- translate(detail::tvec3<T> const & v)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::tweakedInfinitePerspective (fovy,
    aspect,
    near 
    )
    +
    + +

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.

    +
    Parameters
    + + + + +
    fovyExpressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    aspect
    near
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tvec3<T> glm::unProject (detail::tvec3< T > const & win,
    detail::tmat4x4< T > const & model,
    detail::tmat4x4< T > const & proj,
    detail::tvec4< U > const & viewport 
    )
    +
    + +

    Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.

    +
    Parameters
    + + + + + +
    win
    model
    proj
    viewport
    +
    +
    +
    Template Parameters
    + + + +
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    +
    +
    +
    See Also
    GLM_GTC_matrix_transform
    + +
    +
    +
    + - diff --git a/doc/api/a00152.html b/doc/api/a00152.html index 6d8a8136..b989ce8f 100644 --- a/doc/api/a00152.html +++ b/doc/api/a00152.html @@ -2,2594 +2,131 @@ - -GLM_GTC_type_precision: Vector and matrix types with defined precisions + +GLM_GTC_noise + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Functions
    -
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    -
    GTC Extensions (Stable)
    +
    GLM_GTC_noise
    +
    GTC Extensions (Stable)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + +

    -Typedefs

    typedef float16 f16
    typedef detail::tmat2x2< f16 > f16mat2
    typedef detail::tmat2x2< f16 > f16mat2x2
    typedef detail::tmat2x3< f16 > f16mat2x3
    typedef detail::tmat2x4< f16 > f16mat2x4
    typedef detail::tmat3x3< f16 > f16mat3
    typedef detail::tmat3x2< f16 > f16mat3x2
    typedef detail::tmat3x3< f16 > f16mat3x3
    typedef detail::tmat3x4< f16 > f16mat3x4
    typedef detail::tmat4x4< f16 > f16mat4
    typedef detail::tmat4x2< f16 > f16mat4x2
    typedef detail::tmat4x3< f16 > f16mat4x3
    typedef detail::tmat4x4< f16 > f16mat4x4
    typedef detail::tquat< f16 > f16quat
    typedef detail::tvec1< f16 > f16vec1
    typedef detail::tvec2< f16 > f16vec2
    typedef detail::tvec3< f16 > f16vec3
    typedef detail::tvec4< f16 > f16vec4
    typedef float32 f32
    typedef detail::tmat2x2< f32 > f32mat2
    typedef detail::tmat2x2< f32 > f32mat2x2
    typedef detail::tmat2x3< f32 > f32mat2x3
    typedef detail::tmat2x4< f32 > f32mat2x4
    typedef detail::tmat3x3< f32 > f32mat3
    typedef detail::tmat3x2< f32 > f32mat3x2
    typedef detail::tmat3x3< f32 > f32mat3x3
    typedef detail::tmat3x4< f32 > f32mat3x4
    typedef detail::tmat4x4< f32 > f32mat4
    typedef detail::tmat4x2< f32 > f32mat4x2
    typedef detail::tmat4x3< f32 > f32mat4x3
    typedef detail::tmat4x4< f32 > f32mat4x4
    typedef detail::tquat< f32 > f32quat
    typedef detail::tvec1< f32 > f32vec1
    typedef detail::tvec2< f32 > f32vec2
    typedef detail::tvec3< f32 > f32vec3
    typedef detail::tvec4< f32 > f32vec4
    typedef float64 f64
    typedef detail::tmat2x2< f64 > f64mat2
    typedef detail::tmat2x2< f64 > f64mat2x2
    typedef detail::tmat2x3< f64 > f64mat2x3
    typedef detail::tmat2x4< f64 > f64mat2x4
    typedef detail::tmat3x3< f64 > f64mat3
    typedef detail::tmat3x2< f64 > f64mat3x2
    typedef detail::tmat3x3< f64 > f64mat3x3
    typedef detail::tmat3x4< f64 > f64mat3x4
    typedef detail::tmat4x4< f64 > f64mat4
    typedef detail::tmat4x2< f64 > f64mat4x2
    typedef detail::tmat4x3< f64 > f64mat4x3
    typedef detail::tmat4x4< f64 > f64mat4x4
    typedef detail::tquat< f64 > f64quat
    typedef detail::tvec1< f64 > f64vec1
    typedef detail::tvec2< f64 > f64vec2
    typedef detail::tvec3< f64 > f64vec3
    typedef detail::tvec4< f64 > f64vec4
    typedef detail::float16 float16
    typedef detail::float16 float16_t
    typedef detail::float32 float32
    typedef detail::float32 float32_t
    typedef detail::float64 float64
    typedef detail::float64 float64_t
    typedef detail::tmat2x2< f32 > fmat2
    typedef detail::tmat2x2< f32 > fmat2x2
    typedef detail::tmat2x3< f32 > fmat2x3
    typedef detail::tmat2x4< f32 > fmat2x4
    typedef detail::tmat3x3< f32 > fmat3
    typedef detail::tmat3x2< f32 > fmat3x2
    typedef detail::tmat3x3< f32 > fmat3x3
    typedef detail::tmat3x4< f32 > fmat3x4
    typedef detail::tmat4x4< f32 > fmat4
    typedef detail::tmat4x2< f32 > fmat4x2
    typedef detail::tmat4x3< f32 > fmat4x3
    typedef detail::tmat4x4< f32 > fmat4x4
    typedef detail::tvec1< float > fvec1
    typedef detail::tvec2< float > fvec2
    typedef detail::tvec3< float > fvec3
    typedef detail::tvec4< float > fvec4
    typedef detail::int16 i16
    typedef detail::tvec1< i16 > i16vec1
    typedef detail::tvec2< i16 > i16vec2
    typedef detail::tvec3< i16 > i16vec3
    typedef detail::tvec4< i16 > i16vec4
    typedef detail::int32 i32
    typedef detail::tvec1< i32 > i32vec1
    typedef detail::tvec2< i32 > i32vec2
    typedef detail::tvec3< i32 > i32vec3
    typedef detail::tvec4< i32 > i32vec4
    typedef detail::int64 i64
    typedef detail::tvec1< i64 > i64vec1
    typedef detail::tvec2< i64 > i64vec2
    typedef detail::tvec3< i64 > i64vec3
    typedef detail::tvec4< i64 > i64vec4
    typedef detail::int8 i8
    typedef detail::tvec1< i8 > i8vec1
    typedef detail::tvec2< i8 > i8vec2
    typedef detail::tvec3< i8 > i8vec3
    typedef detail::tvec4< i8 > i8vec4
    typedef detail::int16 int16
    typedef detail::int16 int16_t
    typedef detail::int32 int32
    typedef detail::int32 int32_t
    typedef detail::int64 int64
    typedef detail::int64 int64_t
    typedef detail::int8 int8
    typedef detail::int8 int8_t
    typedef detail::uint16 u16
    typedef detail::tvec1< u16 > u16vec1
    typedef detail::tvec2< u16 > u16vec2
    typedef detail::tvec3< u16 > u16vec3
    typedef detail::tvec4< u16 > u16vec4
    typedef detail::uint32 u32
    typedef detail::tvec1< u32 > u32vec1
    typedef detail::tvec2< u32 > u32vec2
    typedef detail::tvec3< u32 > u32vec3
    typedef detail::tvec4< u32 > u32vec4
    typedef detail::uint64 u64
    typedef detail::tvec1< u64 > u64vec1
    typedef detail::tvec2< u64 > u64vec2
    typedef detail::tvec3< u64 > u64vec3
    typedef detail::tvec4< u64 > u64vec4
    typedef detail::uint8 u8
    typedef detail::tvec1< u8 > u8vec1
    typedef detail::tvec2< u8 > u8vec2
    typedef detail::tvec3< u8 > u8vec3
    typedef detail::tvec4< u8 > u8vec4
    typedef detail::uint16 uint16
    typedef detail::uint16 uint16_t
    typedef detail::uint32 uint32
    typedef detail::uint32 uint32_t
    typedef detail::uint64 uint64
    typedef detail::uint64 uint64_t
    typedef detail::uint8 uint8
    typedef detail::uint8 uint8_t

    +Functions

    template<typename T , template< typename > class vecType>
    perlin (vecType< T > const &p)
     
    template<typename T , template< typename > class vecType>
    perlin (vecType< T > const &p, vecType< T > const &rep)
     
    template<typename T , template< typename > class vecType>
    simplex (vecType< T > const &p)
     
    -

    Detailed Description

    -

    Defines specific C++-based precision types.

    -

    Precision types defines types based on GLSL's precision qualifiers. This extension defines types based on explicitly-sized C++ data types.

    -

    <glm/gtc/type_precision.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    Detailed Description

    +

    Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf <glm/gtc/noise.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + + + + +
    typedef float16 f16T glm::perlin (vecType< T > const & p)
    -
    -
    - -

    16 bit half-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 335 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f16> f16mat2
    -
    -
    - -

    Half-precision floating-point 1x1 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions Half-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 481 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f16> f16mat2x2
    -
    -
    - -

    Half-precision floating-point 1x1 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions Half-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 498 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f16> f16mat2x3
    -
    -
    - -

    Half-precision floating-point 2x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 502 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f16> f16mat2x4
    -
    -
    - -

    Half-precision floating-point 2x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 506 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f16> f16mat3
    -
    -
    - -

    Half-precision floating-point 3x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 485 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f16> f16mat3x2
    -
    -
    - -

    Half-precision floating-point 3x2 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 510 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f16> f16mat3x3
    -
    -
    - -

    Half-precision floating-point 3x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 514 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f16> f16mat3x4
    -
    -
    - -

    Half-precision floating-point 3x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 518 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f16> f16mat4
    -
    -
    - -

    Half-precision floating-point 4x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 489 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f16> f16mat4x2
    -
    -
    - -

    Half-precision floating-point 4x2 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 522 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f16> f16mat4x3
    -
    -
    - -

    Half-precision floating-point 4x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 526 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f16> f16mat4x4
    -
    -
    - -

    Half-precision floating-point 4x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 530 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f16> f16quat
    -
    -
    - -

    Half-precision floating-point quaternion.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 654 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f16> f16vec1
    -
    -
    - -

    Half-precision floating-point vector of 1 component.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 365 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f16> f16vec2
    -
    -
    - -

    Half-precision floating-point vector of 2 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 369 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f16> f16vec3
    -
    -
    - -

    Half-precision floating-point vector of 3 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 373 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f16> f16vec4
    -
    -
    - -

    Half-precision floating-point vector of 4 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 377 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float32 f32
    -
    -
    - -

    32 bit single-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 339 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32> f32mat2
    -
    -
    - -

    Single-precision floating-point 1x1 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions Single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 539 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32> f32mat2x2
    -
    -
    - -

    Single-precision floating-point 1x1 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions Single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 556 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f32> f32mat2x3
    -
    -
    - -

    Single-precision floating-point 2x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 560 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f32> f32mat2x4
    -
    -
    - -

    Single-precision floating-point 2x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 564 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32> f32mat3
    -
    -
    - -

    Single-precision floating-point 3x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 543 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f32> f32mat3x2
    -
    -
    - -

    Single-precision floating-point 3x2 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 568 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32> f32mat3x3
    -
    -
    - -

    Single-precision floating-point 3x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 572 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f32> f32mat3x4
    -
    -
    - -

    Single-precision floating-point 3x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 576 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32> f32mat4
    -
    -
    - -

    Single-precision floating-point 4x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 547 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f32> f32mat4x2
    -
    -
    - -

    Single-precision floating-point 4x2 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 580 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f32> f32mat4x3
    -
    -
    - -

    Single-precision floating-point 4x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 584 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32> f32mat4x4
    -
    -
    - -

    Single-precision floating-point 4x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 588 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f32> f32quat
    -
    -
    - -

    Single-precision floating-point quaternion.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 658 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f32> f32vec1
    -
    -
    - -

    Single-precision floating-point vector of 1 component.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 382 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f32> f32vec2
    -
    -
    - -

    Single-precision floating-point vector of 2 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 386 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f32> f32vec3
    -
    -
    - -

    Single-precision floating-point vector of 3 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 390 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f32> f32vec4
    -
    -
    - -

    Single-precision floating-point vector of 4 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 394 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float64 f64
    -
    -
    - -

    64 bit double-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 343 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f64> f64mat2
    -
    -
    - -

    Double-precision floating-point 1x1 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions Double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 597 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f64> f64mat2x2
    -
    -
    - -

    Double-precision floating-point 1x1 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions Double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 614 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f64> f64mat2x3
    -
    -
    - -

    Double-precision floating-point 2x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 618 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f64> f64mat2x4
    -
    -
    - -

    Double-precision floating-point 2x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 622 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f64> f64mat3
    -
    -
    - -

    Double-precision floating-point 3x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 601 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f64> f64mat3x2
    -
    -
    - -

    Double-precision floating-point 3x2 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 626 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f64> f64mat3x3
    -
    -
    - -

    Double-precision floating-point 3x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 630 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f64> f64mat3x4
    -
    -
    - -

    Double-precision floating-point 3x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 634 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f64> f64mat4
    -
    -
    - -

    Double-precision floating-point 4x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 605 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f64> f64mat4x2
    -
    -
    - -

    Double-precision floating-point 4x2 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 638 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f64> f64mat4x3
    -
    -
    - -

    Double-precision floating-point 4x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 642 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f64> f64mat4x4
    -
    -
    - -

    Double-precision floating-point 4x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 646 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f64> f64quat
    -
    -
    - -

    Double-precision floating-point quaternion.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 662 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f64> f64vec1
    -
    -
    - -

    Double-precision floating-point vector of 1 component.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 399 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f64> f64vec2
    -
    -
    - -

    Double-precision floating-point vector of 2 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 403 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f64> f64vec3
    -
    -
    - -

    Double-precision floating-point vector of 3 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 407 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f64> f64vec4
    -
    -
    - -

    Double-precision floating-point vector of 4 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 411 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float16 float16
    -
    -
    - -

    16 bit half-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 309 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float16 float16_t
    -
    -
    - -

    16 bit half-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 322 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 float32
    -
    -
    - -

    32 bit single-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 313 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 float32_t
    -
    -
    - -

    32 bit single-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 326 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 float64
    -
    -
    - -

    64 bit double-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 317 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 float64_t
    -
    -
    - -

    64 bit double-precision floating-point scalar.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 330 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32> fmat2
    -
    -
    - -

    Single-precision floating-point 1x1 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions Single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 423 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32> fmat2x2
    -
    -
    - -

    Single-precision floating-point 1x1 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions Single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 440 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f32> fmat2x3
    -
    -
    - -

    Single-precision floating-point 2x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 444 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f32> fmat2x4
    -
    -
    - -

    Single-precision floating-point 2x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 448 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32> fmat3
    -
    -
    - -

    Single-precision floating-point 3x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 427 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f32> fmat3x2
    -
    -
    - -

    Single-precision floating-point 3x2 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 452 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32> fmat3x3
    -
    -
    - -

    Single-precision floating-point 3x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 456 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f32> fmat3x4
    -
    -
    - -

    Single-precision floating-point 3x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 460 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32> fmat4
    -
    -
    - -

    Single-precision floating-point 4x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 431 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f32> fmat4x2
    -
    -
    - -

    Single-precision floating-point 4x2 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 464 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f32> fmat4x3
    -
    -
    - -

    Single-precision floating-point 4x3 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 468 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32> fmat4x4
    -
    -
    - -

    Single-precision floating-point 4x4 matrix.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 472 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<float> fvec1
    -
    -
    - -

    Single-precision floating-point vector of 1 component.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 348 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<float> fvec2
    -
    -
    - -

    Single-precision floating-point vector of 2 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 352 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<float> fvec3
    -
    -
    - -

    Single-precision floating-point vector of 3 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 356 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<float> fvec4
    -
    -
    - -

    Single-precision floating-point vector of 4 components.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 360 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 i16
    -
    -
    - -

    16 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 103 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i16> i16vec1
    -
    -
    - -

    16 bit signed integer scalar type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 133 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i16> i16vec2
    -
    -
    - -

    16 bit signed integer vector of 2 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 137 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i16> i16vec3
    -
    -
    - -

    16 bit signed integer vector of 3 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 141 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i16> i16vec4
    -
    -
    - -

    16 bit signed integer vector of 4 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 145 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 i32
    -
    -
    - -

    32 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 107 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i32> i32vec1
    -
    -
    - -

    32 bit signed integer scalar type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 150 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i32> i32vec2
    -
    -
    - -

    32 bit signed integer vector of 2 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 154 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i32> i32vec3
    -
    -
    - -

    32 bit signed integer vector of 3 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 158 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i32> i32vec4
    -
    -
    - -

    32 bit signed integer vector of 4 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 162 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 i64
    -
    -
    - -

    64 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 111 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i64> i64vec1
    -
    -
    - -

    64 bit signed integer scalar type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 167 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i64> i64vec2
    -
    -
    - -

    64 bit signed integer vector of 2 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 171 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i64> i64vec3
    -
    -
    - -

    64 bit signed integer vector of 3 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 175 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i64> i64vec4
    -
    -
    - -

    64 bit signed integer vector of 4 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 179 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 i8
    -
    -
    - -

    8 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 99 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i8> i8vec1
    -
    -
    - -

    8 bit signed integer scalar type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 116 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i8> i8vec2
    -
    -
    - -

    8 bit signed integer vector of 2 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 120 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i8> i8vec3
    -
    -
    - -

    8 bit signed integer vector of 3 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 124 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i8> i8vec4
    -
    -
    - -

    8 bit signed integer vector of 4 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 128 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 int16
    -
    -
    - -

    16 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 69 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 int16_t
    -
    -
    - -

    16 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 86 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 int32
    -
    -
    - -

    32 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 73 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 int32_t
    -
    -
    - -

    32 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 90 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 int64
    -
    -
    - -

    64 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 77 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 int64_t
    -
    -
    - -

    64 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 94 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 int8
    -
    -
    - -

    8 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 65 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 int8_t
    -
    -
    - -

    8 bit signed integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 82 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 u16
    -
    -
    - -

    16 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 225 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u16> u16vec1
    -
    -
    - -

    16 bit unsigned integer scalar type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 255 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u16> u16vec2
    -
    -
    - -

    16 bit unsigned integer vector of 2 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 259 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u16> u16vec3
    -
    -
    - -

    16 bit unsigned integer vector of 3 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 263 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u16> u16vec4
    -
    -
    +
    -

    16 bit unsigned integer vector of 4 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 267 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 u32
    -
    -
    - -

    32 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 229 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u32> u32vec1
    -
    -
    - -

    32 bit unsigned integer scalar type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 272 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u32> u32vec2
    -
    -
    - -

    32 bit unsigned integer vector of 2 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 276 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u32> u32vec3
    -
    -
    - -

    32 bit unsigned integer vector of 3 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 280 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u32> u32vec4
    -
    -
    - -

    32 bit unsigned integer vector of 4 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 284 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 u64
    -
    -
    - -

    64 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 233 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u64> u64vec1
    -
    -
    - -

    64 bit unsigned integer scalar type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 289 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u64> u64vec2
    -
    -
    - -

    64 bit unsigned integer vector of 2 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 293 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u64> u64vec3
    -
    -
    - -

    64 bit unsigned integer vector of 3 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 297 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u64> u64vec4
    -
    -
    - -

    64 bit unsigned integer vector of 4 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 301 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 u8
    -
    -
    - -

    8 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 221 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u8> u8vec1
    -
    -
    - -

    8 bit unsigned integer scalar type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 238 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u8> u8vec2
    -
    -
    - -

    8 bit unsigned integer vector of 2 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 242 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u8> u8vec3
    -
    -
    - -

    8 bit unsigned integer vector of 3 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 246 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u8> u8vec4
    -
    -
    - -

    8 bit unsigned integer vector of 4 components type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 250 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 uint16
    -
    -
    - -

    16 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 191 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 uint16_t
    -
    -
    - -

    16 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 208 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 uint32
    -
    -
    - -

    32 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 195 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 uint32_t
    -
    -
    - -

    32 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 212 of file type_precision.hpp.

    +

    Classic perlin noise.

    +
    See Also
    GLM_GTC_noise
    - +
    - + + + + -
    typedef detail::uint64 uint64T glm::perlin (vecType< T > const & p,
    -
    -
    - -

    64 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 199 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::uint64 uint64_tvecType< T > const & rep 
    -
    -
    - -

    64 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 216 of file type_precision.hpp.

    - -
    -
    - -
    -
    - - + + +
    typedef detail::uint8 uint8)
    -
    -
    +
    -

    8 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    - -

    Definition at line 187 of file type_precision.hpp.

    +

    Periodic perlin noise.

    +
    See Also
    GLM_GTC_noise
    - +
    - + + + + +
    typedef detail::uint8 uint8_tT glm::simplex (vecType< T > const & p)
    -
    -
    +
    -

    8 bit unsigned integer type.

    -
    See also:
    GLM_GTC_type_precision: Vector and matrix types with defined precisions
    +

    Simplex noise.

    +
    See Also
    GLM_GTC_noise
    -

    Definition at line 204 of file type_precision.hpp.

    - -
    - - + + - diff --git a/doc/api/a00153.html b/doc/api/a00153.html index 86c1c662..3032fcd5 100644 --- a/doc/api/a00153.html +++ b/doc/api/a00153.html @@ -2,454 +2,653 @@ - -GLM_GTC_type_ptr: Memory layout access + +GLM_GTC_quaternion + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTC_type_ptr: Memory layout access
    -
    +
    GLM_GTC_quaternion
    +
    GTC Extensions (Stable)
    - + + + + + + + + + + + + + + +

    +

    +Typedefs

    typedef detail::tquat< double > dquat
     
    typedef detail::tquat< float > fquat
     
    typedef detail::tquat
    +< highp_float > 
    highp_quat
     
    typedef detail::tquat
    +< detail::half > 
    hquat
     
    typedef detail::tquat< lowp_float > lowp_quat
     
    typedef detail::tquat
    +< mediump_float > 
    mediump_quat
     
    typedef detail::tquat< float > quat
     
    + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    detail::tmat2x2< T > make_mat2 (T const *const ptr)
    template<typename T >
    detail::tmat2x2< T > make_mat2x2 (T const *const ptr)
    template<typename T >
    detail::tmat2x3< T > make_mat2x3 (T const *const ptr)
    template<typename T >
    detail::tmat2x4< T > make_mat2x4 (T const *const ptr)
    template<typename T >
    detail::tmat3x3< T > make_mat3 (T const *const ptr)
    template<typename T >
    detail::tmat3x2< T > make_mat3x2 (T const *const ptr)
    template<typename T >
    detail::tmat3x3< T > make_mat3x3 (T const *const ptr)
    template<typename T >
    detail::tmat3x4< T > make_mat3x4 (T const *const ptr)
    template<typename T >
    detail::tmat4x4< T > make_mat4 (T const *const ptr)
    template<typename T >
    detail::tmat4x2< T > make_mat4x2 (T const *const ptr)
    template<typename T >
    detail::tmat4x3< T > make_mat4x3 (T const *const ptr)
    template<typename T >
    detail::tmat4x4< T > make_mat4x4 (T const *const ptr)
    template<typename T >
    detail::tquat< T > make_quat (T const *const ptr)
    template<typename T >
    detail::tvec2< T > make_vec2 (T const *const ptr)
    template<typename T >
    detail::tvec3< T > make_vec3 (T const *const ptr)
    template<typename T >
    detail::tvec4< T > make_vec4 (T const *const ptr)
    template<typename genType >
    genType::value_type const * value_ptr (genType const &vec)
    template<typename valType >
    valType angle (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
     
    template<typename valType >
    detail::tquat< valType > angleAxis (valType const &angle, detail::tvec3< valType > const &axis)
     
    template<typename valType >
    detail::tvec3< valType > axis (detail::tquat< valType > const &x)
     
    template<typename T >
    detail::tquat< T > conjugate (detail::tquat< T > const &q)
     
    template<typename T >
    dot (detail::tquat< T > const &q1, detail::tquat< T > const &q2)
     
    template<typename T >
    detail::tvec3< T > eulerAngles (detail::tquat< T > const &x)
     
    template<typename T >
    detail::tquat< T > inverse (detail::tquat< T > const &q)
     
    template<typename T >
    length (detail::tquat< T > const &q)
     
    template<typename T >
    detail::tmat3x3< T > mat3_cast (detail::tquat< T > const &x)
     
    template<typename T >
    detail::tmat4x4< T > mat4_cast (detail::tquat< T > const &x)
     
    template<typename T >
    detail::tquat< T > mix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
     
    template<typename T >
    detail::tquat< T > normalize (detail::tquat< T > const &q)
     
    template<typename T >
    detail::tquat< T > quat_cast (detail::tmat3x3< T > const &x)
     
    template<typename T >
    detail::tquat< T > quat_cast (detail::tmat4x4< T > const &x)
     
    template<typename T >
    detail::tquat< T > rotate (detail::tquat< T > const &q, typename detail::tquat< T >::value_type const &angle, detail::tvec3< T > const &axis)
     
    -

    Detailed Description

    -

    Handles the interaction between pointers and vector, matrix types.

    -

    This extension defines an overloaded function, glm::value_ptr, which takes any of the core template types. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order.

    -

    This is useful for uploading data to matrices or copying data to buffer objects.

    -

    Example:

    -
     #include <glm/glm.hpp>
    - #include <glm/gtc/type_ptr.hpp>
    - 
    - glm::vec3 aVector(3);
    - glm::mat4 someMatrix(1.0);
    - 
    - glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));
    - glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));
    -

    <glm/gtc/type_ptr.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Defines a templated quaternion type and several quaternion operations.

    +

    <glm/gtc/quaternion.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - - - - - +
    detail::tmat2x2<T> glm::make_mat2 (T const *const ptr)typedef detail::tquat<double> dquat
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Quaternion of double-precision floating-point numbers.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Definition at line 301 of file gtc/quaternion.hpp.

    - +
    - - - - - +
    detail::tmat2x2<T> glm::make_mat2x2 (T const *const ptr)typedef detail::tquat<float> fquat
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Quaternion of single-precision floating-point numbers.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Definition at line 296 of file gtc/quaternion.hpp.

    - +
    - - - - - +
    detail::tmat2x3<T> glm::make_mat2x3 (T const *const ptr)typedef detail::tquat<highp_float> highp_quat
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Quaternion of high precision floating-point numbers.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Definition at line 316 of file gtc/quaternion.hpp.

    - +
    - - - - - +
    detail::tmat2x4<T> glm::make_mat2x4 (T const *const ptr)typedef detail::tquat<detail::half> hquat
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Quaternion of half-precision floating-point numbers.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Definition at line 291 of file gtc/quaternion.hpp.

    - +
    - - - - - +
    detail::tmat3x3<T> glm::make_mat3 (T const *const ptr)typedef detail::tquat<lowp_float> lowp_quat
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Quaternion of low precision floating-point numbers.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Definition at line 306 of file gtc/quaternion.hpp.

    - +
    - - - - - +
    detail::tmat3x2<T> glm::make_mat3x2 (T const *const ptr)typedef detail::tquat<mediump_float> mediump_quat
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Quaternion of medium precision floating-point numbers.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Definition at line 311 of file gtc/quaternion.hpp.

    - +
    - - - - - +
    detail::tmat3x3<T> glm::make_mat3x3 (T const *const ptr)typedef detail::tquat<float> quat
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Quaternion of floating-point numbers.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Definition at line 286 of file gtc/quaternion.hpp.

    - +

    Function Documentation

    +
    - + - - + +
    detail::tmat3x4<T> glm::make_mat3x4 valType glm::angle (T const *const ptr)detail::tquat< valType > const & x)
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Returns the quaternion rotation angle.

    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::make_mat4 detail::tquat<valType> glm::angleAxis (T const *const ptr)valType const & angle,
    valType const & x,
    valType const & y,
    valType const & z 
    )
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Build a quaternion from an angle and a normalized axis.

    +
    Parameters
    + + + + + +
    angleAngle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    xx component of the x-axis, x, y, z must be a normalized axis
    yy component of the y-axis, x, y, z must be a normalized axis
    zz component of the z-axis, x, y, z must be a normalized axis
    +
    +
    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + + + + + + + + + + + +
    detail::tmat4x2<T> glm::make_mat4x2 detail::tquat<valType> glm::angleAxis (T const *const ptr)valType const & angle,
    detail::tvec3< valType > const & axis 
    )
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Build a quaternion from an angle and a normalized axis.

    +
    Parameters
    + + + +
    angleAngle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisAxis of the quaternion, must be normalized.
    +
    +
    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + +
    detail::tmat4x3<T> glm::make_mat4x3 detail::tvec3<valType> glm::axis (T const *const ptr)detail::tquat< valType > const & x)
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Returns the q rotation axis.

    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + +
    detail::tmat4x4<T> glm::make_mat4x4 detail::tquat<T> glm::conjugate (T const *const ptr)detail::tquat< T > const & q)
    -
    -
    +
    -

    Build a matrix from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Returns the q conjugate.

    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + + + + + + + + + + + +
    detail::tquat<T> glm::make_quat T glm::dot (T const *const ptr)detail::tquat< T > const & q1,
    detail::tquat< T > const & q2 
    )
    -
    -
    +
    -

    Build a quaternion from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...

    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + +
    detail::tvec2<T> glm::make_vec2 detail::tvec3<T> glm::eulerAngles (T const *const ptr)detail::tquat< T > const & x)
    -
    -
    +
    -

    Build a vector from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Returns euler angles, yitch as x, yaw as y, roll as z.

    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + +
    detail::tvec3<T> glm::make_vec3 detail::tquat<T> glm::inverse (T const *const ptr)detail::tquat< T > const & q)
    -
    -
    +
    -

    Build a vector from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Returns the q inverse.

    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + +
    detail::tvec4<T> glm::make_vec4 T glm::length (T const *const ptr)detail::tquat< T > const & q)
    -
    -
    +
    -

    Build a vector from a pointer.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Returns the length of the quaternion.

    +
    See Also
    GLM_GTC_quaternion
    - +
    - + - - + +
    genType::value_type const* glm::value_ptr detail::tmat3x3<T> glm::mat3_cast (genType const & vec)detail::tquat< T > const & x)
    -
    -
    +
    -

    Return the constant address to the data of the input parameter.

    -
    See also:
    GLM_GTC_type_ptr: Memory layout access
    +

    Converts a quaternion to a 3 * 3 matrix.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Referenced by glm::toMat3().

    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::mat4_cast (detail::tquat< T > const & x)
    +
    + +

    Converts a quaternion to a 4 * 4 matrix.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Referenced by glm::toMat4().

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tquat<T> glm::mix (detail::tquat< T > const & x,
    detail::tquat< T > const & y,
    T const & a 
    )
    +
    +

    Returns a SLERP interpolated quaternion of x and y according a.

    +
    See Also
    GLM_GTC_quaternion
    +
    +
    + +
    +
    + + + + + + + + +
    detail::tquat<T> glm::normalize (detail::tquat< T > const & q)
    +
    + +

    Returns the normalized quaternion.

    +
    See Also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tquat<T> glm::quat_cast (detail::tmat3x3< T > const & x)
    +
    + +

    Converts a 3 * 3 matrix to a quaternion.

    +
    See Also
    GLM_GTC_quaternion
    + +

    Referenced by glm::toQuat().

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tquat<T> glm::quat_cast (detail::tmat4x4< T > const & x)
    +
    + +

    Converts a 4 * 4 matrix to a quaternion.

    +
    See Also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tquat<T> glm::rotate (detail::tquat< T > const & q,
    typename detail::tquat< T >::value_type const & angle,
    detail::tvec3< T > const & axis 
    )
    +
    + +

    Rotates a quaternion from an vector of 3 components axis and an angle.

    +
    Parameters
    + + + + +
    qSource orientation
    angleAngle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisAxis of the rotation, must be normalized.
    +
    +
    +
    See Also
    GLM_GTC_quaternion
    + +
    +
    +
    + - diff --git a/doc/api/a00154.html b/doc/api/a00154.html index 8d70a632..8d9f8a24 100644 --- a/doc/api/a00154.html +++ b/doc/api/a00154.html @@ -2,100 +2,159 @@ - -GLM_GTX_associated_min_max: Associated Min/Max + +GLM_GTC_random + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_associated_min_max: Associated Min/Max
    -
    +
    GLM_GTC_random
    +
    GTC Extensions (Stable)
    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
    template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    ballRand (T const &Radius)
     
    template<typename T >
    detail::tvec2< T > circularRand (T const &Radius)
     
    template<typename T >
    detail::tvec2< T > diskRand (T const &Radius)
     
    template<typename genType >
    genType gaussRand (genType const &Mean, genType const &Deviation)
     
    template<typename genType >
    genType linearRand (genType const &Min, genType const &Max)
     
    template<typename T >
    detail::tvec3< T > sphericalRand (T const &Radius)
     
    -

    Detailed Description

    -

    Min and max functions that return associated values not the compared onces.

    -

    <glm/gtx/associated_min_max.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Generate random number from various distribution methods.

    +

    <glm/gtc/random.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + + + +
    genTypeU glm::associatedMax GLM_FUNC_QUALIFIER detail::tvec3<T> glm::ballRand (const genTypeT & x, T const & Radius)
    +
    + +

    Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.

    +
    Parameters
    + + +
    Radius
    +
    +
    +
    See Also
    GLM_GTC_random
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec2<T> glm::circularRand (T const & Radius)
    +
    + +

    Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.

    +
    Parameters
    + + +
    Radius
    +
    +
    +
    See Also
    GLM_GTC_random
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec2<T> glm::diskRand (T const & Radius)
    +
    + +

    Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.

    +
    Parameters
    + + +
    Radius
    +
    +
    +
    See Also
    GLM_GTC_random
    + +
    +
    + +
    +
    + + + + + + - - - - - - - - - - - - - - + + @@ -103,53 +162,35 @@ Functions
    genType glm::gaussRand (genType const & Mean,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b genType const & Deviation 
    -
    -
    +
    -

    Max comparison between 2 variables.

    -
    See also:
    GLM_GTX_associated_min_max: Associated Min/Max
    +

    Generate random numbers in the interval [Min, Max], according a gaussian distribution.

    +
    Parameters
    + + + +
    Mean
    Deviation
    +
    +
    +
    See Also
    GLM_GTC_random
    - +
    - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -157,250 +198,57 @@ Functions
    genTypeU glm::associatedMax genType glm::linearRand (const genTypeT & x, genType const & Min,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c genType const & Max 
    -
    -
    +
    -

    Max comparison between 3 variables.

    -
    See also:
    GLM_GTX_associated_min_max: Associated Min/Max
    +

    Generate random numbers in the interval [Min, Max], according a linear distribution.

    +
    Parameters
    + + + +
    Min
    Max
    +
    +
    +
    Template Parameters
    + + +
    genTypeValue type. Currently supported: half (not recommanded), float or double scalars and vectors.
    +
    +
    +
    See Also
    GLM_GTC_random
    - +
    - + - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMax detail::tvec3<T> glm::sphericalRand (const genTypeT & x,
    T const & Radius) const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c,
    const genTypeT & w,
    const genTypeU & d 
    )
    -
    -
    +
    -

    Max comparison between 4 variables.

    -
    See also:
    GLM_GTX_associated_min_max: Associated Min/Max
    +

    Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.

    +
    Parameters
    + + +
    Radius
    +
    +
    +
    See Also
    GLM_GTC_random
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b 
    )
    -
    -
    - -

    Min comparison between 2 variables.

    -
    See also:
    GLM_GTX_associated_min_max: Associated Min/Max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c 
    )
    -
    -
    - -

    Min comparison between 3 variables.

    -
    See also:
    GLM_GTX_associated_min_max: Associated Min/Max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c,
    const genTypeT & w,
    const genTypeU & d 
    )
    -
    -
    - -

    Min comparison between 4 variables.

    -
    See also:
    GLM_GTX_associated_min_max: Associated Min/Max
    - -
    -
    -
    - - + + - diff --git a/doc/api/a00155.html b/doc/api/a00155.html index 3a3ebcca..90f43023 100644 --- a/doc/api/a00155.html +++ b/doc/api/a00155.html @@ -2,446 +2,323 @@ - -GLM_GTX_bit: Extended bitwise operations + +GLM_GTC_reciprocal + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_bit: Extended bitwise operations
    -
    +
    GLM_GTC_reciprocal
    +
    GTC Extensions (Stable)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType bitRevert (genType const &value)
    template<typename genType >
    genType bitRotateLeft (genType const &In, std::size_t Shift)
    template<typename genType >
    genType bitRotateRight (genType const &In, std::size_t Shift)
    template<typename genIUType , typename sizeType >
    genIUType extractField (genIUType const &v, sizeType const &first, sizeType const &count)
    template<typename genIUType >
    genIUType fillBitfieldWithOne (genIUType const &Value, int const &FromBit, int const &ToBit)
    template<typename genIUType >
    genIUType fillBitfieldWithZero (genIUType const &Value, int const &FromBit, int const &ToBit)
    template<typename genType >
    int highestBit (genType const &value)
    template<typename genType >
    genType highestBitValue (genType const &value)
    template<typename genType >
    bool isPowerOfTwo (genType const &value)
    template<typename genType >
    int lowestBit (genType const &value)
    template<typename genIType >
    genIType mask (genIType const &count)
    template<typename genType >
    genType powerOfTwoAbove (genType const &value)
    template<typename genType >
    genType powerOfTwoBelow (genType const &value)
    template<typename genType >
    genType powerOfTwoNearest (genType const &value)
    template<typename genType >
    genType acot (genType const &x)
     
    template<typename genType >
    genType acoth (genType const &x)
     
    template<typename genType >
    genType acsc (genType const &x)
     
    template<typename genType >
    genType acsch (genType const &x)
     
    template<typename genType >
    genType asec (genType const &x)
     
    template<typename genType >
    genType asech (genType const &x)
     
    template<typename genType >
    genType cot (genType const &angle)
     
    template<typename genType >
    genType coth (genType const &angle)
     
    template<typename genType >
    genType csc (genType const &angle)
     
    template<typename genType >
    genType csch (genType const &angle)
     
    template<typename genType >
    genType sec (genType const &angle)
     
    template<typename genType >
    genType sech (genType const &angle)
     
    -

    Detailed Description

    -

    Allow to perform bit operations on integer values.

    -

    <glm/gtx/bit.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Define secant, cosecant and cotangent functions.

    +

    <glm/gtc/reciprocal.hpp> need to be included to use these features.

    +

    Function Documentation

    +
    - + - +
    genType glm::bitRevert genType glm::acot ( genType const & value)x)
    -
    -
    +
    -

    Revert all bits of any integer based type.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Inverse cotangent function.

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - + - - - - + - - - - - - -
    genType glm::bitRotateLeft genType glm::acoth ( genType const & In,
    x) std::size_t Shift 
    )
    -
    -
    +
    -

    Rotate all bits to the left.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Inverse cotangent hyperbolic function.

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - + - - - - + - - - - - - -
    genType glm::bitRotateRight genType glm::acsc ( genType const & In,
    x) std::size_t Shift 
    )
    -
    -
    +
    -

    Rotate all bits to the right.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Inverse cosecant function.

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - - - - - - - - - - - - - - - - - - - - - - -
    genIUType glm::extractField (genIUType const & v,
    sizeType const & first,
    sizeType const & count 
    )
    -
    -
    - -

    Component wise extraction of bit fields.

    -

    genType and genIType could be a scalar or a vector.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genIUType glm::fillBitfieldWithOne (genIUType const & Value,
    int const & FromBit,
    int const & ToBit 
    )
    -
    -
    - -

    Set to 1 a range of bits.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genIUType glm::fillBitfieldWithZero (genIUType const & Value,
    int const & FromBit,
    int const & ToBit 
    )
    -
    -
    - -

    Set to 0 a range of bits.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    - -
    -
    - -
    -
    - - - + - +
    int glm::highestBit genType glm::acsch ( genType const & value)x)
    -
    -
    +
    -

    Find the highest bit set to 1 in a integer variable.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Inverse cosecant hyperbolic function.

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - + - +
    genType glm::highestBitValue genType glm::asec ( genType const & value)x)
    -
    -
    +
    -

    Find the highest bit set to 1 in a integer variable and return its value.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Inverse secant function.

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - + - +
    bool glm::isPowerOfTwo genType glm::asech ( genType const & value)x)
    -
    -
    +
    -

    Return true if the value is a power of two number.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Inverse secant hyperbolic function.

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - + - +
    int glm::lowestBit genType glm::cot ( genType const & value)angle)
    -
    -
    +
    -

    Find the lowest bit set to 1 in a integer variable.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Cotangent function.

    +

    adjacent / opposite or 1 / tan(x)

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - - - - - - -
    genIType glm::mask (genIType const & count)
    -
    -
    - -

    Build a mask of 'count' bits.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    - -
    -
    - -
    -
    - - - + - +
    genType glm::powerOfTwoAbove genType glm::coth ( genType const & value)angle)
    -
    -
    +
    -

    Return the power of two number which value is just higher the input value.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Cotangent hyperbolic function.

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - + - +
    genType glm::powerOfTwoBelow genType glm::csc ( genType const & value)angle)
    -
    -
    +
    -

    Return the power of two number which value is just lower the input value.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Cosecant function.

    +

    hypotenuse / opposite or 1 / sin(x)

    +
    See Also
    GLM_GTC_reciprocal
    - +
    - + - +
    genType glm::powerOfTwoNearest genType glm::csch ( genType const & value)angle)
    -
    -
    +
    -

    Return the power of two number which value is the closet to the input value.

    -
    See also:
    GLM_GTX_bit: Extended bitwise operations
    +

    Cosecant hyperbolic function.

    +
    See Also
    GLM_GTC_reciprocal
    + +
    +
    + + + + + + + + +
    genType glm::sec (genType const & angle)
    +
    + +

    Secant function.

    +

    hypotenuse / adjacent or 1 / cos(x)

    +
    See Also
    GLM_GTC_reciprocal
    +
    +
    + +
    +
    + + + + + + + + +
    genType glm::sech (genType const & angle)
    +
    +

    Secant hyperbolic function.

    +
    See Also
    GLM_GTC_reciprocal
    +
    +
    +
    + - diff --git a/doc/api/a00156.html b/doc/api/a00156.html index 552c7d3b..1282b1fe 100644 --- a/doc/api/a00156.html +++ b/doc/api/a00156.html @@ -2,107 +2,49 @@ - -GLM_GTX_closest_point: Find closest point + +GLM_GTC_swizzle + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    -
    GLM_GTX_closest_point: Find closest point
    -
    +
    GLM_GTC_swizzle
    +
    GTC Extensions (Stable)
    - - - - -

    -Functions

    template<typename T >
    detail::tvec3< T > closestPointOnLine (detail::tvec3< T > const &point, detail::tvec3< T > const &a, detail::tvec3< T > const &b)
    -

    Detailed Description

    -

    Find the point on a straight line which is the closet of a point.

    -

    <glm/gtx/closest_point.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T> glm::closestPointOnLine (detail::tvec3< T > const & point,
    detail::tvec3< T > const & a,
    detail::tvec3< T > const & b 
    )
    -
    -
    - -

    Find the point on a straight line which is the closet of a point.

    -
    See also:
    GLM_GTX_closest_point: Find closest point
    - -
    -
    -
    - - +

    Detailed Description

    +

    Provide functions to emulate GLSL swizzle operator fonctionalities.

    +

    <glm/gtc/swizzle.hpp> need to be included to use these functionalities.

    + + - diff --git a/doc/api/a00157.html b/doc/api/a00157.html index 499eab96..f26b4fef 100644 --- a/doc/api/a00157.html +++ b/doc/api/a00157.html @@ -2,242 +2,2581 @@ - -GLM_GTX_color_cast: Color conversion + +GLM_GTC_type_precision + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Typedefs
    -
    GLM_GTX_color_cast: Color conversion
    -
    GTX Extensions (Experimental)
    +
    GLM_GTC_type_precision
    +
    GTC Extensions (Stable)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    -template<typename T >
    f16vec4 f16_abgr_cast (T c)
    -template<typename T >
    f16vec4 f16_argb_cast (T c)
    -template<typename T >
    f16vec4 f16_bgra_cast (T c)
    -template<typename T >
    f16vec3 f16_bgrx_cast (T c)
    -template<typename T >
    f16 f16_channel_cast (T a)
    -template<typename T >
    f16vec4 f16_rgba_cast (T c)
    -template<typename T >
    f16vec3 f16_rgbx_cast (T c)
    -template<typename T >
    f16vec3 f16_xbgr_cast (T c)
    -template<typename T >
    f16vec3 f16_xrgb_cast (T c)
    -template<typename T >
    f32vec4 f32_abgr_cast (T c)
    -template<typename T >
    f32vec4 f32_argb_cast (T c)
    -template<typename T >
    f32vec4 f32_bgra_cast (T c)
    -template<typename T >
    f32vec3 f32_bgrx_cast (T c)
    -template<typename T >
    f32 f32_channel_cast (T a)
    -template<typename T >
    f32vec4 f32_rgba_cast (T c)
    -template<typename T >
    f32vec3 f32_rgbx_cast (T c)
    -template<typename T >
    f32vec3 f32_xbgr_cast (T c)
    -template<typename T >
    f32vec3 f32_xrgb_cast (T c)
    -template<typename T >
    f64vec4 f64_abgr_cast (T c)
    -template<typename T >
    f64vec4 f64_argb_cast (T c)
    -template<typename T >
    f64vec4 f64_bgra_cast (T c)
    -template<typename T >
    f64vec3 f64_bgrx_cast (T c)
    -template<typename T >
    f64 f64_channel_cast (T a)
    -template<typename T >
    f64vec4 f64_rgba_cast (T c)
    -template<typename T >
    f64vec3 f64_rgbx_cast (T c)
    -template<typename T >
    f64vec3 f64_xbgr_cast (T c)
    -template<typename T >
    f64vec3 f64_xrgb_cast (T c)
    template<typename valType >
    uint16 u16channel_cast (valType a)
    -template<typename T >
    uint32 u32_abgr_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint32 u32_argb_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint32 u32_bgra_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint32 u32_bgrx_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint32 u32_rgba_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint32 u32_rgbx_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint32 u32_xbgr_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint32 u32_xrgb_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint64 u64_abgr_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint64 u64_argb_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint64 u64_bgra_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint64 u64_bgrx_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint64 u64_rgba_cast (const detail::tvec4< T > &c)
    -template<typename T >
    uint64 u64_rgbx_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint64 u64_xbgr_cast (const detail::tvec3< T > &c)
    -template<typename T >
    uint64 u64_xrgb_cast (const detail::tvec3< T > &c)
    template<typename valType >
    uint8 u8channel_cast (valType a)

    +Typedefs

    typedef float16 f16
     
    typedef detail::tmat2x2< f16 > f16mat2
     
    typedef detail::tmat2x2< f16 > f16mat2x2
     
    typedef detail::tmat2x3< f16 > f16mat2x3
     
    typedef detail::tmat2x4< f16 > f16mat2x4
     
    typedef detail::tmat3x3< f16 > f16mat3
     
    typedef detail::tmat3x2< f16 > f16mat3x2
     
    typedef detail::tmat3x3< f16 > f16mat3x3
     
    typedef detail::tmat3x4< f16 > f16mat3x4
     
    typedef detail::tmat4x4< f16 > f16mat4
     
    typedef detail::tmat4x2< f16 > f16mat4x2
     
    typedef detail::tmat4x3< f16 > f16mat4x3
     
    typedef detail::tmat4x4< f16 > f16mat4x4
     
    typedef detail::tquat< f16 > f16quat
     
    typedef detail::tvec1< f16 > f16vec1
     
    typedef detail::tvec2< f16 > f16vec2
     
    typedef detail::tvec3< f16 > f16vec3
     
    typedef detail::tvec4< f16 > f16vec4
     
    typedef float32 f32
     
    typedef detail::tmat2x2< f32 > f32mat2
     
    typedef detail::tmat2x2< f32 > f32mat2x2
     
    typedef detail::tmat2x3< f32 > f32mat2x3
     
    typedef detail::tmat2x4< f32 > f32mat2x4
     
    typedef detail::tmat3x3< f32 > f32mat3
     
    typedef detail::tmat3x2< f32 > f32mat3x2
     
    typedef detail::tmat3x3< f32 > f32mat3x3
     
    typedef detail::tmat3x4< f32 > f32mat3x4
     
    typedef detail::tmat4x4< f32 > f32mat4
     
    typedef detail::tmat4x2< f32 > f32mat4x2
     
    typedef detail::tmat4x3< f32 > f32mat4x3
     
    typedef detail::tmat4x4< f32 > f32mat4x4
     
    typedef detail::tquat< f32 > f32quat
     
    typedef detail::tvec1< f32 > f32vec1
     
    typedef detail::tvec2< f32 > f32vec2
     
    typedef detail::tvec3< f32 > f32vec3
     
    typedef detail::tvec4< f32 > f32vec4
     
    typedef float64 f64
     
    typedef detail::tmat2x2< f64 > f64mat2
     
    typedef detail::tmat2x2< f64 > f64mat2x2
     
    typedef detail::tmat2x3< f64 > f64mat2x3
     
    typedef detail::tmat2x4< f64 > f64mat2x4
     
    typedef detail::tmat3x3< f64 > f64mat3
     
    typedef detail::tmat3x2< f64 > f64mat3x2
     
    typedef detail::tmat3x3< f64 > f64mat3x3
     
    typedef detail::tmat3x4< f64 > f64mat3x4
     
    typedef detail::tmat4x4< f64 > f64mat4
     
    typedef detail::tmat4x2< f64 > f64mat4x2
     
    typedef detail::tmat4x3< f64 > f64mat4x3
     
    typedef detail::tmat4x4< f64 > f64mat4x4
     
    typedef detail::tquat< f64 > f64quat
     
    typedef detail::tvec1< f64 > f64vec1
     
    typedef detail::tvec2< f64 > f64vec2
     
    typedef detail::tvec3< f64 > f64vec3
     
    typedef detail::tvec4< f64 > f64vec4
     
    typedef detail::float16 float16
     
    typedef detail::float16 float16_t
     
    typedef detail::float32 float32
     
    typedef detail::float32 float32_t
     
    typedef detail::float64 float64
     
    typedef detail::float64 float64_t
     
    typedef detail::tmat2x2< f32 > fmat2
     
    typedef detail::tmat2x2< f32 > fmat2x2
     
    typedef detail::tmat2x3< f32 > fmat2x3
     
    typedef detail::tmat2x4< f32 > fmat2x4
     
    typedef detail::tmat3x3< f32 > fmat3
     
    typedef detail::tmat3x2< f32 > fmat3x2
     
    typedef detail::tmat3x3< f32 > fmat3x3
     
    typedef detail::tmat3x4< f32 > fmat3x4
     
    typedef detail::tmat4x4< f32 > fmat4
     
    typedef detail::tmat4x2< f32 > fmat4x2
     
    typedef detail::tmat4x3< f32 > fmat4x3
     
    typedef detail::tmat4x4< f32 > fmat4x4
     
    typedef detail::tvec1< float > fvec1
     
    typedef detail::tvec2< float > fvec2
     
    typedef detail::tvec3< float > fvec3
     
    typedef detail::tvec4< float > fvec4
     
    typedef detail::int16 i16
     
    typedef detail::tvec1< i16 > i16vec1
     
    typedef detail::tvec2< i16 > i16vec2
     
    typedef detail::tvec3< i16 > i16vec3
     
    typedef detail::tvec4< i16 > i16vec4
     
    typedef detail::int32 i32
     
    typedef detail::tvec1< i32 > i32vec1
     
    typedef detail::tvec2< i32 > i32vec2
     
    typedef detail::tvec3< i32 > i32vec3
     
    typedef detail::tvec4< i32 > i32vec4
     
    typedef detail::int64 i64
     
    typedef detail::tvec1< i64 > i64vec1
     
    typedef detail::tvec2< i64 > i64vec2
     
    typedef detail::tvec3< i64 > i64vec3
     
    typedef detail::tvec4< i64 > i64vec4
     
    typedef detail::int8 i8
     
    typedef detail::tvec1< i8 > i8vec1
     
    typedef detail::tvec2< i8 > i8vec2
     
    typedef detail::tvec3< i8 > i8vec3
     
    typedef detail::tvec4< i8 > i8vec4
     
    typedef detail::int16 int16
     
    typedef detail::int16 int16_t
     
    typedef detail::int32 int32
     
    typedef detail::int32 int32_t
     
    typedef detail::int64 int64
     
    typedef detail::int64 int64_t
     
    typedef detail::int8 int8
     
    typedef detail::int8 int8_t
     
    typedef detail::uint16 u16
     
    typedef detail::tvec1< u16 > u16vec1
     
    typedef detail::tvec2< u16 > u16vec2
     
    typedef detail::tvec3< u16 > u16vec3
     
    typedef detail::tvec4< u16 > u16vec4
     
    typedef detail::uint32 u32
     
    typedef detail::tvec1< u32 > u32vec1
     
    typedef detail::tvec2< u32 > u32vec2
     
    typedef detail::tvec3< u32 > u32vec3
     
    typedef detail::tvec4< u32 > u32vec4
     
    typedef detail::uint64 u64
     
    typedef detail::tvec1< u64 > u64vec1
     
    typedef detail::tvec2< u64 > u64vec2
     
    typedef detail::tvec3< u64 > u64vec3
     
    typedef detail::tvec4< u64 > u64vec4
     
    typedef detail::uint8 u8
     
    typedef detail::tvec1< u8 > u8vec1
     
    typedef detail::tvec2< u8 > u8vec2
     
    typedef detail::tvec3< u8 > u8vec3
     
    typedef detail::tvec4< u8 > u8vec4
     
    typedef detail::uint16 uint16
     
    typedef detail::uint16 uint16_t
     
    typedef detail::uint32 uint32
     
    typedef detail::uint32 uint32_t
     
    typedef detail::uint64 uint64
     
    typedef detail::uint64 uint64_t
     
    typedef detail::uint8 uint8
     
    typedef detail::uint8 uint8_t
     
    -

    Detailed Description

    -

    Conversion between two color types.

    -

    <glm/gtx/color_cast.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Defines specific C++-based precision types.

    +

    Precision types defines types based on GLSL's precision qualifiers. This extension defines types based on explicitly-sized C++ data types.

    +

    <glm/gtc/type_precision.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - - - - - +
    uint16 glm::u16channel_cast (valType a)typedef float16 f16
    -
    -
    +
    -

    Conversion of a floating value into a 16bit unsigned int value.

    -
    See also:
    GLM_GTX_color_cast: Color conversion
    +

    16 bit half-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 335 of file type_precision.hpp.

    - +
    - - - - - +
    uint8 glm::u8channel_cast (valType a)typedef detail::tmat2x2<f16> f16mat2
    -
    -
    +
    -

    Conversion of a floating value into a 8bit unsigned int value.

    -
    See also:
    GLM_GTX_color_cast: Color conversion
    +

    Half-precision floating-point 1x1 matrix.

    +
    See Also
    GLM_GTC_type_precision Half-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 481 of file type_precision.hpp.

    + +
    +
    + + + + +
    typedef detail::tmat2x2<f16> f16mat2x2
    +
    + +

    Half-precision floating-point 1x1 matrix.

    +
    See Also
    GLM_GTC_type_precision Half-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 498 of file type_precision.hpp.

    +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<f16> f16mat2x3
    +
    +

    Half-precision floating-point 2x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    +

    Definition at line 502 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<f16> f16mat2x4
    +
    + +

    Half-precision floating-point 2x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 506 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<f16> f16mat3
    +
    + +

    Half-precision floating-point 3x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 485 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<f16> f16mat3x2
    +
    + +

    Half-precision floating-point 3x2 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 510 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<f16> f16mat3x3
    +
    + +

    Half-precision floating-point 3x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 514 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<f16> f16mat3x4
    +
    + +

    Half-precision floating-point 3x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 518 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<f16> f16mat4
    +
    + +

    Half-precision floating-point 4x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 489 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<f16> f16mat4x2
    +
    + +

    Half-precision floating-point 4x2 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 522 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<f16> f16mat4x3
    +
    + +

    Half-precision floating-point 4x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 526 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<f16> f16mat4x4
    +
    + +

    Half-precision floating-point 4x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 530 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tquat<f16> f16quat
    +
    + +

    Half-precision floating-point quaternion.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 654 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<f16> f16vec1
    +
    + +

    Half-precision floating-point vector of 1 component.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 365 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<f16> f16vec2
    +
    + +

    Half-precision floating-point vector of 2 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 369 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<f16> f16vec3
    +
    + +

    Half-precision floating-point vector of 3 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 373 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<f16> f16vec4
    +
    + +

    Half-precision floating-point vector of 4 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 377 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float32 f32
    +
    + +

    32 bit single-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 339 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<f32> f32mat2
    +
    + +

    Single-precision floating-point 1x1 matrix.

    +
    See Also
    GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 539 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<f32> f32mat2x2
    +
    + +

    Single-precision floating-point 1x1 matrix.

    +
    See Also
    GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 556 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<f32> f32mat2x3
    +
    + +

    Single-precision floating-point 2x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 560 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<f32> f32mat2x4
    +
    + +

    Single-precision floating-point 2x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 564 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<f32> f32mat3
    +
    + +

    Single-precision floating-point 3x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 543 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<f32> f32mat3x2
    +
    + +

    Single-precision floating-point 3x2 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 568 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<f32> f32mat3x3
    +
    + +

    Single-precision floating-point 3x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 572 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<f32> f32mat3x4
    +
    + +

    Single-precision floating-point 3x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 576 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<f32> f32mat4
    +
    + +

    Single-precision floating-point 4x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 547 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<f32> f32mat4x2
    +
    + +

    Single-precision floating-point 4x2 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 580 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<f32> f32mat4x3
    +
    + +

    Single-precision floating-point 4x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 584 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<f32> f32mat4x4
    +
    + +

    Single-precision floating-point 4x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 588 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tquat<f32> f32quat
    +
    + +

    Single-precision floating-point quaternion.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 658 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<f32> f32vec1
    +
    + +

    Single-precision floating-point vector of 1 component.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 382 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<f32> f32vec2
    +
    + +

    Single-precision floating-point vector of 2 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 386 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<f32> f32vec3
    +
    + +

    Single-precision floating-point vector of 3 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 390 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<f32> f32vec4
    +
    + +

    Single-precision floating-point vector of 4 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 394 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float64 f64
    +
    + +

    64 bit double-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 343 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<f64> f64mat2
    +
    + +

    Double-precision floating-point 1x1 matrix.

    +
    See Also
    GLM_GTC_type_precision Double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 597 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<f64> f64mat2x2
    +
    + +

    Double-precision floating-point 1x1 matrix.

    +
    See Also
    GLM_GTC_type_precision Double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 614 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<f64> f64mat2x3
    +
    + +

    Double-precision floating-point 2x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 618 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<f64> f64mat2x4
    +
    + +

    Double-precision floating-point 2x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 622 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<f64> f64mat3
    +
    + +

    Double-precision floating-point 3x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 601 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<f64> f64mat3x2
    +
    + +

    Double-precision floating-point 3x2 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 626 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<f64> f64mat3x3
    +
    + +

    Double-precision floating-point 3x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 630 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<f64> f64mat3x4
    +
    + +

    Double-precision floating-point 3x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 634 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<f64> f64mat4
    +
    + +

    Double-precision floating-point 4x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 605 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<f64> f64mat4x2
    +
    + +

    Double-precision floating-point 4x2 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 638 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<f64> f64mat4x3
    +
    + +

    Double-precision floating-point 4x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 642 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<f64> f64mat4x4
    +
    + +

    Double-precision floating-point 4x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 646 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tquat<f64> f64quat
    +
    + +

    Double-precision floating-point quaternion.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 662 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<f64> f64vec1
    +
    + +

    Double-precision floating-point vector of 1 component.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 399 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<f64> f64vec2
    +
    + +

    Double-precision floating-point vector of 2 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 403 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<f64> f64vec3
    +
    + +

    Double-precision floating-point vector of 3 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 407 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<f64> f64vec4
    +
    + +

    Double-precision floating-point vector of 4 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 411 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float16 float16
    +
    + +

    16 bit half-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 309 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float16 float16_t
    +
    + +

    16 bit half-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 322 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 float32
    +
    + +

    32 bit single-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 313 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 float32_t
    +
    + +

    32 bit single-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 326 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 float64
    +
    + +

    64 bit double-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 317 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 float64_t
    +
    + +

    64 bit double-precision floating-point scalar.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 330 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<f32> fmat2
    +
    + +

    Single-precision floating-point 1x1 matrix.

    +
    See Also
    GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 423 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x2<f32> fmat2x2
    +
    + +

    Single-precision floating-point 1x1 matrix.

    +
    See Also
    GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 440 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x3<f32> fmat2x3
    +
    + +

    Single-precision floating-point 2x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 444 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat2x4<f32> fmat2x4
    +
    + +

    Single-precision floating-point 2x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 448 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<f32> fmat3
    +
    + +

    Single-precision floating-point 3x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 427 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x2<f32> fmat3x2
    +
    + +

    Single-precision floating-point 3x2 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 452 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x3<f32> fmat3x3
    +
    + +

    Single-precision floating-point 3x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 456 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat3x4<f32> fmat3x4
    +
    + +

    Single-precision floating-point 3x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 460 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<f32> fmat4
    +
    + +

    Single-precision floating-point 4x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 431 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x2<f32> fmat4x2
    +
    + +

    Single-precision floating-point 4x2 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 464 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x3<f32> fmat4x3
    +
    + +

    Single-precision floating-point 4x3 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 468 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tmat4x4<f32> fmat4x4
    +
    + +

    Single-precision floating-point 4x4 matrix.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 472 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<float> fvec1
    +
    + +

    Single-precision floating-point vector of 1 component.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 348 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<float> fvec2
    +
    + +

    Single-precision floating-point vector of 2 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 352 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<float> fvec3
    +
    + +

    Single-precision floating-point vector of 3 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 356 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<float> fvec4
    +
    + +

    Single-precision floating-point vector of 4 components.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 360 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 i16
    +
    + +

    16 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 103 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<i16> i16vec1
    +
    + +

    16 bit signed integer scalar type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 133 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<i16> i16vec2
    +
    + +

    16 bit signed integer vector of 2 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 137 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<i16> i16vec3
    +
    + +

    16 bit signed integer vector of 3 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 141 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<i16> i16vec4
    +
    + +

    16 bit signed integer vector of 4 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 145 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 i32
    +
    + +

    32 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 107 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<i32> i32vec1
    +
    + +

    32 bit signed integer scalar type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 150 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<i32> i32vec2
    +
    + +

    32 bit signed integer vector of 2 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 154 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<i32> i32vec3
    +
    + +

    32 bit signed integer vector of 3 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 158 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<i32> i32vec4
    +
    + +

    32 bit signed integer vector of 4 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 162 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 i64
    +
    + +

    64 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 111 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<i64> i64vec1
    +
    + +

    64 bit signed integer scalar type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 167 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<i64> i64vec2
    +
    + +

    64 bit signed integer vector of 2 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 171 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<i64> i64vec3
    +
    + +

    64 bit signed integer vector of 3 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 175 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<i64> i64vec4
    +
    + +

    64 bit signed integer vector of 4 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 179 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 i8
    +
    + +

    8 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 99 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<i8> i8vec1
    +
    + +

    8 bit signed integer scalar type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 116 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<i8> i8vec2
    +
    + +

    8 bit signed integer vector of 2 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 120 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<i8> i8vec3
    +
    + +

    8 bit signed integer vector of 3 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 124 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<i8> i8vec4
    +
    + +

    8 bit signed integer vector of 4 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 128 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 int16
    +
    + +

    16 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 69 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 int16_t
    +
    + +

    16 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 86 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 int32
    +
    + +

    32 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 73 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 int32_t
    +
    + +

    32 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 90 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 int64
    +
    + +

    64 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 77 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 int64_t
    +
    + +

    64 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 94 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 int8
    +
    + +

    8 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 65 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 int8_t
    +
    + +

    8 bit signed integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 82 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 u16
    +
    + +

    16 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 225 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<u16> u16vec1
    +
    + +

    16 bit unsigned integer scalar type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 255 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<u16> u16vec2
    +
    + +

    16 bit unsigned integer vector of 2 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 259 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<u16> u16vec3
    +
    + +

    16 bit unsigned integer vector of 3 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 263 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<u16> u16vec4
    +
    + +

    16 bit unsigned integer vector of 4 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 267 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 u32
    +
    + +

    32 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 229 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<u32> u32vec1
    +
    + +

    32 bit unsigned integer scalar type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 272 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<u32> u32vec2
    +
    + +

    32 bit unsigned integer vector of 2 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 276 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<u32> u32vec3
    +
    + +

    32 bit unsigned integer vector of 3 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 280 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<u32> u32vec4
    +
    + +

    32 bit unsigned integer vector of 4 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 284 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 u64
    +
    + +

    64 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 233 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<u64> u64vec1
    +
    + +

    64 bit unsigned integer scalar type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 289 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<u64> u64vec2
    +
    + +

    64 bit unsigned integer vector of 2 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 293 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<u64> u64vec3
    +
    + +

    64 bit unsigned integer vector of 3 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 297 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<u64> u64vec4
    +
    + +

    64 bit unsigned integer vector of 4 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 301 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 u8
    +
    + +

    8 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 221 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec1<u8> u8vec1
    +
    + +

    8 bit unsigned integer scalar type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 238 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec2<u8> u8vec2
    +
    + +

    8 bit unsigned integer vector of 2 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 242 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<u8> u8vec3
    +
    + +

    8 bit unsigned integer vector of 3 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 246 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<u8> u8vec4
    +
    + +

    8 bit unsigned integer vector of 4 components type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 250 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 uint16
    +
    + +

    16 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 191 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 uint16_t
    +
    + +

    16 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 208 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 uint32
    +
    + +

    32 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 195 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 uint32_t
    +
    + +

    32 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 212 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 uint64
    +
    + +

    64 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 199 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 uint64_t
    +
    + +

    64 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 216 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 uint8
    +
    + +

    8 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 187 of file type_precision.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 uint8_t
    +
    + +

    8 bit unsigned integer type.

    +
    See Also
    GLM_GTC_type_precision
    + +

    Definition at line 204 of file type_precision.hpp.

    + +
    +
    +
    + - diff --git a/doc/api/a00158.html b/doc/api/a00158.html index 8272c1cf..b9cf5a0b 100644 --- a/doc/api/a00158.html +++ b/doc/api/a00158.html @@ -2,221 +2,441 @@ - -GLM_GTX_color_space: RGB to HSV conversion + +GLM_GTC_type_ptr + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_color_space: RGB to HSV conversion
    -
    +
    GLM_GTC_type_ptr
    +
    GTC Extensions (Stable)
    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tvec3< valType > hsvColor (detail::tvec3< valType > const &rgbValue)
    template<typename valType >
    valType luminosity (detail::tvec3< valType > const &color)
    template<typename valType >
    detail::tvec3< valType > rgbColor (detail::tvec3< valType > const &hsvValue)
    template<typename valType >
    detail::tmat4x4< valType > saturation (valType const s)
    template<typename valType >
    detail::tvec3< valType > saturation (valType const s, detail::tvec3< valType > const &color)
    template<typename valType >
    detail::tvec4< valType > saturation (valType const s, detail::tvec4< valType > const &color)
    template<typename T >
    detail::tmat2x2< T > make_mat2 (T const *const ptr)
     
    template<typename T >
    detail::tmat2x2< T > make_mat2x2 (T const *const ptr)
     
    template<typename T >
    detail::tmat2x3< T > make_mat2x3 (T const *const ptr)
     
    template<typename T >
    detail::tmat2x4< T > make_mat2x4 (T const *const ptr)
     
    template<typename T >
    detail::tmat3x3< T > make_mat3 (T const *const ptr)
     
    template<typename T >
    detail::tmat3x2< T > make_mat3x2 (T const *const ptr)
     
    template<typename T >
    detail::tmat3x3< T > make_mat3x3 (T const *const ptr)
     
    template<typename T >
    detail::tmat3x4< T > make_mat3x4 (T const *const ptr)
     
    template<typename T >
    detail::tmat4x4< T > make_mat4 (T const *const ptr)
     
    template<typename T >
    detail::tmat4x2< T > make_mat4x2 (T const *const ptr)
     
    template<typename T >
    detail::tmat4x3< T > make_mat4x3 (T const *const ptr)
     
    template<typename T >
    detail::tmat4x4< T > make_mat4x4 (T const *const ptr)
     
    template<typename T >
    detail::tquat< T > make_quat (T const *const ptr)
     
    template<typename T >
    detail::tvec2< T > make_vec2 (T const *const ptr)
     
    template<typename T >
    detail::tvec3< T > make_vec3 (T const *const ptr)
     
    template<typename T >
    detail::tvec4< T > make_vec4 (T const *const ptr)
     
    template<typename genType >
    genType::value_type const * value_ptr (genType const &vec)
     
    -

    Detailed Description

    -

    Related to RGB to HSV conversions and operations.

    -

    <glm/gtx/color_space.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Handles the interaction between pointers and vector, matrix types.

    +

    This extension defines an overloaded function, glm::value_ptr, which takes any of the core template types. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order.

    +

    This is useful for uploading data to matrices or copying data to buffer objects.

    +

    Example:

    +
    #include <glm/glm.hpp>
    + +
    +
    glm::vec3 aVector(3);
    +
    glm::mat4 someMatrix(1.0);
    +
    +
    glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));
    +
    glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));
    +

    <glm/gtc/type_ptr.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + +
    detail::tvec3<valType> glm::hsvColor detail::tmat2x2<T> glm::make_mat2 (detail::tvec3< valType > const & rgbValue)T const *const ptr)
    -
    -
    +
    -

    Converts a color from RGB color space to its color in HSV color space.

    -
    See also:
    GLM_GTX_color_space: RGB to HSV conversion
    +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    - +
    - + - - + +
    valType glm::luminosity detail::tmat2x2<T> glm::make_mat2x2 (detail::tvec3< valType > const & color)T const *const ptr)
    -
    -
    +
    -

    Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.

    -
    See also:
    GLM_GTX_color_space: RGB to HSV conversion
    +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    - +
    - + - - + +
    detail::tvec3<valType> glm::rgbColor detail::tmat2x3<T> glm::make_mat2x3 (detail::tvec3< valType > const & hsvValue)T const *const ptr)
    -
    -
    +
    -

    Converts a color from HSV color space to its color in RGB color space.

    -
    See also:
    GLM_GTX_color_space: RGB to HSV conversion
    +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    - +
    - + - - + +
    detail::tmat4x4<valType> glm::saturation detail::tmat2x4<T> glm::make_mat2x4 (valType const s)T const *const ptr)
    -
    -
    +
    -

    Build a saturation matrix.

    -
    See also:
    GLM_GTX_color_space: RGB to HSV conversion
    +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    - +
    - + - - - - - + + - - - - - - -
    detail::tvec3<valType> glm::saturation detail::tmat3x3<T> glm::make_mat3 (valType const s,
    T const *const ptr) detail::tvec3< valType > const & color 
    )
    -
    -
    +
    -

    Modify the saturation of a color.

    -
    See also:
    GLM_GTX_color_space: RGB to HSV conversion
    +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    - +
    - + - - - - - + + - - - - - - -
    detail::tvec4<valType> glm::saturation detail::tmat3x2<T> glm::make_mat3x2 (valType const s,
    T const *const ptr) detail::tvec4< valType > const & color 
    )
    -
    -
    +
    -

    Modify the saturation of a color.

    -
    See also:
    GLM_GTX_color_space: RGB to HSV conversion
    +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + + + + + + + + +
    detail::tmat3x3<T> glm::make_mat3x3 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat3x4<T> glm::make_mat3x4 (T const *const ptr)
    +
    +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::make_mat4 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x2<T> glm::make_mat4x2 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x3<T> glm::make_mat4x3 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::make_mat4x4 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tquat<T> glm::make_quat (T const *const ptr)
    +
    + +

    Build a quaternion from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec2<T> glm::make_vec2 (T const *const ptr)
    +
    + +

    Build a vector from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec3<T> glm::make_vec3 (T const *const ptr)
    +
    + +

    Build a vector from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec4<T> glm::make_vec4 (T const *const ptr)
    +
    + +

    Build a vector from a pointer.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    genType::value_type const* glm::value_ptr (genType const & vec)
    +
    + +

    Return the constant address to the data of the input parameter.

    +
    See Also
    GLM_GTC_type_ptr
    + +
    +
    +
    + - diff --git a/doc/api/a00159.html b/doc/api/a00159.html index 77f61564..3386cde0 100644 --- a/doc/api/a00159.html +++ b/doc/api/a00159.html @@ -2,161 +2,228 @@ - -GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion + +GLM_GTC_ulp + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion
    -
    +
    GLM_GTC_ulp
    +
    GTC Extensions (Stable)
    - - - - - - - - - + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tvec3< valType > rgb2YCoCg (detail::tvec3< valType > const &rgbColor)
    template<typename valType >
    detail::tvec3< valType > rgb2YCoCgR (detail::tvec3< valType > const &rgbColor)
    template<typename valType >
    detail::tvec3< valType > YCoCg2rgb (detail::tvec3< valType > const &YCoCgColor)
    template<typename valType >
    detail::tvec3< valType > YCoCgR2rgb (detail::tvec3< valType > const &YCoCgColor)
    template<typename T >
    uint float_distance (T const &x, T const &y)
     
    template<typename T , template< typename > class vecType>
    vecType< uint > float_distance (vecType< T > const &x, vecType< T > const &y)
     
    template<typename genType >
    genType next_float (genType const &x)
     
    template<typename genType >
    genType next_float (genType const &x, uint const &Distance)
     
    template<typename genType >
    genType prev_float (genType const &x)
     
    template<typename genType >
    genType prev_float (genType const &x, uint const &Distance)
     
    -

    Detailed Description

    -

    RGB to YCoCg conversions and operations.

    -

    <glm/gtx/color_space_YCoCg.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Allow the measurement of the accuracy of a function against a reference implementation.

    +

    This extension works on floating-point data and provide results in ULP. <glm/gtc/ulp.hpp> need to be included to use these features.

    +

    Function Documentation

    +
    - + - - + + + + + + + + + + + +
    detail::tvec3<valType> glm::rgb2YCoCg uint glm::float_distance (detail::tvec3< valType > const & rgbColor)T const & x,
    T const & y 
    )
    -
    -
    +
    -

    Convert a color from RGB color space to YCoCg color space.

    -
    See also:
    GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion
    +

    Return the distance in the number of ULP between 2 scalars.

    +
    See Also
    GLM_GTC_ulp
    - +
    - + - - + + + + + + + + + + + +
    detail::tvec3<valType> glm::rgb2YCoCgR vecType<uint> glm::float_distance (detail::tvec3< valType > const & rgbColor)vecType< T > const & x,
    vecType< T > const & y 
    )
    -
    -
    +
    -

    Convert a color from RGB color space to YCoCgR color space.

    -
    See also:
    "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
    -
    -GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion
    +

    Return the distance in the number of ULP between 2 vectors.

    +
    See Also
    GLM_GTC_ulp
    - +
    - + - - + +
    detail::tvec3<valType> glm::YCoCg2rgb genType glm::next_float (detail::tvec3< valType > const & YCoCgColor)genType const & x)
    -
    -
    +
    -

    Convert a color from YCoCg color space to RGB color space.

    -
    See also:
    GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion
    +

    Return the next ULP value(s) after the input value(s).

    +
    See Also
    GLM_GTC_ulp
    - +
    - + - - + + + + + + + + + + + + + + +
    detail::tvec3<valType> glm::YCoCgR2rgb genType glm::next_float (detail::tvec3< valType > const & YCoCgColor)genType const & x,
    uint const & Distance 
    )
    +
    + +

    Return the value(s) ULP distance after the input value(s).

    +
    See Also
    GLM_GTC_ulp
    + +
    +
    + +
    +
    + + + + + +
    genType glm::prev_float (genType const & x)
    -
    -
    +
    -

    Convert a color from YCoCgR color space to RGB color space.

    -
    See also:
    "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
    -
    -GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion
    +

    Return the previous ULP value(s) before the input value(s).

    +
    See Also
    GLM_GTC_ulp
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType glm::prev_float (genType const & x,
    uint const & Distance 
    )
    +
    + +

    Return the value(s) ULP distance before the input value(s).

    +
    See Also
    GLM_GTC_ulp
    +
    - - +
    +
    + - diff --git a/doc/api/a00160.html b/doc/api/a00160.html index fbe5360c..8f2ad262 100644 --- a/doc/api/a00160.html +++ b/doc/api/a00160.html @@ -2,310 +2,392 @@ - -GLM_GTX_compatibility: Cg and HLSL compatibility + +GLM_GTX_associated_min_max + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_compatibility: Cg and HLSL compatibility
    -
    +
    GLM_GTX_associated_min_max
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    -Typedefs

    -typedef bool bool1
    -typedef bool bool1x1
    -typedef detail::tvec2< bool > bool2
    -typedef detail::tmat2x2< bool > bool2x2
    -typedef detail::tmat2x3< bool > bool2x3
    -typedef detail::tmat2x4< bool > bool2x4
    -typedef detail::tvec3< bool > bool3
    -typedef detail::tmat3x2< bool > bool3x2
    -typedef detail::tmat3x3< bool > bool3x3
    -typedef detail::tmat3x4< bool > bool3x4
    -typedef detail::tvec4< bool > bool4
    -typedef detail::tmat4x2< bool > bool4x2
    -typedef detail::tmat4x3< bool > bool4x3
    -typedef detail::tmat4x4< bool > bool4x4
    -typedef double double1
    -typedef double double1x1
    -typedef detail::tvec2< double > double2
    -typedef detail::tmat2x2< double > double2x2
    -typedef detail::tmat2x3< double > double2x3
    -typedef detail::tmat2x4< double > double2x4
    -typedef detail::tvec3< double > double3
    -typedef detail::tmat3x2< double > double3x2
    -typedef detail::tmat3x3< double > double3x3
    -typedef detail::tmat3x4< double > double3x4
    -typedef detail::tvec4< double > double4
    -typedef detail::tmat4x2< double > double4x2
    -typedef detail::tmat4x3< double > double4x3
    -typedef detail::tmat4x4< double > double4x4
    -typedef float float1
    -typedef float float1x1
    -typedef detail::tvec2< float > float2
    -typedef detail::tmat2x2< float > float2x2
    -typedef detail::tmat2x3< float > float2x3
    -typedef detail::tmat2x4< float > float2x4
    -typedef detail::tvec3< float > float3
    -typedef detail::tmat3x2< float > float3x2
    -typedef detail::tmat3x3< float > float3x3
    -typedef detail::tmat3x4< float > float3x4
    -typedef detail::tvec4< float > float4
    -typedef detail::tmat4x2< float > float4x2
    -typedef detail::tmat4x3< float > float4x3
    -typedef detail::tmat4x4< float > float4x4
    -typedef detail::half half1
    -typedef detail::half half1x1
    -typedef detail::tvec2
    -< detail::half > 
    half2
    -typedef detail::tmat2x2
    -< detail::half > 
    half2x2
    -typedef detail::tmat2x3
    -< detail::half > 
    half2x3
    -typedef detail::tmat2x4
    -< detail::half > 
    half2x4
    -typedef detail::tvec3
    -< detail::half > 
    half3
    -typedef detail::tmat3x2
    -< detail::half > 
    half3x2
    -typedef detail::tmat3x3
    -< detail::half > 
    half3x3
    -typedef detail::tmat3x4
    -< detail::half > 
    half3x4
    -typedef detail::tvec4
    -< detail::half > 
    half4
    -typedef detail::tmat4x2
    -< detail::half > 
    half4x2
    -typedef detail::tmat4x3
    -< detail::half > 
    half4x3
    -typedef detail::tmat4x4
    -< detail::half > 
    half4x4
    -typedef int int1
    -typedef int int1x1
    -typedef detail::tvec2< int > int2
    -typedef detail::tmat2x2< int > int2x2
    -typedef detail::tmat2x3< int > int2x3
    -typedef detail::tmat2x4< int > int2x4
    -typedef detail::tvec3< int > int3
    -typedef detail::tmat3x2< int > int3x2
    -typedef detail::tmat3x3< int > int3x3
    -typedef detail::tmat3x4< int > int3x4
    -typedef detail::tvec4< int > int4
    -typedef detail::tmat4x2< int > int4x2
    -typedef detail::tmat4x3< int > int4x3
    -typedef detail::tmat4x4< int > int4x4

    +

    Functions

    -template<typename T >
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T > 
    atan2 (const detail::tvec2< T > &x, const detail::tvec2< T > &y)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    atan2 (const detail::tvec3< T > &x, const detail::tvec3< T > &y)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T > 
    atan2 (const detail::tvec4< T > &x, const detail::tvec4< T > &y)
    -template<typename genType >
    bool isfinite (genType const &x)
    -template<typename valType >
    detail::tvec2< bool > isfinite (const detail::tvec2< valType > &x)
    -template<typename valType >
    detail::tvec3< bool > isfinite (const detail::tvec3< valType > &x)
    -template<typename valType >
    detail::tvec4< bool > isfinite (const detail::tvec4< valType > &x)
    -template<typename genType >
    detail::tvec2< bool > isinf (const detail::tvec2< genType > &x)
    -template<typename genType >
    detail::tvec3< bool > isinf (const detail::tvec3< genType > &x)
    -template<typename genType >
    detail::tvec4< bool > isinf (const detail::tvec4< genType > &x)
    -template<typename genType >
    detail::tvec2< bool > isnan (const detail::tvec2< genType > &x)
    -template<typename genType >
    detail::tvec3< bool > isnan (const detail::tvec3< genType > &x)
    -template<typename genType >
    detail::tvec4< bool > isnan (const detail::tvec4< genType > &x)
    -template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T > 
    lerp (const detail::tvec2< T > &x, const detail::tvec2< T > &y, T a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    lerp (const detail::tvec3< T > &x, const detail::tvec3< T > &y, T a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T > 
    lerp (const detail::tvec4< T > &x, const detail::tvec4< T > &y, T a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T > 
    lerp (const detail::tvec2< T > &x, const detail::tvec2< T > &y, const detail::tvec2< T > &a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    lerp (const detail::tvec3< T > &x, const detail::tvec3< T > &y, const detail::tvec3< T > &a)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T > 
    lerp (const detail::tvec4< T > &x, const detail::tvec4< T > &y, const detail::tvec4< T > &a)
    -template<typename T >
    GLM_FUNC_QUALIFIER T saturate (T x)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T > 
    saturate (const detail::tvec2< T > &x)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T > 
    saturate (const detail::tvec3< T > &x)
    -template<typename T >
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T > 
    saturate (const detail::tvec4< T > &x)
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    -

    Detailed Description

    -

    Provide functions to increase the compatibility with Cg and HLSL languages.

    -

    <glm/gtx/compatibility.hpp> need to be included to use these functionalities.

    +

    Detailed Description

    +

    Min and max functions that return associated values not the compared onces.

    +

    <glm/gtx/associated_min_max.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    genTypeU glm::associatedMax (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b 
    )
    +
    + +

    Max comparison between 2 variables.

    +
    See Also
    GLM_GTX_associated_min_max
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    genTypeU glm::associatedMax (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c 
    )
    +
    +

    Max comparison between 3 variables.

    +
    See Also
    GLM_GTX_associated_min_max
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    genTypeU glm::associatedMax (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c,
    const genTypeT & w,
    const genTypeU & d 
    )
    +
    + +

    Max comparison between 4 variables.

    +
    See Also
    GLM_GTX_associated_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b 
    )
    +
    + +

    Min comparison between 2 variables.

    +
    See Also
    GLM_GTX_associated_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c 
    )
    +
    + +

    Min comparison between 3 variables.

    +
    See Also
    GLM_GTX_associated_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c,
    const genTypeT & w,
    const genTypeU & d 
    )
    +
    + +

    Min comparison between 4 variables.

    +
    See Also
    GLM_GTX_associated_min_max
    + +
    +
    +
    + - diff --git a/doc/api/a00161.html b/doc/api/a00161.html index 74c9007f..c57bcd38 100644 --- a/doc/api/a00161.html +++ b/doc/api/a00161.html @@ -2,157 +2,433 @@ - -GLM_GTX_component_wise: Component wise + +GLM_GTX_bit + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_component_wise: Component wise
    -
    +
    GLM_GTX_bit
    +
    GTX Extensions (Experimental)
    - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType::value_type compAdd (genType const &v)
    template<typename genType >
    genType::value_type compMax (genType const &v)
    template<typename genType >
    genType::value_type compMin (genType const &v)
    template<typename genType >
    genType::value_type compMul (genType const &v)
    template<typename genType >
    GLM_DEPRECATED genType bitRevert (genType const &value)
     
    template<typename genType >
    genType bitRotateLeft (genType const &In, std::size_t Shift)
     
    template<typename genType >
    genType bitRotateRight (genType const &In, std::size_t Shift)
     
    template<typename genIUType , typename sizeType >
    GLM_DEPRECATED genIUType extractField (genIUType const &v, sizeType const &first, sizeType const &count)
     
    template<typename genIUType >
    genIUType fillBitfieldWithOne (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genIUType >
    genIUType fillBitfieldWithZero (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genType >
    GLM_DEPRECATED int highestBit (genType const &value)
     
    template<typename genType >
    genType highestBitValue (genType const &value)
     
    template<typename genType >
    bool isPowerOfTwo (genType const &value)
     
    template<typename genType >
    GLM_DEPRECATED int lowestBit (genType const &value)
     
    template<typename genIType >
    genIType mask (genIType const &count)
     
    template<typename genType >
    genType powerOfTwoAbove (genType const &value)
     
    template<typename genType >
    genType powerOfTwoBelow (genType const &value)
     
    template<typename genType >
    genType powerOfTwoNearest (genType const &value)
     
    -

    Detailed Description

    -

    Operations between components of a type.

    -

    <glm/gtx/component_wise.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Allow to perform bit operations on integer values.

    +

    <glm/gtx/bit.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - +
    genType::value_type glm::compAdd GLM_DEPRECATED genType glm::bitRevert ( genType const & v)value)
    -
    -
    +
    -

    Add all vector components together.

    -
    See also:
    GLM_GTX_component_wise: Component wise
    +

    Revert all bits of any integer based type.

    +
    See Also
    GLM_GTX_bit
    - +
    - + - + + + + + + + + + + +
    genType::value_type glm::compMax genType glm::bitRotateLeft ( genType const & v)In,
    std::size_t Shift 
    )
    -
    -
    +
    -

    Find the maximum value between single vector components.

    -
    See also:
    GLM_GTX_component_wise: Component wise
    +

    Rotate all bits to the left.

    +
    See Also
    GLM_GTX_bit
    - +
    - + - + + + + + + + + + + +
    genType::value_type glm::compMin genType glm::bitRotateRight ( genType const & v)In,
    std::size_t Shift 
    )
    -
    -
    +
    -

    Find the minimum value between single vector components.

    -
    See also:
    GLM_GTX_component_wise: Component wise
    +

    Rotate all bits to the right.

    +
    See Also
    GLM_GTX_bit
    - +
    - + + + + + + + + + + + + + + + + + + + + + + +
    genType::value_type glm::compMul GLM_DEPRECATED genIUType glm::extractField (genIUType const & v,
    sizeType const & first,
    sizeType const & count 
    )
    +
    + +

    Component wise extraction of bit fields.

    +

    genType and genIType could be a scalar or a vector.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genIUType glm::fillBitfieldWithOne (genIUType const & Value,
    int const & FromBit,
    int const & ToBit 
    )
    +
    + +

    Set to 1 a range of bits.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    genIUType glm::fillBitfieldWithZero (genIUType const & Value,
    int const & FromBit,
    int const & ToBit 
    )
    +
    + +

    Set to 0 a range of bits.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + - +
    GLM_DEPRECATED int glm::highestBit ( genType const & v)value)
    -
    -
    +
    -

    Multiply all vector components together.

    -
    See also:
    GLM_GTX_component_wise: Component wise
    +

    Find the highest bit set to 1 in a integer variable.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    + + + + + + + + +
    genType glm::highestBitValue (genType const & value)
    +
    + +

    Find the highest bit set to 1 in a integer variable and return its value.

    +
    See Also
    GLM_GTX_bit
    +
    +
    + +
    +
    + + + + + + + + +
    bool glm::isPowerOfTwo (genType const & value)
    +
    +

    Return true if the value is a power of two number.

    +
    See Also
    GLM_GTX_bit
    +
    +
    + +
    +
    + + + + + + + + +
    GLM_DEPRECATED int glm::lowestBit (genType const & value)
    +
    + +

    Find the lowest bit set to 1 in a integer variable.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + +
    genIType glm::mask (genIType const & count)
    +
    + +

    Build a mask of 'count' bits.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::powerOfTwoAbove (genType const & value)
    +
    + +

    Return the power of two number which value is just higher the input value.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::powerOfTwoBelow (genType const & value)
    +
    + +

    Return the power of two number which value is just lower the input value.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + +
    genType glm::powerOfTwoNearest (genType const & value)
    +
    + +

    Return the power of two number which value is the closet to the input value.

    +
    See Also
    GLM_GTX_bit
    + +
    +
    +
    + - diff --git a/doc/api/a00162.html b/doc/api/a00162.html index 936c9e23..0c55efd2 100644 --- a/doc/api/a00162.html +++ b/doc/api/a00162.html @@ -2,595 +2,94 @@ - -GLM_GTX_constants: Provide build-in constants + +GLM_GTX_closest_point + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_constants: Provide build-in constants
    -
    +
    GLM_GTX_closest_point
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +

    +

    Functions

    template<typename T >
    e ()
    template<typename T >
    epsilon ()
    template<typename T >
    euler ()
    template<typename T >
    golden_ratio ()
    template<typename T >
    half_pi ()
    template<typename T >
    ln_ln_two ()
    template<typename T >
    ln_ten ()
    template<typename T >
    ln_two ()
    template<typename T >
    one ()
    template<typename T >
    one_over_pi ()
    template<typename T >
    one_over_root_two ()
    template<typename T >
    pi ()
    template<typename T >
    quarter_pi ()
    template<typename T >
    root_five ()
    template<typename T >
    root_half_pi ()
    template<typename T >
    root_ln_four ()
    template<typename T >
    root_pi ()
    template<typename T >
    root_three ()
    template<typename T >
    root_two ()
    template<typename T >
    root_two_pi ()
    template<typename T >
    third ()
    template<typename T >
    two_over_pi ()
    template<typename T >
    two_over_root_pi ()
    template<typename T >
    two_thirds ()
    template<typename T >
    zero ()
    template<typename T >
    detail::tvec3< T > closestPointOnLine (detail::tvec3< T > const &point, detail::tvec3< T > const &a, detail::tvec3< T > const &b)
     
    -

    Detailed Description

    -

    Allow to perform bit operations on integer values.

    -

    <glm/gtx/constants.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Find the point on a straight line which is the closet of a point.

    +

    <glm/gtx/closest_point.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + -
    T glm::e detail::tvec3<T> glm::closestPointOnLine ()detail::tvec3< T > const & point,
    -
    -
    - -

    Return e constant.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - + + + -
    T glm::epsilon () detail::tvec3< T > const & a,
    -
    -
    - -

    Return the epsilon constant for floating point types.

    -
    Todo:
    Implement epsilon for half-precision floating point type.
    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - + + + -
    T glm::euler () detail::tvec3< T > const & b 
    -
    -
    - -

    Return Euler's constant.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - + +
    T glm::golden_ratio () )
    -
    -
    +
    -

    Return the golden ratio constant.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    +

    Find the point on a straight line which is the closet of a point.

    +
    See Also
    GLM_GTX_closest_point
    - -
    -
    - - - - - - - -
    T glm::half_pi ()
    -
    -
    - -

    Return pi / 2.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::ln_ln_two ()
    -
    -
    - -

    Return ln(ln(2)).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::ln_ten ()
    -
    -
    - -

    Return ln(10).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::ln_two ()
    -
    -
    - -

    Return ln(2).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::one ()
    -
    - -
    - -
    -
    - - - - - - - -
    T glm::one_over_pi ()
    -
    -
    - -

    Return 1 / pi.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::one_over_root_two ()
    -
    -
    - -

    Return 1 / sqrt(2).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::pi ()
    -
    -
    - -

    Return the pi constant.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::quarter_pi ()
    -
    -
    - -

    Return pi / 4.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::root_five ()
    -
    -
    - -

    Return sqrt(5).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::root_half_pi ()
    -
    -
    - -

    Return sqrt(pi / 2).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::root_ln_four ()
    -
    -
    - -

    Return sqrt(ln(4)).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::root_pi ()
    -
    -
    - -

    Return square root of pi.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::root_three ()
    -
    -
    - -

    Return sqrt(3).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::root_two ()
    -
    -
    - -

    Return sqrt(2).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::root_two_pi ()
    -
    -
    - -

    Return sqrt(2 * pi).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::third ()
    -
    -
    - -

    Return 1 / 3.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::two_over_pi ()
    -
    -
    - -

    Return 2 / pi.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::two_over_root_pi ()
    -
    -
    - -

    Return 2 / sqrt(pi).

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::two_thirds ()
    -
    -
    - -

    Return 2 / 3.

    -
    See also:
    GLM_GTX_constants: Provide build-in constants
    - -
    -
    - -
    -
    - - - - - - - -
    T glm::zero ()
    -
    - -
    -
    - - + + - diff --git a/doc/api/a00163.html b/doc/api/a00163.html index 17ed8fb6..a374568d 100644 --- a/doc/api/a00163.html +++ b/doc/api/a00163.html @@ -2,145 +2,272 @@ - -GLM_GTX_epsilon: Epsilon comparison + +GLM_GTX_color_cast + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_epsilon: Epsilon comparison
    -
    +
    GLM_GTX_color_cast
    +
    GTX Extensions (Experimental)
    - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genTypeT , typename genTypeU >
    bool equalEpsilon (genTypeT const &x, genTypeT const &y, genTypeU const &epsilon)
    template<typename genTypeT , typename genTypeU >
    bool notEqualEpsilon (genTypeT const &x, genTypeT const &y, genTypeU const &epsilon)
    +template<typename T >
    f16vec4 f16_abgr_cast (T c)
     
    +template<typename T >
    f16vec4 f16_argb_cast (T c)
     
    +template<typename T >
    f16vec4 f16_bgra_cast (T c)
     
    +template<typename T >
    f16vec3 f16_bgrx_cast (T c)
     
    +template<typename T >
    f16 f16_channel_cast (T a)
     
    +template<typename T >
    f16vec4 f16_rgba_cast (T c)
     
    +template<typename T >
    f16vec3 f16_rgbx_cast (T c)
     
    +template<typename T >
    f16vec3 f16_xbgr_cast (T c)
     
    +template<typename T >
    f16vec3 f16_xrgb_cast (T c)
     
    +template<typename T >
    f32vec4 f32_abgr_cast (T c)
     
    +template<typename T >
    f32vec4 f32_argb_cast (T c)
     
    +template<typename T >
    f32vec4 f32_bgra_cast (T c)
     
    +template<typename T >
    f32vec3 f32_bgrx_cast (T c)
     
    +template<typename T >
    f32 f32_channel_cast (T a)
     
    +template<typename T >
    f32vec4 f32_rgba_cast (T c)
     
    +template<typename T >
    f32vec3 f32_rgbx_cast (T c)
     
    +template<typename T >
    f32vec3 f32_xbgr_cast (T c)
     
    +template<typename T >
    f32vec3 f32_xrgb_cast (T c)
     
    +template<typename T >
    f64vec4 f64_abgr_cast (T c)
     
    +template<typename T >
    f64vec4 f64_argb_cast (T c)
     
    +template<typename T >
    f64vec4 f64_bgra_cast (T c)
     
    +template<typename T >
    f64vec3 f64_bgrx_cast (T c)
     
    +template<typename T >
    f64 f64_channel_cast (T a)
     
    +template<typename T >
    f64vec4 f64_rgba_cast (T c)
     
    +template<typename T >
    f64vec3 f64_rgbx_cast (T c)
     
    +template<typename T >
    f64vec3 f64_xbgr_cast (T c)
     
    +template<typename T >
    f64vec3 f64_xrgb_cast (T c)
     
    template<typename valType >
    uint16 u16channel_cast (valType a)
     
    +template<typename T >
    uint32 u32_abgr_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint32 u32_argb_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint32 u32_bgra_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint32 u32_bgrx_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint32 u32_rgba_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint32 u32_rgbx_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint32 u32_xbgr_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint32 u32_xrgb_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint64 u64_abgr_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint64 u64_argb_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint64 u64_bgra_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint64 u64_bgrx_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint64 u64_rgba_cast (const detail::tvec4< T > &c)
     
    +template<typename T >
    uint64 u64_rgbx_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint64 u64_xbgr_cast (const detail::tvec3< T > &c)
     
    +template<typename T >
    uint64 u64_xrgb_cast (const detail::tvec3< T > &c)
     
    template<typename valType >
    uint8 u8channel_cast (valType a)
     
    -

    Detailed Description

    -

    Comparison functions for a user defined epsilon values.

    -

    <glm/gtx/epsilon.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Conversion between two color types.

    +

    <glm/gtx/color_cast.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - - - + + - - - - - - - - - - - - -
    bool glm::equalEpsilon uint16 glm::u16channel_cast (genTypeT const & x,
    valType a) genTypeT const & y,
    genTypeU const & epsilon 
    )
    -
    -
    +
    -

    Returns the component-wise compare of |x - y| < epsilon.

    -
    See also:
    GLM_GTX_epsilon: Epsilon comparison
    +

    Conversion of a floating value into a 16bit unsigned int value.

    +
    See Also
    GLM_GTX_color_cast
    - +
    - + - - - - - + + - - - - - - - - - - - - -
    bool glm::notEqualEpsilon uint8 glm::u8channel_cast (genTypeT const & x,
    valType a) genTypeT const & y,
    genTypeU const & epsilon 
    )
    -
    -
    +
    -

    Returns the component-wise compare of |x - y| >= epsilon.

    -
    See also:
    GLM_GTX_epsilon: Epsilon comparison
    +

    Conversion of a floating value into a 8bit unsigned int value.

    +
    See Also
    GLM_GTX_color_cast
    -
    - - + + - diff --git a/doc/api/a00164.html b/doc/api/a00164.html index 921e4c04..2b3d4dcb 100644 --- a/doc/api/a00164.html +++ b/doc/api/a00164.html @@ -2,126 +2,159 @@ - -GLM_GTX_euler_angles: Matrix from euler angles + +GLM_GTX_color_space + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_euler_angles: Matrix from euler angles
    -
    +
    GLM_GTX_color_space
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    detail::tmat4x4< valType > eulerAngleX (valType const &angleX)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleXY (valType const &angleX, valType const &angleY)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleXZ (valType const &angleX, valType const &angleZ)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleY (valType const &angleY)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYX (valType const &angleY, valType const &angleX)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYXZ (valType const &yaw, valType const &pitch, valType const &roll)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYZ (valType const &angleY, valType const &angleZ)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZ (valType const &angleZ)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZX (valType const &angleZ, valType const &angleX)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZY (valType const &angleZ, valType const &angleY)
    template<typename T >
    detail::tmat2x2< T > orientate2 (T const &angle)
    template<typename T >
    detail::tmat3x3< T > orientate3 (T const &angle)
    template<typename T >
    detail::tmat3x3< T > orientate3 (detail::tvec3< T > const &angles)
    template<typename T >
    detail::tmat4x4< T > orientate4 (detail::tvec3< T > const &angles)
    template<typename valType >
    detail::tmat4x4< valType > yawPitchRoll (valType const &yaw, valType const &pitch, valType const &roll)
    template<typename valType >
    detail::tvec3< valType > hsvColor (detail::tvec3< valType > const &rgbValue)
     
    template<typename valType >
    valType luminosity (detail::tvec3< valType > const &color)
     
    template<typename valType >
    detail::tvec3< valType > rgbColor (detail::tvec3< valType > const &hsvValue)
     
    template<typename valType >
    detail::tmat4x4< valType > saturation (valType const s)
     
    template<typename valType >
    detail::tvec3< valType > saturation (valType const s, detail::tvec3< valType > const &color)
     
    template<typename valType >
    detail::tvec4< valType > saturation (valType const s, detail::tvec4< valType > const &color)
     
    -

    Detailed Description

    -

    Build matrices from Euler angles.

    -

    <glm/gtx/euler_angles.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Related to RGB to HSV conversions and operations.

    +

    <glm/gtx/color_space.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + +
    detail::tmat4x4<valType> glm::eulerAngleX detail::tvec3<valType> glm::hsvColor (valType const & angleX)detail::tvec3< valType > const & rgbValue)
    -
    -
    +
    -

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    +

    Converts a color from RGB color space to its color in HSV color space.

    +
    See Also
    GLM_GTX_color_space
    - +
    - + - - + + + + +
    detail::tmat4x4<valType> glm::eulerAngleXY valType glm::luminosity (valType const & angleX, detail::tvec3< valType > const & color)
    +
    + +

    Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.

    +
    See Also
    GLM_GTX_color_space
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec3<valType> glm::rgbColor (detail::tvec3< valType > const & hsvValue)
    +
    + +

    Converts a color from HSV color space to its color in RGB color space.

    +
    See Also
    GLM_GTX_color_space
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<valType> glm::saturation (valType const s)
    +
    + +

    Build a saturation matrix.

    +
    See Also
    GLM_GTX_color_space
    + +
    +
    + +
    +
    + + + + + + - - + + @@ -129,29 +162,28 @@ Functions
    detail::tvec3<valType> glm::saturation (valType const s,
    valType const & angleY detail::tvec3< valType > const & color 
    -
    -
    +
    -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    +

    Modify the saturation of a color.

    +
    See Also
    GLM_GTX_color_space
    - +
    - + - - + + - - + + @@ -159,334 +191,19 @@ Functions
    detail::tmat4x4<valType> glm::eulerAngleXZ detail::tvec4<valType> glm::saturation (valType const & angleX, valType const s,
    valType const & angleZ detail::tvec4< valType > const & color 
    -
    -
    +
    -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    +

    Modify the saturation of a color.

    +
    See Also
    GLM_GTX_color_space
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<valType> glm::eulerAngleY (valType const & angleY)
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType> glm::eulerAngleYX (valType const & angleY,
    valType const & angleX 
    )
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType> glm::eulerAngleYXZ (valType const & yaw,
    valType const & pitch,
    valType const & roll 
    )
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType> glm::eulerAngleYZ (valType const & angleY,
    valType const & angleZ 
    )
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<valType> glm::eulerAngleZ (valType const & angleZ)
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType> glm::eulerAngleZX (valType const & angleZ,
    valType const & angleX 
    )
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType> glm::eulerAngleZY (valType const & angleZ,
    valType const & angleY 
    )
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat2x2<T> glm::orientate2 (T const & angle)
    -
    -
    - -

    Creates a 2D 2 * 2 rotation matrix from an euler angle.

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<T> glm::orientate3 (T const & angle)
    -
    -
    - -

    Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<T> glm::orientate3 (detail::tvec3< T > const & angles)
    -
    -
    - -

    Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T> glm::orientate4 (detail::tvec3< T > const & angles)
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType> glm::yawPitchRoll (valType const & yaw,
    valType const & pitch,
    valType const & roll 
    )
    -
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    -
    See also:
    GLM_GTX_euler_angles: Matrix from euler angles
    - -
    -
    -
    - - + + - diff --git a/doc/api/a00165.html b/doc/api/a00165.html index 2376117a..86be76e7 100644 --- a/doc/api/a00165.html +++ b/doc/api/a00165.html @@ -2,107 +2,148 @@ - -GLM_GTX_extend: Position extending + +GLM_GTX_color_space_YCoCg + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_extend: Position extending
    -
    +
    GLM_GTX_color_space_YCoCg
    +
    GTX Extensions (Experimental)
    - - - + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
    template<typename valType >
    detail::tvec3< valType > rgb2YCoCg (detail::tvec3< valType > const &rgbColor)
     
    template<typename valType >
    detail::tvec3< valType > rgb2YCoCgR (detail::tvec3< valType > const &rgbColor)
     
    template<typename valType >
    detail::tvec3< valType > YCoCg2rgb (detail::tvec3< valType > const &YCoCgColor)
     
    template<typename valType >
    detail::tvec3< valType > YCoCgR2rgb (detail::tvec3< valType > const &YCoCgColor)
     
    -

    Detailed Description

    -

    Extend a position from a source to a position at a defined length.

    -

    <glm/gtx/extend.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    RGB to YCoCg conversions and operations.

    +

    <glm/gtx/color_space_YCoCg.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - - - + + - - - - - - - - - - - - -
    genType glm::extend detail::tvec3<valType> glm::rgb2YCoCg (genType const & Origin,
    detail::tvec3< valType > const & rgbColor) genType const & Source,
    typename genType::value_type const Length 
    )
    -
    -
    +
    -

    Extends of Length the Origin position using the (Source - Origin) direction.

    -
    See also:
    GLM_GTX_extend: Position extending
    +

    Convert a color from RGB color space to YCoCg color space.

    +
    See Also
    GLM_GTX_color_space_YCoCg
    + +
    +
    + + + + + + + + +
    detail::tvec3<valType> glm::rgb2YCoCgR (detail::tvec3< valType > const & rgbColor)
    +
    + +

    Convert a color from RGB color space to YCoCgR color space.

    +
    See Also
    "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
    +
    +GLM_GTX_color_space_YCoCg
    +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec3<valType> glm::YCoCg2rgb (detail::tvec3< valType > const & YCoCgColor)
    +
    +

    Convert a color from YCoCg color space to RGB color space.

    +
    See Also
    GLM_GTX_color_space_YCoCg
    +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec3<valType> glm::YCoCgR2rgb (detail::tvec3< valType > const & YCoCgColor)
    +
    + +

    Convert a color from YCoCgR color space to RGB color space.

    +
    See Also
    "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
    +
    +GLM_GTX_color_space_YCoCg
    + +
    +
    +
    + - diff --git a/doc/api/a00166.html b/doc/api/a00166.html index 1b8c3a3f..79e59a7d 100644 --- a/doc/api/a00166.html +++ b/doc/api/a00166.html @@ -2,561 +2,373 @@ - -GLM_GTX_extented_min_max: Extended min max + +GLM_GTX_compatibility + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_extented_min_max: Extended min max
    -
    +
    GLM_GTX_compatibility
    +
    GTX Extensions (Experimental)
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    +Typedefs

    +typedef bool bool1
     
    +typedef bool bool1x1
     
    +typedef detail::tvec2< bool > bool2
     
    +typedef detail::tmat2x2< bool > bool2x2
     
    +typedef detail::tmat2x3< bool > bool2x3
     
    +typedef detail::tmat2x4< bool > bool2x4
     
    +typedef detail::tvec3< bool > bool3
     
    +typedef detail::tmat3x2< bool > bool3x2
     
    +typedef detail::tmat3x3< bool > bool3x3
     
    +typedef detail::tmat3x4< bool > bool3x4
     
    +typedef detail::tvec4< bool > bool4
     
    +typedef detail::tmat4x2< bool > bool4x2
     
    +typedef detail::tmat4x3< bool > bool4x3
     
    +typedef detail::tmat4x4< bool > bool4x4
     
    +typedef double double1
     
    +typedef double double1x1
     
    +typedef detail::tvec2< double > double2
     
    +typedef detail::tmat2x2< double > double2x2
     
    +typedef detail::tmat2x3< double > double2x3
     
    +typedef detail::tmat2x4< double > double2x4
     
    +typedef detail::tvec3< double > double3
     
    +typedef detail::tmat3x2< double > double3x2
     
    +typedef detail::tmat3x3< double > double3x3
     
    +typedef detail::tmat3x4< double > double3x4
     
    +typedef detail::tvec4< double > double4
     
    +typedef detail::tmat4x2< double > double4x2
     
    +typedef detail::tmat4x3< double > double4x3
     
    +typedef detail::tmat4x4< double > double4x4
     
    +typedef float float1
     
    +typedef float float1x1
     
    +typedef detail::tvec2< float > float2
     
    +typedef detail::tmat2x2< float > float2x2
     
    +typedef detail::tmat2x3< float > float2x3
     
    +typedef detail::tmat2x4< float > float2x4
     
    +typedef detail::tvec3< float > float3
     
    +typedef detail::tmat3x2< float > float3x2
     
    +typedef detail::tmat3x3< float > float3x3
     
    +typedef detail::tmat3x4< float > float3x4
     
    +typedef detail::tvec4< float > float4
     
    +typedef detail::tmat4x2< float > float4x2
     
    +typedef detail::tmat4x3< float > float4x3
     
    +typedef detail::tmat4x4< float > float4x4
     
    +typedef detail::half half1
     
    +typedef detail::half half1x1
     
    +typedef detail::tvec2
    +< detail::half > 
    half2
     
    +typedef detail::tmat2x2
    +< detail::half > 
    half2x2
     
    +typedef detail::tmat2x3
    +< detail::half > 
    half2x3
     
    +typedef detail::tmat2x4
    +< detail::half > 
    half2x4
     
    +typedef detail::tvec3
    +< detail::half > 
    half3
     
    +typedef detail::tmat3x2
    +< detail::half > 
    half3x2
     
    +typedef detail::tmat3x3
    +< detail::half > 
    half3x3
     
    +typedef detail::tmat3x4
    +< detail::half > 
    half3x4
     
    +typedef detail::tvec4
    +< detail::half > 
    half4
     
    +typedef detail::tmat4x2
    +< detail::half > 
    half4x2
     
    +typedef detail::tmat4x3
    +< detail::half > 
    half4x3
     
    +typedef detail::tmat4x4
    +< detail::half > 
    half4x4
     
    +typedef int int1
     
    +typedef int int1x1
     
    +typedef detail::tvec2< int > int2
     
    +typedef detail::tmat2x2< int > int2x2
     
    +typedef detail::tmat2x3< int > int2x3
     
    +typedef detail::tmat2x4< int > int2x4
     
    +typedef detail::tvec3< int > int3
     
    +typedef detail::tmat3x2< int > int3x2
     
    +typedef detail::tmat3x3< int > int3x3
     
    +typedef detail::tmat3x4< int > int3x4
     
    +typedef detail::tvec4< int > int4
     
    +typedef detail::tmat4x2< int > int4x2
     
    +typedef detail::tmat4x3< int > int4x3
     
    +typedef detail::tmat4x4< int > int4x4
     
    + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    max (T const &x, T const &y, T const &z)
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z)
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
    template<typename T >
    max (T const &x, T const &y, T const &z, T const &w)
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z, typename C< T >::value_type const &w)
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
    template<typename T >
    min (T const &x, T const &y, T const &z)
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z)
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
    template<typename T >
    min (T const &x, T const &y, T const &z, T const &w)
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z, typename C< T >::value_type const &w)
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
    +template<typename T >
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec2< T > 
    atan2 (const detail::tvec2< T > &x, const detail::tvec2< T > &y)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    atan2 (const detail::tvec3< T > &x, const detail::tvec3< T > &y)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec4< T > 
    atan2 (const detail::tvec4< T > &x, const detail::tvec4< T > &y)
     
    +template<typename genType >
    bool isfinite (genType const &x)
     
    +template<typename valType >
    detail::tvec2< bool > isfinite (const detail::tvec2< valType > &x)
     
    +template<typename valType >
    detail::tvec3< bool > isfinite (const detail::tvec3< valType > &x)
     
    +template<typename valType >
    detail::tvec4< bool > isfinite (const detail::tvec4< valType > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec2< T > 
    lerp (const detail::tvec2< T > &x, const detail::tvec2< T > &y, T a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    lerp (const detail::tvec3< T > &x, const detail::tvec3< T > &y, T a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec4< T > 
    lerp (const detail::tvec4< T > &x, const detail::tvec4< T > &y, T a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec2< T > 
    lerp (const detail::tvec2< T > &x, const detail::tvec2< T > &y, const detail::tvec2< T > &a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    lerp (const detail::tvec3< T > &x, const detail::tvec3< T > &y, const detail::tvec3< T > &a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec4< T > 
    lerp (const detail::tvec4< T > &x, const detail::tvec4< T > &y, const detail::tvec4< T > &a)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER T saturate (T x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec2< T > 
    saturate (const detail::tvec2< T > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec3< T > 
    saturate (const detail::tvec3< T > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER
    +detail::tvec4< T > 
    saturate (const detail::tvec4< T > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER T slerp (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
     
    -

    Detailed Description

    -

    Min and max functions for 3 to 4 parameters.

    -

    <glm/gtx/extented_min_max.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    T glm::max (T const & x,
    T const & y,
    T const & z 
    )
    -
    -
    - -

    Return the maximum component-wise values of 3 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::max (C< T > const & x,
    typename C< T >::value_type const & y,
    typename C< T >::value_type const & z 
    )
    -
    -
    - -

    Return the maximum component-wise values of 3 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::max (C< T > const & x,
    C< T > const & y,
    C< T > const & z 
    )
    -
    -
    - -

    Return the maximum component-wise values of 3 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    T glm::max (T const & x,
    T const & y,
    T const & z,
    T const & w 
    )
    -
    -
    - -

    Return the maximum component-wise values of 4 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::max (C< T > const & x,
    typename C< T >::value_type const & y,
    typename C< T >::value_type const & z,
    typename C< T >::value_type const & w 
    )
    -
    -
    - -

    Return the maximum component-wise values of 4 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::max (C< T > const & x,
    C< T > const & y,
    C< T > const & z,
    C< T > const & w 
    )
    -
    -
    - -

    Return the maximum component-wise values of 4 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    T glm::min (T const & x,
    T const & y,
    T const & z 
    )
    -
    -
    - -

    Return the minimum component-wise values of 3 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::min (C< T > const & x,
    typename C< T >::value_type const & y,
    typename C< T >::value_type const & z 
    )
    -
    -
    - -

    Return the minimum component-wise values of 3 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::min (C< T > const & x,
    C< T > const & y,
    C< T > const & z 
    )
    -
    -
    - -

    Return the minimum component-wise values of 3 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    T glm::min (T const & x,
    T const & y,
    T const & z,
    T const & w 
    )
    -
    -
    - -

    Return the minimum component-wise values of 4 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::min (C< T > const & x,
    typename C< T >::value_type const & y,
    typename C< T >::value_type const & z,
    typename C< T >::value_type const & w 
    )
    -
    -
    - -

    Return the minimum component-wise values of 4 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::min (C< T > const & x,
    C< T > const & y,
    C< T > const & z,
    C< T > const & w 
    )
    -
    -
    - -

    Return the minimum component-wise values of 4 inputs.

    -
    See also:
    GLM_GTX_extented_min_max: Extended min max
    - -
    -
    -
    - - +

    Detailed Description

    +

    Provide functions to increase the compatibility with Cg and HLSL languages.

    +

    <glm/gtx/compatibility.hpp> need to be included to use these functionalities.

    + + - diff --git a/doc/api/a00167.html b/doc/api/a00167.html index fb9e60a5..622649cc 100644 --- a/doc/api/a00167.html +++ b/doc/api/a00167.html @@ -2,243 +2,144 @@ - -GLM_GTX_fast_exponential: Fast exponentiation functions + +GLM_GTX_component_wise + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_fast_exponential: Fast exponentiation functions
    -
    +
    GLM_GTX_component_wise
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    fastExp (const T &x)
    template<typename T >
    fastExp2 (const T &x)
    template<typename T >
    fastLn (const T &x)
    template<typename T >
    fastLog (const T &x)
    template<typename T >
    fastLog2 (const T &x)
    template<typename genType >
    genType fastPow (genType const &x, genType const &y)
    template<typename genTypeT , typename genTypeU >
    genTypeT fastPow (genTypeT const &x, genTypeU const &y)
    template<typename genType >
    genType::value_type compAdd (genType const &v)
     
    template<typename genType >
    genType::value_type compMax (genType const &v)
     
    template<typename genType >
    genType::value_type compMin (genType const &v)
     
    template<typename genType >
    genType::value_type compMul (genType const &v)
     
    -

    Detailed Description

    -

    Fast but less accurate implementations of exponential based functions.

    -

    <glm/gtx/fast_exponential.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Operations between components of a type.

    +

    <glm/gtx/component_wise.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - - - - - - -
    T glm::fastExp (const T & x)
    -
    -
    - -

    Faster than the common exp function but less accurate.

    -
    See also:
    GLM_GTX_fast_exponential: Fast exponentiation functions
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastExp2 (const T & x)
    -
    -
    - -

    Faster than the common exp2 function but less accurate.

    -
    See also:
    GLM_GTX_fast_exponential: Fast exponentiation functions
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastLn (const T & x)
    -
    -
    - -

    Faster than the common ln function but less accurate.

    -
    See also:
    GLM_GTX_fast_exponential: Fast exponentiation functions
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastLog (const T & x)
    -
    -
    - -

    Faster than the common log function but less accurate.

    -
    See also:
    GLM_GTX_fast_exponential: Fast exponentiation functions
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastLog2 (const T & x)
    -
    -
    - -

    Faster than the common log2 function but less accurate.

    -
    See also:
    GLM_GTX_fast_exponential: Fast exponentiation functions
    - -
    -
    - -
    -
    - - - + - - - - + - - - - - - -
    genType glm::fastPow genType::value_type glm::compAdd ( genType const & x,
    v) genType const & y 
    )
    -
    -
    +
    -

    Faster than the common pow function but less accurate.

    -
    See also:
    GLM_GTX_fast_exponential: Fast exponentiation functions
    +

    Add all vector components together.

    +
    See Also
    GLM_GTX_component_wise
    - +
    - + - - - - - + + - - - - - - -
    genTypeT glm::fastPow genType::value_type glm::compMax (genTypeT const & x,
    genType const & v) genTypeU const & y 
    )
    -
    -
    +
    -

    Faster than the common pow function but less accurate.

    -
    See also:
    GLM_GTX_fast_exponential: Fast exponentiation functions
    +

    Find the maximum value between single vector components.

    +
    See Also
    GLM_GTX_component_wise
    + +
    +
    + + + + + + + + +
    genType::value_type glm::compMin (genType const & v)
    +
    + +

    Find the minimum value between single vector components.

    +
    See Also
    GLM_GTX_component_wise
    +
    +
    + +
    +
    + + + + + + + + +
    genType::value_type glm::compMul (genType const & v)
    +
    +

    Multiply all vector components together.

    +
    See Also
    GLM_GTX_component_wise
    +
    +
    +
    + - diff --git a/doc/api/a00168.html b/doc/api/a00168.html index fe7d8bb2..1be34a9e 100644 --- a/doc/api/a00168.html +++ b/doc/api/a00168.html @@ -2,89 +2,129 @@ - -GLM_GTX_fast_square_root: Fast square root functions + +GLM_GTX_euler_angles + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_fast_square_root: Fast square root functions
    -
    +
    GLM_GTX_euler_angles
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType::value_type fastDistance (genType const &x, genType const &y)
    template<typename genType >
    genType fastInverseSqrt (genType const &x)
    template<typename genType >
    genType::value_type fastLength (genType const &x)
    template<typename genType >
    genType fastNormalize (genType const &x)
    template<typename genType >
    genType fastSqrt (genType const &x)
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleX (valType const &angleX)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleXY (valType const &angleX, valType const &angleY)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleXZ (valType const &angleX, valType const &angleZ)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleY (valType const &angleY)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYX (valType const &angleY, valType const &angleX)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYXZ (valType const &yaw, valType const &pitch, valType const &roll)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleYZ (valType const &angleY, valType const &angleZ)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZ (valType const &angleZ)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZX (valType const &angleZ, valType const &angleX)
     
    template<typename valType >
    detail::tmat4x4< valType > eulerAngleZY (valType const &angleZ, valType const &angleY)
     
    template<typename T >
    detail::tmat2x2< T > orientate2 (T const &angle)
     
    template<typename T >
    detail::tmat3x3< T > orientate3 (T const &angle)
     
    template<typename T >
    detail::tmat3x3< T > orientate3 (detail::tvec3< T > const &angles)
     
    template<typename T >
    detail::tmat4x4< T > orientate4 (detail::tvec3< T > const &angles)
     
    template<typename valType >
    detail::tmat4x4< valType > yawPitchRoll (valType const &yaw, valType const &pitch, valType const &roll)
     
    -

    Detailed Description

    -

    Fast but less accurate implementations of square root based functions.

    - -

    <glm/gtx/fast_square_root.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Build matrices from Euler angles.

    +

    <glm/gtx/euler_angles.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + + + +
    genType::value_type glm::fastDistance detail::tmat4x4<valType> glm::eulerAngleX (genType const & x, valType const & angleX)
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + - - + + @@ -92,102 +132,348 @@ Functions
    detail::tmat4x4<valType> glm::eulerAngleXY (valType const & angleX,
    genType const & y valType const & angleY 
    -
    -
    +
    -

    Faster than the common distance function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).

    +
    See Also
    GLM_GTX_euler_angles
    - +
    - + - - + + + + + + + + + + + +
    genType glm::fastInverseSqrt detail::tmat4x4<valType> glm::eulerAngleXZ (genType const & x)valType const & angleX,
    valType const & angleZ 
    )
    -
    -
    +
    -

    Faster than the common inversesqrt function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).

    +
    See Also
    GLM_GTX_euler_angles
    - +
    - + - - + +
    genType::value_type glm::fastLength detail::tmat4x4<valType> glm::eulerAngleY (genType const & x)valType const & angleY)
    -
    -
    +
    -

    Faster than the common length function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.

    +
    See Also
    GLM_GTX_euler_angles
    - +
    - + - - + + + + + + + + + + + +
    genType glm::fastNormalize detail::tmat4x4<valType> glm::eulerAngleYX (genType const & x)valType const & angleY,
    valType const & angleX 
    )
    -
    -
    +
    -

    Faster than the common normalize function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).

    +
    See Also
    GLM_GTX_euler_angles
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + +
    genType glm::fastSqrt detail::tmat4x4<valType> glm::eulerAngleYXZ (genType const & x)valType const & yaw,
    valType const & pitch,
    valType const & roll 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<valType> glm::eulerAngleYZ (valType const & angleY,
    valType const & angleZ 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + +
    detail::tmat4x4<valType> glm::eulerAngleZ (valType const & angleZ)
    -
    -
    +
    -

    Faster than the common sqrt function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<valType> glm::eulerAngleZX (valType const & angleZ,
    valType const & angleX 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).

    +
    See Also
    GLM_GTX_euler_angles
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<valType> glm::eulerAngleZY (valType const & angleZ,
    valType const & angleY 
    )
    +
    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).

    +
    See Also
    GLM_GTX_euler_angles
    +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat2x2<T> glm::orientate2 (T const & angle)
    +
    + +

    Creates a 2D 2 * 2 rotation matrix from an euler angle.

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat3x3<T> glm::orientate3 (T const & angle)
    +
    + +

    Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat3x3<T> glm::orientate3 (detail::tvec3< T > const & angles)
    +
    + +

    Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::orientate4 (detail::tvec3< T > const & angles)
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<valType> glm::yawPitchRoll (valType const & yaw,
    valType const & pitch,
    valType const & roll 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    +
    See Also
    GLM_GTX_euler_angles
    + +
    +
    +
    + - diff --git a/doc/api/a00169.html b/doc/api/a00169.html index 92664927..06fee57e 100644 --- a/doc/api/a00169.html +++ b/doc/api/a00169.html @@ -2,130 +2,74 @@ - -GLM_GTX_fast_trigonometry: Fast trigonometric functions + +GLM_GTX_extend + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_fast_trigonometry: Fast trigonometric functions
    -
    +
    GLM_GTX_extend
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - + + +

    +

    Functions

    template<typename T >
    fastAcos (const T &angle)
    template<typename T >
    fastAsin (const T &angle)
    template<typename T >
    fastAtan (const T &y, const T &x)
    template<typename T >
    fastAtan (const T &angle)
    template<typename T >
    fastCos (const T &angle)
    template<typename T >
    fastSin (const T &angle)
    template<typename T >
    fastTan (const T &angle)
    template<typename genType >
    genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
     
    -

    Detailed Description

    -

    Fast but less accurate implementations of trigonometric functions.

    -

    <glm/gtx/fast_trigonometry.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Extend a position from a source to a position at a defined length.

    +

    <glm/gtx/extend.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - - -
    T glm::fastAcos genType glm::extend (const T & angle)
    -
    -
    - -

    Faster than the common acos function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastAsin (const T & angle)
    -
    -
    - -

    Faster than the common asin function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + + + + + + + @@ -133,102 +77,19 @@ Functions
    T glm::fastAtan (const T & y, genType const & Origin,
    const T & x genType const & Source,
    typename genType::value_type const Length 
    -
    -
    +
    -

    Faster than the common atan function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    +

    Extends of Length the Origin position using the (Source - Origin) direction.

    +
    See Also
    GLM_GTX_extend
    - -
    -
    - - - - - - - - -
    T glm::fastAtan (const T & angle)
    -
    -
    - -

    Faster than the common atan function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastCos (const T & angle)
    -
    -
    - -

    Faster than the common cos function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastSin (const T & angle)
    -
    -
    - -

    Faster than the common sin function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastTan (const T & angle)
    -
    -
    - -

    Faster than the common tan function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00170.html b/doc/api/a00170.html index b27f3a5f..2ca9f986 100644 --- a/doc/api/a00170.html +++ b/doc/api/a00170.html @@ -2,86 +2,107 @@ - -GLM_GTX_gradient_paint: Procedural gradient color + +GLM_GTX_extented_min_max + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_gradient_paint: Procedural gradient color
    -
    +
    GLM_GTX_extented_min_max
    +
    GTX Extensions (Experimental)
    - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename valType >
    valType linearGradient (detail::tvec2< valType > const &Point0, detail::tvec2< valType > const &Point1, detail::tvec2< valType > const &Position)
    template<typename valType >
    valType radialGradient (detail::tvec2< valType > const &Center, valType const &Radius, detail::tvec2< valType > const &Focal, detail::tvec2< valType > const &Position)
    template<typename T >
    max (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    max (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z, typename C< T >::value_type const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename T >
    min (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    min (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::value_type const &y, typename C< T >::value_type const &z, typename C< T >::value_type const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    -

    Detailed Description

    -

    Functions that return the color of procedural gradient for specific coordinates.

    -

    <glm/gtx/gradient_paint.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Min and max functions for 3 to 4 parameters.

    +

    <glm/gtx/extented_min_max.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + - - + + - - + + @@ -89,41 +110,34 @@ Functions
    valType glm::linearGradient T glm::max (detail::tvec2< valType > const & Point0, T const & x,
    detail::tvec2< valType > const & Point1, T const & y,
    detail::tvec2< valType > const & Position T const & z 
    -
    -
    +
    -

    Return a color from a linear gradient.

    -
    See also:
    - GLM_GTX_gradient_paint: Procedural gradient color
    +

    Return the maximum component-wise values of 3 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    - +
    - + - - + + - - + + - - - - - - - - + + @@ -131,22 +145,405 @@ Functions
    valType glm::radialGradient C<T> glm::max (detail::tvec2< valType > const & Center, C< T > const & x,
    valType const & Radius, typename C< T >::value_type const & y,
    detail::tvec2< valType > const & Focal,
    detail::tvec2< valType > const & Position typename C< T >::value_type const & z 
    -
    -
    +
    -

    Return a color from a radial gradient.

    -
    See also:
    - GLM_GTX_gradient_paint: Procedural gradient color
    +

    Return the maximum component-wise values of 3 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    C<T> glm::max (C< T > const & x,
    C< T > const & y,
    C< T > const & z 
    )
    +
    + +

    Return the maximum component-wise values of 3 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    T glm::max (T const & x,
    T const & y,
    T const & z,
    T const & w 
    )
    +
    +

    Return the maximum component-wise values of 4 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    C<T> glm::max (C< T > const & x,
    typename C< T >::value_type const & y,
    typename C< T >::value_type const & z,
    typename C< T >::value_type const & w 
    )
    +
    + +

    Return the maximum component-wise values of 4 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    C<T> glm::max (C< T > const & x,
    C< T > const & y,
    C< T > const & z,
    C< T > const & w 
    )
    +
    + +

    Return the maximum component-wise values of 4 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    T glm::min (T const & x,
    T const & y,
    T const & z 
    )
    +
    + +

    Return the minimum component-wise values of 3 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    C<T> glm::min (C< T > const & x,
    typename C< T >::value_type const & y,
    typename C< T >::value_type const & z 
    )
    +
    + +

    Return the minimum component-wise values of 3 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    C<T> glm::min (C< T > const & x,
    C< T > const & y,
    C< T > const & z 
    )
    +
    + +

    Return the minimum component-wise values of 3 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    T glm::min (T const & x,
    T const & y,
    T const & z,
    T const & w 
    )
    +
    + +

    Return the minimum component-wise values of 4 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    C<T> glm::min (C< T > const & x,
    typename C< T >::value_type const & y,
    typename C< T >::value_type const & z,
    typename C< T >::value_type const & w 
    )
    +
    + +

    Return the minimum component-wise values of 4 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    C<T> glm::min (C< T > const & x,
    C< T > const & y,
    C< T > const & z,
    C< T > const & w 
    )
    +
    + +

    Return the minimum component-wise values of 4 inputs.

    +
    See Also
    GLM_GTX_extented_min_max
    + +
    +
    +
    + - diff --git a/doc/api/a00171.html b/doc/api/a00171.html index 511f6fb0..14ebc34e 100644 --- a/doc/api/a00171.html +++ b/doc/api/a00171.html @@ -2,86 +2,181 @@ - -GLM_GTX_handed_coordinate_space: Space Handedness + +GLM_GTX_fast_exponential + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_handed_coordinate_space: Space Handedness
    -
    +
    GLM_GTX_fast_exponential
    +
    GTX Extensions (Experimental)
    - - - - - + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    bool leftHanded (detail::tvec3< T > const &tangent, detail::tvec3< T > const &binormal, detail::tvec3< T > const &normal)
    template<typename T >
    bool rightHanded (detail::tvec3< T > const &tangent, detail::tvec3< T > const &binormal, detail::tvec3< T > const &normal)
    template<typename T >
    fastExp (const T &x)
     
    template<typename T >
    fastExp2 (const T &x)
     
    template<typename T >
    fastLn (const T &x)
     
    template<typename T >
    fastLog (const T &x)
     
    template<typename T >
    fastLog2 (const T &x)
     
    template<typename genType >
    genType fastPow (genType const &x, genType const &y)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT fastPow (genTypeT const &x, genTypeU const &y)
     
    -

    Detailed Description

    -

    To know if a set of three basis vectors defines a right or left-handed coordinate system.

    -

    <glm/gtx/handed_coordinate_system.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Fast but less accurate implementations of exponential based functions.

    +

    <glm/gtx/fast_exponential.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + + + +
    bool glm::leftHanded T glm::fastExp (detail::tvec3< T > const & tangent, const T & x)
    +
    + +

    Faster than the common exp function but less accurate.

    +
    See Also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::fastExp2 (const T & x)
    +
    + +

    Faster than the common exp2 function but less accurate.

    +
    See Also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::fastLn (const T & x)
    +
    + +

    Faster than the common ln function but less accurate.

    +
    See Also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::fastLog (const T & x)
    +
    + +

    Faster than the common log function but less accurate.

    +
    See Also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::fastLog2 (const T & x)
    +
    + +

    Faster than the common log2 function but less accurate.

    +
    See Also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + - - - - - - - - + + @@ -89,35 +184,28 @@ Functions
    genType glm::fastPow (genType const & x,
    detail::tvec3< T > const & binormal,
    detail::tvec3< T > const & normal genType const & y 
    -
    -
    +
    -

    Return if a trihedron left handed or not.

    -

    From GLM_GTX_handed_coordinate_space extension.

    +

    Faster than the common pow function but less accurate.

    +
    See Also
    GLM_GTX_fast_exponential
    - +
    - + - - + + - - - - - - - - + + @@ -125,22 +213,19 @@ Functions
    bool glm::rightHanded genTypeT glm::fastPow (detail::tvec3< T > const & tangent, genTypeT const & x,
    detail::tvec3< T > const & binormal,
    detail::tvec3< T > const & normal genTypeU const & y 
    -
    -
    +
    -

    Return if a trihedron right handed or not.

    -

    From GLM_GTX_handed_coordinate_space extension.

    +

    Faster than the common pow function but less accurate.

    +
    See Also
    GLM_GTX_fast_exponential
    -
    - - + + - diff --git a/doc/api/a00172.html b/doc/api/a00172.html index 55fb0ab6..419ef703 100644 --- a/doc/api/a00172.html +++ b/doc/api/a00172.html @@ -2,92 +2,83 @@ - -GLM_GTX_inertia: Intertial matrix + +GLM_GTX_fast_square_root + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_inertia: Intertial matrix
    -
    +
    GLM_GTX_fast_square_root
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat3x3< T > ballInertia3 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat4x4< T > ballInertia4 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat3x3< T > boxInertia3 (T const &Mass, detail::tvec3< T > const &Scale)
    template<typename T >
    detail::tmat4x4< T > boxInertia4 (T const &Mass, detail::tvec3< T > const &Scale)
    template<typename T >
    detail::tmat3x3< T > diskInertia3 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat4x4< T > diskInertia4 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat3x3< T > sphereInertia3 (T const &Mass, T const &Radius)
    template<typename T >
    detail::tmat4x4< T > sphereInertia4 (T const &Mass, T const &Radius)
    template<typename genType >
    genType::value_type fastDistance (genType const &x, genType const &y)
     
    template<typename genType >
    genType fastInverseSqrt (genType const &x)
     
    template<typename genType >
    genType::value_type fastLength (genType const &x)
     
    template<typename genType >
    genType fastNormalize (genType const &x)
     
    template<typename genType >
    genType fastSqrt (genType const &x)
     
    -

    Detailed Description

    -

    Create inertia matrices.

    -

    <glm/gtx/inertia.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Fast but less accurate implementations of square root based functions.

    + +

    <glm/gtx/fast_square_root.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + - - + + @@ -95,232 +86,95 @@ Functions
    detail::tmat3x3<T> glm::ballInertia3 genType::value_type glm::fastDistance (T const & Mass, genType const & x,
    T const & Radius genType const & y 
    -
    -
    +
    -

    Build an inertia matrix for a ball.

    -

    From GLM_GTX_inertia extension.

    +

    Faster than the common distance function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    - +
    - + - - - - - + + - - - - - - -
    detail::tmat4x4<T> glm::ballInertia4 genType glm::fastInverseSqrt (T const & Mass,
    genType const & x) T const & Radius 
    )
    -
    -
    +
    -

    Build an inertia matrix for a ball.

    -

    From GLM_GTX_inertia extension.

    +

    Faster than the common inversesqrt function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    - +
    - + - - - - - + + - - - - - - -
    detail::tmat3x3<T> glm::boxInertia3 genType::value_type glm::fastLength (T const & Mass,
    genType const & x) detail::tvec3< T > const & Scale 
    )
    -
    -
    +
    -

    Build an inertia matrix for a box.

    -

    From GLM_GTX_inertia extension.

    +

    Faster than the common length function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    - +
    - + - - - - - + + - - - - - - -
    detail::tmat4x4<T> glm::boxInertia4 genType glm::fastNormalize (T const & Mass,
    genType const & x) detail::tvec3< T > const & Scale 
    )
    -
    -
    +
    -

    Build an inertia matrix for a box.

    -

    From GLM_GTX_inertia extension.

    +

    Faster than the common normalize function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    - +
    - + - - - - - + + - - - - - - -
    detail::tmat3x3<T> glm::diskInertia3 genType glm::fastSqrt (T const & Mass,
    genType const & x) T const & Radius 
    )
    -
    -
    +
    -

    Build an inertia matrix for a disk.

    -

    From GLM_GTX_inertia extension.

    +

    Faster than the common sqrt function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::diskInertia4 (T const & Mass,
    T const & Radius 
    )
    -
    -
    - -

    Build an inertia matrix for a disk.

    -

    From GLM_GTX_inertia extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat3x3<T> glm::sphereInertia3 (T const & Mass,
    T const & Radius 
    )
    -
    -
    - -

    Build an inertia matrix for a sphere.

    -

    From GLM_GTX_inertia extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::sphereInertia4 (T const & Mass,
    T const & Radius 
    )
    -
    -
    - -

    Build an inertia matrix for a sphere.

    -

    From GLM_GTX_inertia extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00173.html b/doc/api/a00173.html index 3edfc20a..462aa36e 100644 --- a/doc/api/a00173.html +++ b/doc/api/a00173.html @@ -2,91 +2,220 @@ - -GLM_GTX_int_10_10_10_2: Packed integer + +GLM_GTX_fast_trigonometry + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_int_10_10_10_2: Packed integer
    -
    +
    GLM_GTX_fast_trigonometry
    +
    GTX Extensions (Experimental)
    - - + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    dword uint10_10_10_2_cast (glm::vec4 const &v)
    template<typename T >
    fastAcos (const T &angle)
     
    template<typename T >
    fastAsin (const T &angle)
     
    template<typename T >
    fastAtan (const T &y, const T &x)
     
    template<typename T >
    fastAtan (const T &angle)
     
    template<typename T >
    fastCos (const T &angle)
     
    template<typename T >
    fastSin (const T &angle)
     
    template<typename T >
    fastTan (const T &angle)
     
    -

    Detailed Description

    -

    Pack vector to 1010102 integers.

    -

    Storage only.

    -

    <glm/gtx/int_10_10_10_2.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Fast but less accurate implementations of trigonometric functions.

    +

    <glm/gtx/fast_trigonometry.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + +
    dword glm::uint10_10_10_2_cast T glm::fastAcos (glm::vec4 const & v)const T & angle)
    -
    -
    +
    -

    From GLM_GTX_int_10_10_10_2 extension.

    -

    Cast a vec4 to an u_10_10_10_2.

    +

    Faster than the common acos function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    + +
    +
    + + + + + + + + +
    T glm::fastAsin (const T & angle)
    +
    + +

    Faster than the common asin function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    T glm::fastAtan (const T & y,
    const T & x 
    )
    +
    +

    Faster than the common atan function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    +
    +
    + +
    +
    + + + + + + + + +
    T glm::fastAtan (const T & angle)
    +
    + +

    Faster than the common atan function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::fastCos (const T & angle)
    +
    + +

    Faster than the common cos function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::fastSin (const T & angle)
    +
    + +

    Faster than the common sin function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::fastTan (const T & angle)
    +
    + +

    Faster than the common tan function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    + +
    +
    +
    + - diff --git a/doc/api/a00174.html b/doc/api/a00174.html index 2eb6ac97..e050ce3c 100644 --- a/doc/api/a00174.html +++ b/doc/api/a00174.html @@ -2,170 +2,77 @@ - -GLM_GTX_integer: Extended integer functions + +GLM_GTX_gradient_paint + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_integer: Extended integer functions
    -
    +
    GLM_GTX_gradient_paint
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - + + + + + +

    -Typedefs

    typedef signed int sint

    +

    Functions

    template<typename genType >
    genType factorial (genType const &x)
    unsigned int floor_log2 (unsigned int x)
    template<typename genIUType >
    genIUType log2 (genIUType const &x)
    int mod (int x, int y)
    uint mod (uint x, uint y)
    uint nlz (uint x)
    int pow (int x, int y)
    uint pow (uint x, uint y)
    int sqrt (int x)
    uint sqrt (uint x)
    template<typename valType >
    valType linearGradient (detail::tvec2< valType > const &Point0, detail::tvec2< valType > const &Point1, detail::tvec2< valType > const &Position)
     
    template<typename valType >
    valType radialGradient (detail::tvec2< valType > const &Center, valType const &Radius, detail::tvec2< valType > const &Focal, detail::tvec2< valType > const &Position)
     
    -

    Detailed Description

    -

    Add support for integer for core functions.

    -

    <glm/gtx/integer.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    Detailed Description

    +

    Functions that return the color of procedural gradient for specific coordinates.

    +

    <glm/gtx/gradient_paint.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - - -
    typedef signed int sint
    -
    -
    - -

    32bit signed integer.

    -

    From GLM_GTX_integer extension.

    - -

    Definition at line 81 of file integer.hpp.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - + - - - - -
    genType glm::factorial valType glm::linearGradient (genType const & x)
    -
    -
    - -

    Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned int glm::floor_log2 (unsigned int x)
    -
    -
    - -

    Returns the floor log2 of x.

    -

    From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genIUType glm::log2 (genIUType const & x)
    -
    -
    - -

    Returns the log2 of x.

    -

    Can be reliably using to compute mipmap count from the texture size. From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + + + + + + + @@ -173,29 +80,40 @@ Functions
    int glm::mod (int x, detail::tvec2< valType > const & Point0,
    int y detail::tvec2< valType > const & Point1,
    detail::tvec2< valType > const & Position 
    -
    -
    +
    -

    Modulus.

    -

    Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

    +

    Return a color from a linear gradient.

    +
    See Also
    - GLM_GTX_gradient_paint
    - +
    - + - - + + - - + + + + + + + + + + + + + + @@ -203,142 +121,19 @@ Functions
    uint glm::mod valType glm::radialGradient (uint x, detail::tvec2< valType > const & Center,
    uint y valType const & Radius,
    detail::tvec2< valType > const & Focal,
    detail::tvec2< valType > const & Position 
    -
    -
    +
    -

    Modulus.

    -

    Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

    +

    Return a color from a radial gradient.

    +
    See Also
    - GLM_GTX_gradient_paint
    - -
    -
    - - - - - - - - -
    uint glm::nlz (uint x)
    -
    -
    - -

    Returns the number of leading zeros.

    -

    From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    int glm::pow (int x,
    int y 
    )
    -
    -
    - -

    Returns x raised to the y power.

    -

    From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    uint glm::pow (uint x,
    uint y 
    )
    -
    -
    - -

    Returns x raised to the y power.

    -

    From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    int glm::sqrt (int x)
    -
    -
    - -

    Returns the positive square root of x.

    -

    From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    uint glm::sqrt (uint x)
    -
    -
    - -

    Returns the positive square root of x.

    -

    From GLM_GTX_integer extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00175.html b/doc/api/a00175.html index afc24682..a875db93 100644 --- a/doc/api/a00175.html +++ b/doc/api/a00175.html @@ -2,107 +2,76 @@ - -GLM_GTX_intersect: Intersection tests + +GLM_GTX_handed_coordinate_space + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_intersect: Intersection tests
    -
    +
    GLM_GTX_handed_coordinate_space
    +
    GTX Extensions (Experimental)
    - - - - - - - - - + + + + + +

    +

    Functions

    template<typename genType >
    bool intersectLineSphere (genType const &point0, genType const &point1, genType const &center, typename genType::value_type radius, genType &position, genType &normal)
    template<typename genType >
    bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
    template<typename genType >
    bool intersectRaySphere (genType const &orig, genType const &dir, genType const &center, typename genType::value_type radius, genType &position, genType &normal)
    template<typename genType >
    bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
    template<typename T >
    bool leftHanded (detail::tvec3< T > const &tangent, detail::tvec3< T > const &binormal, detail::tvec3< T > const &normal)
     
    template<typename T >
    bool rightHanded (detail::tvec3< T > const &tangent, detail::tvec3< T > const &binormal, detail::tvec3< T > const &normal)
     
    -

    Detailed Description

    -

    Add intersection functions.

    -

    <glm/gtx/intersect.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    To know if a set of three basis vectors defines a right or left-handed coordinate system.

    +

    <glm/gtx/handed_coordinate_system.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + - - + + - - - - - - - - - - - - - - - - - - - + @@ -111,106 +80,33 @@ Functions
    bool glm::intersectLineSphere bool glm::leftHanded (genType const & point0, detail::tvec3< T > const & tangent,
    genType const & point1, detail::tvec3< T > const & binormal,
    genType const & center,
    typename genType::value_type radius,
    genType & position,
    genType & detail::tvec3< T > const &  normal 
    -
    -
    +
    -

    Compute the intersection of a line and a sphere.

    -

    From GLM_GTX_intersect extension

    +

    Return if a trihedron left handed or not.

    +

    From GLM_GTX_handed_coordinate_space extension.

    - +
    - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::intersectLineTriangle bool glm::rightHanded (genType const & orig, detail::tvec3< T > const & tangent,
    genType const & dir, detail::tvec3< T > const & binormal,
    genType const & vert0,
    genType const & vert1,
    genType const & vert2,
    genType & position 
    )
    -
    -
    - -

    Compute the intersection of a line and a triangle.

    -

    From GLM_GTX_intersect extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -219,76 +115,19 @@ Functions
    bool glm::intersectRaySphere (genType const & orig,
    genType const & dir,
    genType const & center,
    typename genType::value_type radius,
    genType & position,
    genType & detail::tvec3< T > const &  normal 
    -
    -
    +
    -

    Compute the intersection of a ray and a sphere.

    -

    From GLM_GTX_intersect extension.

    +

    Return if a trihedron right handed or not.

    +

    From GLM_GTX_handed_coordinate_space extension.

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::intersectRayTriangle (genType const & orig,
    genType const & dir,
    genType const & vert0,
    genType const & vert1,
    genType const & vert2,
    genType & baryPosition 
    )
    -
    -
    - -

    Compute the intersection of a ray and a triangle.

    -

    From GLM_GTX_intersect extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00176.html b/doc/api/a00176.html index aff43cf9..9488fe6e 100644 --- a/doc/api/a00176.html +++ b/doc/api/a00176.html @@ -2,79 +2,89 @@ - -GLM_GTX_log_base: Log with base + +GLM_GTX_inertia + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_log_base: Log with base
    -
    +
    GLM_GTX_inertia
    +
    GTX Extensions (Experimental)
    - - - + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType log (genType const &x, genType const &base)
    template<typename T >
    detail::tmat3x3< T > ballInertia3 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat4x4< T > ballInertia4 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat3x3< T > boxInertia3 (T const &Mass, detail::tvec3< T > const &Scale)
     
    template<typename T >
    detail::tmat4x4< T > boxInertia4 (T const &Mass, detail::tvec3< T > const &Scale)
     
    template<typename T >
    detail::tmat3x3< T > diskInertia3 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat4x4< T > diskInertia4 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat3x3< T > sphereInertia3 (T const &Mass, T const &Radius)
     
    template<typename T >
    detail::tmat4x4< T > sphereInertia4 (T const &Mass, T const &Radius)
     
    -

    Detailed Description

    -

    Logarithm for any base.

    -

    base can be a vector or a scalar.

    -

    <glm/gtx/log_base.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Create inertia matrices.

    +

    <glm/gtx/inertia.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + - - + + @@ -82,22 +92,222 @@ Functions
    genType glm::log detail::tmat3x3<T> glm::ballInertia3 (genType const & x, T const & Mass,
    genType const & base T const & Radius 
    -
    -
    +
    -

    Logarithm for any base.

    -

    From GLM_GTX_log_base.

    +

    Build an inertia matrix for a ball.

    +

    From GLM_GTX_inertia extension.

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::ballInertia4 (T const & Mass,
    T const & Radius 
    )
    +
    + +

    Build an inertia matrix for a ball.

    +

    From GLM_GTX_inertia extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat3x3<T> glm::boxInertia3 (T const & Mass,
    detail::tvec3< T > const & Scale 
    )
    +
    +

    Build an inertia matrix for a box.

    +

    From GLM_GTX_inertia extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::boxInertia4 (T const & Mass,
    detail::tvec3< T > const & Scale 
    )
    +
    + +

    Build an inertia matrix for a box.

    +

    From GLM_GTX_inertia extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat3x3<T> glm::diskInertia3 (T const & Mass,
    T const & Radius 
    )
    +
    + +

    Build an inertia matrix for a disk.

    +

    From GLM_GTX_inertia extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::diskInertia4 (T const & Mass,
    T const & Radius 
    )
    +
    + +

    Build an inertia matrix for a disk.

    +

    From GLM_GTX_inertia extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat3x3<T> glm::sphereInertia3 (T const & Mass,
    T const & Radius 
    )
    +
    + +

    Build an inertia matrix for a sphere.

    +

    From GLM_GTX_inertia extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::sphereInertia4 (T const & Mass,
    T const & Radius 
    )
    +
    + +

    Build an inertia matrix for a sphere.

    +

    From GLM_GTX_inertia extension.

    + +
    +
    +
    + - diff --git a/doc/api/a00177.html b/doc/api/a00177.html index 644ccc0c..21518174 100644 --- a/doc/api/a00177.html +++ b/doc/api/a00177.html @@ -2,113 +2,78 @@ - -GLM_GTX_matrix_cross_product: Cross product matrix form + +GLM_GTX_int_10_10_10_2 + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_matrix_cross_product: Cross product matrix form
    -
    +
    GLM_GTX_int_10_10_10_2
    +
    GTX Extensions (Experimental)
    - - - - - + +

    +

    Functions

    template<typename T >
    detail::tmat3x3< T > matrixCross3 (detail::tvec3< T > const &x)
    template<typename T >
    detail::tmat4x4< T > matrixCross4 (detail::tvec3< T > const &x)
    dword uint10_10_10_2_cast (glm::vec4 const &v)
     
    -

    Detailed Description

    -

    Build cross product matrices.

    -

    <glm/gtx/matrix_cross_product.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Pack vector to 1010102 integers.

    +

    Storage only.

    +

    <glm/gtx/int_10_10_10_2.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + +
    detail::tmat3x3<T> glm::matrixCross3 dword glm::uint10_10_10_2_cast (detail::tvec3< T > const & x)glm::vec4 const & v)
    -
    -
    +
    -

    Build a cross product matrix.

    -

    From GLM_GTX_matrix_cross_product extension.

    +

    From GLM_GTX_int_10_10_10_2 extension.

    +

    Cast a vec4 to an u_10_10_10_2.

    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T> glm::matrixCross4 (detail::tvec3< T > const & x)
    -
    -
    - -

    Build a cross product matrix.

    -

    From GLM_GTX_matrix_cross_product extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00178.html b/doc/api/a00178.html index 4f3ebd1a..cb055567 100644 --- a/doc/api/a00178.html +++ b/doc/api/a00178.html @@ -2,88 +2,167 @@ - -GLM_GTX_matrix_interpolation: Rotation and translation matrix interpolation + +GLM_GTX_integer + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_matrix_interpolation: Rotation and translation matrix interpolation
    -
    +
    GLM_GTX_integer
    +
    GTX Extensions (Experimental)
    - + + +

    +

    +Typedefs

    typedef signed int sint
     
    + - - - - - - + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    void axisAngle (detail::tmat4x4< T > const &mat, detail::tvec3< T > &axis, T &angle)
    template<typename T >
    detail::tmat4x4< T > axisAngleMatrix (detail::tvec3< T > const &axis, T const angle)
    template<typename T >
    detail::tmat4x4< T > interpolate (detail::tmat4x4< T > const &m1, detail::tmat4x4< T > const &m2, T const delta)
    template<typename genType >
    genType factorial (genType const &x)
     
    unsigned int floor_log2 (unsigned int x)
     
    template<typename genIUType >
    genIUType log2 (genIUType const &x)
     
    int mod (int x, int y)
     
    uint mod (uint x, uint y)
     
    uint nlz (uint x)
     
    int pow (int x, int y)
     
    uint pow (uint x, uint y)
     
    int sqrt (int x)
     
    uint sqrt (uint x)
     
    -

    Detailed Description

    -

    Allows to directly interpolate two exiciting matrices.

    -

    <glm/gtx/matrix_interpolation.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Add support for integer for core functions.

    +

    <glm/gtx/integer.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - + + +
    void glm::axisAngle typedef signed int sint
    +
    + +

    32bit signed integer.

    +

    From GLM_GTX_integer extension.

    + +

    Definition at line 81 of file integer.hpp.

    + +
    +
    +

    Function Documentation

    + +
    +
    + + + - - + + + + +
    genType glm::factorial (detail::tmat4x4< T > const & mat, genType const & x)
    +
    + +

    Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    unsigned int glm::floor_log2 (unsigned int x)
    +
    + +

    Returns the floor log2 of x.

    +

    From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    genIUType glm::log2 (genIUType const & x)
    +
    + +

    Returns the log2 of x.

    +

    Can be reliably using to compute mipmap count from the texture size. From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + - - - - - - - - + + @@ -91,29 +170,28 @@ Functions
    int glm::mod (int x,
    detail::tvec3< T > & axis,
    T & angle int y 
    -
    -
    +
    -

    Get the axis and angle of the rotation from a matrix.

    -

    From GLM_GTX_matrix_interpolation extension.

    +

    Modulus.

    +

    Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

    - +
    - + - - + + - - + + @@ -121,35 +199,47 @@ Functions
    detail::tmat4x4<T> glm::axisAngleMatrix uint glm::mod (detail::tvec3< T > const & axis, uint x,
    T const angle uint y 
    -
    -
    +
    -

    Build a matrix from axis and angle.

    -

    From GLM_GTX_matrix_interpolation extension.

    +

    Modulus.

    +

    Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

    - +
    - + - - + + + + +
    detail::tmat4x4<T> glm::interpolate uint glm::nlz (detail::tmat4x4< T > const & m1, uint x)
    +
    + +

    Returns the number of leading zeros.

    +

    From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + - - - - - - - - + + @@ -157,22 +247,86 @@ Functions
    int glm::pow (int x,
    detail::tmat4x4< T > const & m2,
    T const delta int y 
    -
    -
    +
    -

    Build a interpolation of 4 * 4 matrixes.

    -

    From GLM_GTX_matrix_interpolation extension. Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results.

    +

    Returns x raised to the y power.

    +

    From GLM_GTX_integer extension.

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    uint glm::pow (uint x,
    uint y 
    )
    +
    + +

    Returns x raised to the y power.

    +

    From GLM_GTX_integer extension.

    +
    +
    + +
    +
    + + + + + + + + +
    int glm::sqrt (int x)
    +
    +

    Returns the positive square root of x.

    +

    From GLM_GTX_integer extension.

    +
    +
    + +
    +
    + + + + + + + + +
    uint glm::sqrt (uint x)
    +
    + +

    Returns the positive square root of x.

    +

    From GLM_GTX_integer extension.

    + +
    +
    +
    + - diff --git a/doc/api/a00179.html b/doc/api/a00179.html index e7da6aab..78f8ee24 100644 --- a/doc/api/a00179.html +++ b/doc/api/a00179.html @@ -2,100 +2,116 @@ - -GLM_GTX_matrix_major_storage: Build matrix + +GLM_GTX_intersect + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_matrix_major_storage: Build matrix
    -
    +
    GLM_GTX_intersect
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat2x2< T > colMajor2 (detail::tvec2< T > const &v1, detail::tvec2< T > const &v2)
    template<typename T >
    detail::tmat2x2< T > colMajor2 (detail::tmat2x2< T > const &m)
    template<typename T >
    detail::tmat3x3< T > colMajor3 (detail::tvec3< T > const &v1, detail::tvec3< T > const &v2, detail::tvec3< T > const &v3)
    template<typename T >
    detail::tmat3x3< T > colMajor3 (detail::tmat3x3< T > const &m)
    template<typename T >
    detail::tmat4x4< T > colMajor4 (detail::tvec4< T > const &v1, detail::tvec4< T > const &v2, detail::tvec4< T > const &v3, detail::tvec4< T > const &v4)
    template<typename T >
    detail::tmat4x4< T > colMajor4 (detail::tmat4x4< T > const &m)
    template<typename T >
    detail::tmat2x2< T > rowMajor2 (detail::tvec2< T > const &v1, detail::tvec2< T > const &v2)
    template<typename T >
    detail::tmat2x2< T > rowMajor2 (detail::tmat2x2< T > const &m)
    template<typename T >
    detail::tmat3x3< T > rowMajor3 (detail::tvec3< T > const &v1, detail::tvec3< T > const &v2, detail::tvec3< T > const &v3)
    template<typename T >
    detail::tmat3x3< T > rowMajor3 (detail::tmat3x3< T > const &m)
    template<typename T >
    detail::tmat4x4< T > rowMajor4 (detail::tvec4< T > const &v1, detail::tvec4< T > const &v2, detail::tvec4< T > const &v3, detail::tvec4< T > const &v4)
    template<typename T >
    detail::tmat4x4< T > rowMajor4 (detail::tmat4x4< T > const &m)
    template<typename genType >
    bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
     
    template<typename genType >
    bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadiusSquered, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
     
    template<typename genType >
    bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
     
    -

    Detailed Description

    -

    Build matrices with specific matrix order, row or column.

    -

    <glm/gtx/matrix_major_storage.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Add intersection functions.

    +

    <glm/gtx/intersect.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -103,55 +119,52 @@ Functions
    detail::tmat2x2<T> glm::colMajor2 bool glm::intersectLineSphere (detail::tvec2< T > const & v1, genType const & point0,
    detail::tvec2< T > const & v2 genType const & point1,
    genType const & sphereCenter,
    typename genType::value_type sphereRadius,
    genType & intersectionPosition1,
    genType & intersectionNormal1,
    genType & intersectionPosition2 = genType(),
    genType & intersectionNormal2 = genType() 
    -
    -
    +
    -

    Build a column major matrix from column vectors.

    -

    From GLM_GTX_matrix_major_storage extension.

    +

    Compute the intersection of a line and a sphere.

    +

    From GLM_GTX_intersect extension

    - +
    - + - - - - -
    detail::tmat2x2<T> glm::colMajor2 bool glm::intersectLineTriangle (detail::tmat2x2< T > const & m)
    -
    -
    - -

    Build a column major matrix from other matrix.

    -

    From GLM_GTX_matrix_major_storage extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -159,61 +172,46 @@ Functions
    detail::tmat3x3<T> glm::colMajor3 (detail::tvec3< T > const & v1, genType const & orig,
    detail::tvec3< T > const & v2, genType const & dir,
    detail::tvec3< T > const & v3 genType const & vert0,
    genType const & vert1,
    genType const & vert2,
    genType & position 
    -
    -
    +
    -

    Build a column major matrix from column vectors.

    -

    From GLM_GTX_matrix_major_storage extension.

    +

    Compute the intersection of a line and a triangle.

    +

    From GLM_GTX_intersect extension.

    - +
    - + - - - - -
    detail::tmat3x3<T> glm::colMajor3 bool glm::intersectRaySphere (detail::tmat3x3< T > const & m)
    -
    -
    - -

    Build a column major matrix from other matrix.

    -

    From GLM_GTX_matrix_major_storage extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + - - + + - - + + + + + + + + @@ -221,49 +219,52 @@ Functions
    detail::tmat4x4<T> glm::colMajor4 (detail::tvec4< T > const & v1, genType const & rayStarting,
    detail::tvec4< T > const & v2, genType const & rayNormalizedDirection,
    detail::tvec4< T > const & v3, genType const & sphereCenter,
    detail::tvec4< T > const & v4 const typename genType::value_type sphereRadiusSquered,
    typename genType::value_type & intersectionDistance 
    -
    -
    +
    -

    Build a column major matrix from column vectors.

    -

    From GLM_GTX_matrix_major_storage extension.

    +

    Compute the intersection distance of a ray and a sphere.

    +

    The ray direction vector is unit length. From GLM_GTX_intersect extension.

    - +
    - + - - - - -
    detail::tmat4x4<T> glm::colMajor4 bool glm::intersectRaySphere (detail::tmat4x4< T > const & m)
    -
    -
    - -

    Build a column major matrix from other matrix.

    -

    From GLM_GTX_matrix_major_storage extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -271,55 +272,52 @@ Functions
    detail::tmat2x2<T> glm::rowMajor2 (detail::tvec2< T > const & v1, genType const & rayStarting,
    detail::tvec2< T > const & v2 genType const & rayNormalizedDirection,
    genType const & sphereCenter,
    const typename genType::value_type sphereRadius,
    genType & intersectionPosition,
    genType & intersectionNormal 
    -
    -
    +
    -

    Build a row major matrix from row vectors.

    -

    From GLM_GTX_matrix_major_storage extension.

    +

    Compute the intersection of a ray and a sphere.

    +

    From GLM_GTX_intersect extension.

    - +
    - + - - - - -
    detail::tmat2x2<T> glm::rowMajor2 bool glm::intersectRayTriangle (detail::tmat2x2< T > const & m)
    -
    -
    - -

    Build a row major matrix from other matrix.

    -

    From GLM_GTX_matrix_major_storage extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -327,104 +325,19 @@ Functions
    detail::tmat3x3<T> glm::rowMajor3 (detail::tvec3< T > const & v1, genType const & orig,
    detail::tvec3< T > const & v2, genType const & dir,
    detail::tvec3< T > const & v3 genType const & vert0,
    genType const & vert1,
    genType const & vert2,
    genType & baryPosition 
    -
    -
    +
    -

    Build a row major matrix from row vectors.

    -

    From GLM_GTX_matrix_major_storage extension.

    +

    Compute the intersection of a ray and a triangle.

    +

    From GLM_GTX_intersect extension.

    - -
    -
    - - - - - - - - -
    detail::tmat3x3<T> glm::rowMajor3 (detail::tmat3x3< T > const & m)
    -
    -
    - -

    Build a row major matrix from other matrix.

    -

    From GLM_GTX_matrix_major_storage extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::rowMajor4 (detail::tvec4< T > const & v1,
    detail::tvec4< T > const & v2,
    detail::tvec4< T > const & v3,
    detail::tvec4< T > const & v4 
    )
    -
    -
    - -

    Build a row major matrix from row vectors.

    -

    From GLM_GTX_matrix_major_storage extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T> glm::rowMajor4 (detail::tmat4x4< T > const & m)
    -
    -
    - -

    Build a row major matrix from other matrix.

    -

    From GLM_GTX_matrix_major_storage extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00180.html b/doc/api/a00180.html index 25788181..a1928d14 100644 --- a/doc/api/a00180.html +++ b/doc/api/a00180.html @@ -2,267 +2,89 @@ - -GLM_GTX_matrix_operation: Extended matrix operations + +GLM_GTX_log_base + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_matrix_operation: Extended matrix operations
    -
    +
    GLM_GTX_log_base
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - + + +

    +

    Functions

    template<typename valType >
    detail::tmat2x2< valType > diagonal2x2 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat2x3< valType > diagonal2x3 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat2x4< valType > diagonal2x4 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat3x2< valType > diagonal3x2 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat3x3< valType > diagonal3x3 (detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tmat3x4< valType > diagonal3x4 (detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tmat4x2< valType > diagonal4x2 (detail::tvec2< valType > const &v)
    template<typename valType >
    detail::tmat4x3< valType > diagonal4x3 (detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tmat4x4< valType > diagonal4x4 (detail::tvec4< valType > const &v)
    template<typename genType >
    genType log (genType const &x, genType const &base)
     
    -

    Detailed Description

    -

    Build diagonal matrices from vectors.

    -

    <glm/gtx/matrix_operation.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Logarithm for any base.

    +

    base can be a vector or a scalar.

    +

    <glm/gtx/log_base.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - + + -
    detail::tmat2x2<valType> glm::diagonal2x2 genType glm::log (detail::tvec2< valType > const & v)genType const & x,
    -
    -
    - -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    - -
    -
    - -
    -
    - - - - - + + + -
    detail::tmat2x3<valType> glm::diagonal2x3 (detail::tvec2< valType > const & v) genType const & base 
    -
    -
    - -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    - -
    -
    - -
    -
    - - - - - + +
    detail::tmat2x4<valType> glm::diagonal2x4 (detail::tvec2< valType > const & v) )
    -
    -
    +
    -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    +

    Logarithm for any base.

    +

    From GLM_GTX_log_base.

    - -
    -
    - - - - - - - - -
    detail::tmat3x2<valType> glm::diagonal3x2 (detail::tvec2< valType > const & v)
    -
    -
    - -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<valType> glm::diagonal3x3 (detail::tvec3< valType > const & v)
    -
    -
    - -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x4<valType> glm::diagonal3x4 (detail::tvec3< valType > const & v)
    -
    -
    - -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x2<valType> glm::diagonal4x2 (detail::tvec2< valType > const & v)
    -
    -
    - -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x3<valType> glm::diagonal4x3 (detail::tvec3< valType > const & v)
    -
    -
    - -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<valType> glm::diagonal4x4 (detail::tvec4< valType > const & v)
    -
    -
    - -

    Build a diagonal matrix.

    -

    From GLM_GTX_matrix_operation extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00181.html b/doc/api/a00181.html index 266c0eea..c7d67334 100644 --- a/doc/api/a00181.html +++ b/doc/api/a00181.html @@ -2,325 +2,100 @@ - -GLM_GTX_matrix_query: Query matrix properties + +GLM_GTX_matrix_cross_product + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_matrix_query: Query matrix properties
    -
    +
    GLM_GTX_matrix_cross_product
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - + + + + + +

    +

    Functions

    template<typename genType >
    bool isIdentity (genType const &m, typename genType::value_type const &epsilon)
    template<typename valType >
    bool isNormalized (detail::tmat2x2< valType > const &m, valType const &epsilon)
    template<typename valType >
    bool isNormalized (detail::tmat3x3< valType > const &m, valType const &epsilon)
    template<typename valType >
    bool isNormalized (detail::tmat4x4< valType > const &m, valType const &epsilon)
    template<typename T >
    bool isNull (detail::tmat2x2< T > const &m, T const &epsilon)
    template<typename T >
    bool isNull (detail::tmat3x3< T > const &m, T const &epsilon)
    template<typename T >
    bool isNull (detail::tmat4x4< T > const &m, T const &epsilon)
    template<typename valType , template< typename > class matType>
    bool isOrthogonal (matType< valType > const &m, valType const &epsilon)
    template<typename T >
    detail::tmat3x3< T > matrixCross3 (detail::tvec3< T > const &x)
     
    template<typename T >
    detail::tmat4x4< T > matrixCross4 (detail::tvec3< T > const &x)
     
    -

    Detailed Description

    -

    Query to evaluate matrix properties.

    -

    <glm/gtx/matrix_query.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Build cross product matrices.

    +

    <glm/gtx/matrix_cross_product.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - - - + + - - - - - - -
    bool glm::isIdentity detail::tmat3x3<T> glm::matrixCross3 (genType const & m,
    detail::tvec3< T > const & x) typename genType::value_type const & epsilon 
    )
    -
    -
    +
    -

    Return whether a matrix is an identity matrix.

    -

    From GLM_GTX_matrix_query extension.

    +

    Build a cross product matrix.

    +

    From GLM_GTX_matrix_cross_product extension.

    - +
    - + - - - - - + + - - - - - - -
    bool glm::isNormalized detail::tmat4x4<T> glm::matrixCross4 (detail::tmat2x2< valType > const & m,
    detail::tvec3< T > const & x) valType const & epsilon 
    )
    -
    -
    +
    -

    Return whether a matrix is a normalized matrix.

    -

    From GLM_GTX_matrix_query extension.

    +

    Build a cross product matrix.

    +

    From GLM_GTX_matrix_cross_product extension.

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool glm::isNormalized (detail::tmat3x3< valType > const & m,
    valType const & epsilon 
    )
    -
    -
    - -

    Return whether a matrix is a normalized matrix.

    -

    From GLM_GTX_matrix_query extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool glm::isNormalized (detail::tmat4x4< valType > const & m,
    valType const & epsilon 
    )
    -
    -
    - -

    Return whether a matrix is a normalized matrix.

    -

    From GLM_GTX_matrix_query extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool glm::isNull (detail::tmat2x2< T > const & m,
    T const & epsilon 
    )
    -
    -
    - -

    Return whether a matrix a null matrix.

    -

    From GLM_GTX_matrix_query extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool glm::isNull (detail::tmat3x3< T > const & m,
    T const & epsilon 
    )
    -
    -
    - -

    Return whether a matrix a null matrix.

    -

    From GLM_GTX_matrix_query extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool glm::isNull (detail::tmat4x4< T > const & m,
    T const & epsilon 
    )
    -
    -
    - -

    Return whether a matrix is a null matrix.

    -

    From GLM_GTX_matrix_query extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool glm::isOrthogonal (matType< valType > const & m,
    valType const & epsilon 
    )
    -
    -
    - -

    Return whether a matrix is an orthonormalized matrix.

    -

    From GLM_GTX_matrix_query extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00182.html b/doc/api/a00182.html index 5c1a2bd4..378f64dc 100644 --- a/doc/api/a00182.html +++ b/doc/api/a00182.html @@ -2,71 +2,186 @@ - -GLM_GTX_mixed_producte: Mixed product + +GLM_GTX_matrix_interpolation + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_mixed_producte: Mixed product
    -
    +
    GLM_GTX_matrix_interpolation
    +
    GTX Extensions (Experimental)
    - - - + + + + + + + + + + + +

    +

    Functions

    -template<typename valType >
    valType mixedProduct (detail::tvec3< valType > const &v1, detail::tvec3< valType > const &v2, detail::tvec3< valType > const &v3)
    template<typename T >
    void axisAngle (detail::tmat4x4< T > const &mat, detail::tvec3< T > &axis, T &angle)
     
    template<typename T >
    detail::tmat4x4< T > axisAngleMatrix (detail::tvec3< T > const &axis, T const angle)
     
    template<typename T >
    detail::tmat4x4< T > extractMatrixRotation (detail::tmat4x4< T > const &mat)
     
    template<typename T >
    detail::tmat4x4< T > interpolate (detail::tmat4x4< T > const &m1, detail::tmat4x4< T > const &m2, T const delta)
     
    -

    Detailed Description

    -

    Mixed product of 3 vectors.

    -

    <glm/gtx/mixed_product.hpp> need to be included to use these functionalities.

    +

    Detailed Description

    +

    Allows to directly interpolate two exiciting matrices.

    +

    <glm/gtx/matrix_interpolation.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glm::axisAngle (detail::tmat4x4< T > const & mat,
    detail::tvec3< T > & axis,
    T & angle 
    )
    +
    + +

    Get the axis and angle of the rotation from a matrix.

    +

    From GLM_GTX_matrix_interpolation extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::axisAngleMatrix (detail::tvec3< T > const & axis,
    T const angle 
    )
    +
    +

    Build a matrix from axis and angle.

    +

    From GLM_GTX_matrix_interpolation extension.

    +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::extractMatrixRotation (detail::tmat4x4< T > const & mat)
    +
    + +

    Extracts the rotation part of a matrix.

    +

    From GLM_GTX_matrix_interpolation extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::interpolate (detail::tmat4x4< T > const & m1,
    detail::tmat4x4< T > const & m2,
    T const delta 
    )
    +
    + +

    Build a interpolation of 4 * 4 matrixes.

    +

    From GLM_GTX_matrix_interpolation extension. Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results.

    + +
    +
    +
    + - diff --git a/doc/api/a00183.html b/doc/api/a00183.html index bb00f9d4..76a22035 100644 --- a/doc/api/a00183.html +++ b/doc/api/a00183.html @@ -2,80 +2,101 @@ - -GLM_GTX_multiple: Multiples + +GLM_GTX_matrix_major_storage + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_multiple: Multiples
    -
    +
    GLM_GTX_matrix_major_storage
    +
    GTX Extensions (Experimental)
    - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType higherMultiple (genType const &Source, genType const &Multiple)
    template<typename genType >
    genType lowerMultiple (genType const &Source, genType const &Multiple)
    template<typename T >
    detail::tmat2x2< T > colMajor2 (detail::tvec2< T > const &v1, detail::tvec2< T > const &v2)
     
    template<typename T >
    detail::tmat2x2< T > colMajor2 (detail::tmat2x2< T > const &m)
     
    template<typename T >
    detail::tmat3x3< T > colMajor3 (detail::tvec3< T > const &v1, detail::tvec3< T > const &v2, detail::tvec3< T > const &v3)
     
    template<typename T >
    detail::tmat3x3< T > colMajor3 (detail::tmat3x3< T > const &m)
     
    template<typename T >
    detail::tmat4x4< T > colMajor4 (detail::tvec4< T > const &v1, detail::tvec4< T > const &v2, detail::tvec4< T > const &v3, detail::tvec4< T > const &v4)
     
    template<typename T >
    detail::tmat4x4< T > colMajor4 (detail::tmat4x4< T > const &m)
     
    template<typename T >
    detail::tmat2x2< T > rowMajor2 (detail::tvec2< T > const &v1, detail::tvec2< T > const &v2)
     
    template<typename T >
    detail::tmat2x2< T > rowMajor2 (detail::tmat2x2< T > const &m)
     
    template<typename T >
    detail::tmat3x3< T > rowMajor3 (detail::tvec3< T > const &v1, detail::tvec3< T > const &v2, detail::tvec3< T > const &v3)
     
    template<typename T >
    detail::tmat3x3< T > rowMajor3 (detail::tmat3x3< T > const &m)
     
    template<typename T >
    detail::tmat4x4< T > rowMajor4 (detail::tvec4< T > const &v1, detail::tvec4< T > const &v2, detail::tvec4< T > const &v3, detail::tvec4< T > const &v4)
     
    template<typename T >
    detail::tmat4x4< T > rowMajor4 (detail::tmat4x4< T > const &m)
     
    -

    Detailed Description

    -

    Find the closest number of a number multiple of other number.

    -

    <glm/gtx/multiple.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Build matrices with specific matrix order, row or column.

    +

    <glm/gtx/matrix_major_storage.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + - - + + @@ -83,29 +104,53 @@ Functions
    genType glm::higherMultiple detail::tmat2x2<T> glm::colMajor2 (genType const & Source, detail::tvec2< T > const & v1,
    genType const & Multiple detail::tvec2< T > const & v2 
    -
    -
    +
    -

    Higher Multiple number of Source.

    -

    From GLM_GTX_multiple extension.

    +

    Build a column major matrix from column vectors.

    +

    From GLM_GTX_matrix_major_storage extension.

    - +
    - + - - + + + + +
    genType glm::lowerMultiple detail::tmat2x2<T> glm::colMajor2 (genType const & Source, detail::tmat2x2< T > const & m)
    +
    + +

    Build a column major matrix from other matrix.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    + +
    +
    + + + + + + - - + + + + + + + + @@ -113,22 +158,260 @@ Functions
    detail::tmat3x3<T> glm::colMajor3 (detail::tvec3< T > const & v1,
    genType const & Multiple detail::tvec3< T > const & v2,
    detail::tvec3< T > const & v3 
    -
    -
    +
    -

    Lower Multiple number of Source.

    -

    From GLM_GTX_multiple extension.

    +

    Build a column major matrix from column vectors.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    + + + + + + + + +
    detail::tmat3x3<T> glm::colMajor3 (detail::tmat3x3< T > const & m)
    +
    + +

    Build a column major matrix from other matrix.

    +

    From GLM_GTX_matrix_major_storage extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::colMajor4 (detail::tvec4< T > const & v1,
    detail::tvec4< T > const & v2,
    detail::tvec4< T > const & v3,
    detail::tvec4< T > const & v4 
    )
    +
    +

    Build a column major matrix from column vectors.

    +

    From GLM_GTX_matrix_major_storage extension.

    +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::colMajor4 (detail::tmat4x4< T > const & m)
    +
    + +

    Build a column major matrix from other matrix.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat2x2<T> glm::rowMajor2 (detail::tvec2< T > const & v1,
    detail::tvec2< T > const & v2 
    )
    +
    + +

    Build a row major matrix from row vectors.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat2x2<T> glm::rowMajor2 (detail::tmat2x2< T > const & m)
    +
    + +

    Build a row major matrix from other matrix.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat3x3<T> glm::rowMajor3 (detail::tvec3< T > const & v1,
    detail::tvec3< T > const & v2,
    detail::tvec3< T > const & v3 
    )
    +
    + +

    Build a row major matrix from row vectors.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat3x3<T> glm::rowMajor3 (detail::tmat3x3< T > const & m)
    +
    + +

    Build a row major matrix from other matrix.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::rowMajor4 (detail::tvec4< T > const & v1,
    detail::tvec4< T > const & v2,
    detail::tvec4< T > const & v3,
    detail::tvec4< T > const & v4 
    )
    +
    + +

    Build a row major matrix from row vectors.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::rowMajor4 (detail::tmat4x4< T > const & m)
    +
    + +

    Build a row major matrix from other matrix.

    +

    From GLM_GTX_matrix_major_storage extension.

    + +
    +
    +
    + - diff --git a/doc/api/a00184.html b/doc/api/a00184.html index b7b601e7..cd062251 100644 --- a/doc/api/a00184.html +++ b/doc/api/a00184.html @@ -2,61 +2,254 @@ - -GLM_GTX_noise: Procedural noise functions + +GLM_GTX_matrix_operation + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +
    -
    GLM_GTX_noise: Procedural noise functions
    -
    +
    GLM_GTX_matrix_operation
    +
    GTX Extensions (Experimental)
    -

    Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf Defines the half-precision floating-point type, along with various typedefs for vectors and matrices.

    -

    <glm/gtx/noise.hpp> need to be included to use these functionalities.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename valType >
    detail::tmat2x2< valType > diagonal2x2 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat2x3< valType > diagonal2x3 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat2x4< valType > diagonal2x4 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat3x2< valType > diagonal3x2 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat3x3< valType > diagonal3x3 (detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tmat3x4< valType > diagonal3x4 (detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tmat4x2< valType > diagonal4x2 (detail::tvec2< valType > const &v)
     
    template<typename valType >
    detail::tmat4x3< valType > diagonal4x3 (detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tmat4x4< valType > diagonal4x4 (detail::tvec4< valType > const &v)
     
    +

    Detailed Description

    +

    Build diagonal matrices from vectors.

    +

    <glm/gtx/matrix_operation.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    detail::tmat2x2<valType> glm::diagonal2x2 (detail::tvec2< valType > const & v)
    +
    + +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat2x3<valType> glm::diagonal2x3 (detail::tvec2< valType > const & v)
    +
    +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat2x4<valType> glm::diagonal2x4 (detail::tvec2< valType > const & v)
    +
    + +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat3x2<valType> glm::diagonal3x2 (detail::tvec2< valType > const & v)
    +
    + +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat3x3<valType> glm::diagonal3x3 (detail::tvec3< valType > const & v)
    +
    + +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat3x4<valType> glm::diagonal3x4 (detail::tvec3< valType > const & v)
    +
    + +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x2<valType> glm::diagonal4x2 (detail::tvec2< valType > const & v)
    +
    + +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x3<valType> glm::diagonal4x3 (detail::tvec3< valType > const & v)
    +
    + +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<valType> glm::diagonal4x4 (detail::tvec4< valType > const & v)
    +
    + +

    Build a diagonal matrix.

    +

    From GLM_GTX_matrix_operation extension.

    + +
    +
    +
    + - diff --git a/doc/api/a00185.html b/doc/api/a00185.html index 505ec1a8..17286b8b 100644 --- a/doc/api/a00185.html +++ b/doc/api/a00185.html @@ -2,98 +2,205 @@ - -GLM_GTX_norm: Vector norm calculations + +GLM_GTX_matrix_query + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_norm: Vector norm calculations
    -
    +
    GLM_GTX_matrix_query
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    distance2 (T const &p0, T const &p1)
    template<typename genType >
    genType::value_type distance2 (genType const &p0, genType const &p1)
    template<typename T >
    l1Norm (detail::tvec3< T > const &x, detail::tvec3< T > const &y)
    template<typename T >
    l1Norm (detail::tvec3< T > const &v)
    template<typename T >
    l2Norm (detail::tvec3< T > const &x, detail::tvec3< T > const &y)
    template<typename T >
    l2Norm (detail::tvec3< T > const &x)
    template<typename T >
    length2 (T const &x)
    template<typename genType >
    genType::value_type length2 (genType const &x)
    template<typename T >
    length2 (detail::tquat< T > const &q)
    template<typename T >
    lxNorm (detail::tvec3< T > const &x, detail::tvec3< T > const &y, unsigned int Depth)
    template<typename T >
    lxNorm (detail::tvec3< T > const &x, unsigned int Depth)
    template<typename genType >
    bool isIdentity (genType const &m, typename genType::value_type const &epsilon)
     
    template<typename valType >
    bool isNormalized (detail::tmat2x2< valType > const &m, valType const &epsilon)
     
    template<typename valType >
    bool isNormalized (detail::tmat3x3< valType > const &m, valType const &epsilon)
     
    template<typename valType >
    bool isNormalized (detail::tmat4x4< valType > const &m, valType const &epsilon)
     
    template<typename T >
    bool isNull (detail::tmat2x2< T > const &m, T const &epsilon)
     
    template<typename T >
    bool isNull (detail::tmat3x3< T > const &m, T const &epsilon)
     
    template<typename T >
    bool isNull (detail::tmat4x4< T > const &m, T const &epsilon)
     
    template<typename valType , template< typename > class matType>
    bool isOrthogonal (matType< valType > const &m, valType const &epsilon)
     
    -

    Detailed Description

    -

    Various way to compute vector norms.

    -

    <glm/gtx/norm.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Query to evaluate matrix properties.

    +

    <glm/gtx/matrix_query.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + + + + + + + + + + + + + +
    T glm::distance2 bool glm::isIdentity (T const & p0, genType const & m,
    typename genType::value_type const & epsilon 
    )
    +
    + +

    Return whether a matrix is an identity matrix.

    +

    From GLM_GTX_matrix_query extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    bool glm::isNormalized (detail::tmat2x2< valType > const & m,
    valType const & epsilon 
    )
    +
    + +

    Return whether a matrix is a normalized matrix.

    +

    From GLM_GTX_matrix_query extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    bool glm::isNormalized (detail::tmat3x3< valType > const & m,
    valType const & epsilon 
    )
    +
    + +

    Return whether a matrix is a normalized matrix.

    +

    From GLM_GTX_matrix_query extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    bool glm::isNormalized (detail::tmat4x4< valType > const & m,
    valType const & epsilon 
    )
    +
    + +

    Return whether a matrix is a normalized matrix.

    +

    From GLM_GTX_matrix_query extension.

    + +
    +
    + +
    +
    + + + + + + - + @@ -101,225 +208,28 @@ Functions
    bool glm::isNull (detail::tmat2x2< T > const & m,
    T const & p1 epsilon 
    -
    -
    +
    -

    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).

    -

    From GLM_GTX_norm extension.

    +

    Return whether a matrix a null matrix.

    +

    From GLM_GTX_matrix_query extension.

    - +
    - + - - + + - - - - - - - - -
    genType::value_type glm::distance2 bool glm::isNull (genType const & p0, detail::tmat3x3< T > const & m,
    genType const & p1 
    )
    -
    -
    - -

    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    T glm::l1Norm (detail::tvec3< T > const & x,
    detail::tvec3< T > const & y 
    )
    -
    -
    - -

    Returns the L1 norm between x and y.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::l1Norm (detail::tvec3< T > const & v)
    -
    -
    - -

    Returns the L1 norm of v.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    T glm::l2Norm (detail::tvec3< T > const & x,
    detail::tvec3< T > const & y 
    )
    -
    -
    - -

    Returns the L2 norm between x and y.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::l2Norm (detail::tvec3< T > const & x)
    -
    -
    - -

    Returns the L2 norm of v.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - -
    T glm::length2 ( T const & x)
    -
    -
    - -

    Returns the squared length of x.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genType::value_type glm::length2 (genType const & x)
    -
    -
    - -

    Returns the squared length of x.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::length2 (detail::tquat< T > const & q)
    -
    -
    - -

    Returns the squared length of x.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - + @@ -327,29 +237,28 @@ Functions
    T glm::lxNorm (detail::tvec3< T > const & x,
    detail::tvec3< T > const & y,
    unsigned int Depth epsilon 
    -
    -
    +
    -

    Returns the L norm between x and y.

    -

    From GLM_GTX_norm extension.

    +

    Return whether a matrix a null matrix.

    +

    From GLM_GTX_matrix_query extension.

    - +
    - + - - + + - - + + @@ -357,22 +266,48 @@ Functions
    T glm::lxNorm bool glm::isNull (detail::tvec3< T > const & x, detail::tmat4x4< T > const & m,
    unsigned int Depth T const & epsilon 
    -
    -
    +
    -

    Returns the L norm of v.

    -

    From GLM_GTX_norm extension.

    +

    Return whether a matrix is a null matrix.

    +

    From GLM_GTX_matrix_query extension.

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    bool glm::isOrthogonal (matType< valType > const & m,
    valType const & epsilon 
    )
    +
    + +

    Return whether a matrix is an orthonormalized matrix.

    +

    From GLM_GTX_matrix_query extension.

    +
    - - +
    +
    + - diff --git a/doc/api/a00186.html b/doc/api/a00186.html index dc50822d..b00a5f0c 100644 --- a/doc/api/a00186.html +++ b/doc/api/a00186.html @@ -2,107 +2,59 @@ - -GLM_GTX_normal: Compute normals + +GLM_GTX_mixed_producte + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_normal: Compute normals
    -
    +
    GLM_GTX_mixed_producte
    +
    GTX Extensions (Experimental)
    - - - + + +

    +

    Functions

    template<typename T >
    detail::tvec3< T > triangleNormal (detail::tvec3< T > const &p1, detail::tvec3< T > const &p2, detail::tvec3< T > const &p3)
    +template<typename valType >
    valType mixedProduct (detail::tvec3< valType > const &v1, detail::tvec3< valType > const &v2, detail::tvec3< valType > const &v3)
     
    -

    Detailed Description

    -

    Compute the normal of a triangle.

    -

    <glm/gtx/normal.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T> glm::triangleNormal (detail::tvec3< T > const & p1,
    detail::tvec3< T > const & p2,
    detail::tvec3< T > const & p3 
    )
    -
    -
    - -

    Computes triangle normal from triangle points.

    -

    From GLM_GTX_normal extension.

    - -
    -
    -
    - - +

    Detailed Description

    +

    Mixed product of 3 vectors.

    +

    <glm/gtx/mixed_product.hpp> need to be included to use these functionalities.

    + + - diff --git a/doc/api/a00187.html b/doc/api/a00187.html index 969bbf8c..86a3bc63 100644 --- a/doc/api/a00187.html +++ b/doc/api/a00187.html @@ -2,80 +2,71 @@ - -GLM_GTX_normalize_dot: Normalize dot product + +GLM_GTX_multiple + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_normalize_dot: Normalize dot product
    -
    +
    GLM_GTX_multiple
    +
    GTX Extensions (Experimental)
    - - - - - + + + + + +

    +

    Functions

    template<typename genType >
    genType::value_type fastNormalizeDot (genType const &x, genType const &y)
    template<typename genType >
    genType::value_type normalizeDot (genType const &x, genType const &y)
    template<typename genType >
    genType higherMultiple (genType const &Source, genType const &Multiple)
     
    template<typename genType >
    genType lowerMultiple (genType const &Source, genType const &Multiple)
     
    -

    Detailed Description

    -

    Dot product of vectors that need to be normalize with a single square root.

    -

    <glm/gtx/normalized_dot.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Find the closest number of a number multiple of other number.

    +

    <glm/gtx/multiple.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - + - + @@ -83,29 +74,28 @@ Functions
    genType::value_type glm::fastNormalizeDot genType glm::higherMultiple ( genType const & x, Source,
    genType const & y Multiple 
    -
    -
    +
    -

    Normalize parameters and returns the dot product of x and y.

    -

    Faster that dot(fastNormalize(x), fastNormalize(y)). From GLM_GTX_normalize_dot extension.

    +

    Higher Multiple number of Source.

    +

    From GLM_GTX_multiple extension.

    - +
    - + - + - + @@ -113,22 +103,19 @@ Functions
    genType::value_type glm::normalizeDot genType glm::lowerMultiple ( genType const & x, Source,
    genType const & y Multiple 
    -
    -
    +
    -

    Normalize parameters and returns the dot product of x and y.

    -

    It's faster that dot(normalize(x), normalize(y)). From GLM_GTX_normalize_dot extension.

    +

    Lower Multiple number of Source.

    +

    From GLM_GTX_multiple extension.

    -
    - - + + - diff --git a/doc/api/a00188.html b/doc/api/a00188.html index a664bcd8..f93ef5b5 100644 --- a/doc/api/a00188.html +++ b/doc/api/a00188.html @@ -2,94 +2,364 @@ - -GLM_GTX_number_precision: Number precision + +GLM_GTX_norm + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Functions
    -
    GLM_GTX_number_precision: Number precision
    -
    GTX Extensions (Experimental)
    +
    GLM_GTX_norm
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    -typedef f16 f16mat1
    -typedef f16 f16mat1x1
    -typedef f16 f16vec1
    -typedef f32 f32mat1
    -typedef f32 f32mat1x1
    -typedef f32 f32vec1
    -typedef f64 f64mat1
    -typedef f64 f64mat1x1
    -typedef f64 f64vec1
    -typedef u16 u16vec1
    -typedef u32 u32vec1
    -typedef u64 u64vec1
    -typedef u8 u8vec1

    +Functions

    template<typename T >
    distance2 (T const &p0, T const &p1)
     
    template<typename genType >
    genType::value_type distance2 (genType const &p0, genType const &p1)
     
    template<typename T >
    l1Norm (detail::tvec3< T > const &x, detail::tvec3< T > const &y)
     
    template<typename T >
    l1Norm (detail::tvec3< T > const &v)
     
    template<typename T >
    l2Norm (detail::tvec3< T > const &x, detail::tvec3< T > const &y)
     
    template<typename T >
    l2Norm (detail::tvec3< T > const &x)
     
    template<typename T >
    length2 (T const &x)
     
    template<typename genType >
    genType::value_type length2 (genType const &x)
     
    template<typename T >
    length2 (detail::tquat< T > const &q)
     
    template<typename T >
    lxNorm (detail::tvec3< T > const &x, detail::tvec3< T > const &y, unsigned int Depth)
     
    template<typename T >
    lxNorm (detail::tvec3< T > const &x, unsigned int Depth)
     
    -

    Detailed Description

    -

    Defined size types.

    -

    <glm/gtx/number_precision.hpp> need to be included to use these functionalities.

    +

    Detailed Description

    +

    Various way to compute vector norms.

    +

    <glm/gtx/norm.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    T glm::distance2 (T const & p0,
    T const & p1 
    )
    +
    + +

    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).

    +

    From GLM_GTX_norm extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    genType::value_type glm::distance2 (genType const & p0,
    genType const & p1 
    )
    +
    +

    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).

    +

    From GLM_GTX_norm extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    T glm::l1Norm (detail::tvec3< T > const & x,
    detail::tvec3< T > const & y 
    )
    +
    + +

    Returns the L1 norm between x and y.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::l1Norm (detail::tvec3< T > const & v)
    +
    + +

    Returns the L1 norm of v.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    T glm::l2Norm (detail::tvec3< T > const & x,
    detail::tvec3< T > const & y 
    )
    +
    + +

    Returns the L2 norm between x and y.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::l2Norm (detail::tvec3< T > const & x)
    +
    + +

    Returns the L2 norm of v.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::length2 (T const & x)
    +
    + +

    Returns the squared length of x.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    genType::value_type glm::length2 (genType const & x)
    +
    + +

    Returns the squared length of x.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    T glm::length2 (detail::tquat< T > const & q)
    +
    + +

    Returns the squared length of x.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    T glm::lxNorm (detail::tvec3< T > const & x,
    detail::tvec3< T > const & y,
    unsigned int Depth 
    )
    +
    + +

    Returns the L norm between x and y.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    T glm::lxNorm (detail::tvec3< T > const & x,
    unsigned int Depth 
    )
    +
    + +

    Returns the L norm of v.

    +

    From GLM_GTX_norm extension.

    + +
    +
    +
    + - diff --git a/doc/api/a00189.html b/doc/api/a00189.html index 7d024c82..05511ab6 100644 --- a/doc/api/a00189.html +++ b/doc/api/a00189.html @@ -2,187 +2,94 @@ - -GLM_GTX_ocl_type: OpenCL types + +GLM_GTX_normal + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Functions
    -
    GLM_GTX_ocl_type: OpenCL types
    -
    GTX Extensions (Experimental)
    +
    GLM_GTX_normal
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +

    -Typedefs

    -typedef detail::int8 cl_char
    -typedef detail::int8 cl_char1
    -typedef detail::tvec2
    -< detail::int8 > 
    cl_char2
    -typedef detail::tvec3
    -< detail::int8 > 
    cl_char3
    -typedef detail::tvec4
    -< detail::int8 > 
    cl_char4
    -typedef detail::float32 cl_float
    -typedef detail::float32 cl_float1
    -typedef detail::tvec2
    -< detail::float32 > 
    cl_float2
    -typedef detail::tvec3
    -< detail::float32 > 
    cl_float3
    -typedef detail::tvec4
    -< detail::float32 > 
    cl_float4
    -typedef detail::float16 cl_half
    -typedef detail::int32 cl_int
    -typedef detail::int32 cl_int1
    -typedef detail::tvec2
    -< detail::int32 > 
    cl_int2
    -typedef detail::tvec3
    -< detail::int32 > 
    cl_int3
    -typedef detail::tvec4
    -< detail::int32 > 
    cl_int4
    -typedef detail::int64 cl_long
    -typedef detail::int64 cl_long1
    -typedef detail::tvec2
    -< detail::int64 > 
    cl_long2
    -typedef detail::tvec3
    -< detail::int64 > 
    cl_long3
    -typedef detail::tvec4
    -< detail::int64 > 
    cl_long4
    -typedef detail::int16 cl_short
    -typedef detail::int16 cl_short1
    -typedef detail::tvec2
    -< detail::int16 > 
    cl_short2
    -typedef detail::tvec3
    -< detail::int16 > 
    cl_short3
    -typedef detail::tvec4
    -< detail::int16 > 
    cl_short4
    -typedef detail::uint8 cl_uchar
    -typedef detail::uint8 cl_uchar1
    -typedef detail::tvec2
    -< detail::uint8 > 
    cl_uchar2
    -typedef detail::tvec3
    -< detail::uint8 > 
    cl_uchar3
    -typedef detail::tvec4
    -< detail::uint8 > 
    cl_uchar4
    -typedef detail::uint32 cl_uint
    -typedef detail::uint32 cl_uint1
    -typedef detail::tvec2
    -< detail::uint32 > 
    cl_uint2
    -typedef detail::tvec3
    -< detail::uint32 > 
    cl_uint3
    -typedef detail::tvec4
    -< detail::uint32 > 
    cl_uint4
    -typedef detail::uint64 cl_ulong
    -typedef detail::uint64 cl_ulong1
    -typedef detail::tvec2
    -< detail::uint64 > 
    cl_ulong2
    -typedef detail::tvec3
    -< detail::uint64 > 
    cl_ulong3
    -typedef detail::tvec4
    -< detail::uint64 > 
    cl_ulong4
    -typedef detail::uint16 cl_ushort
    -typedef detail::uint16 cl_ushort1
    -typedef detail::tvec2
    -< detail::uint16 > 
    cl_ushort2
    -typedef detail::tvec3
    -< detail::uint16 > 
    cl_ushort3
    -typedef detail::tvec4
    -< detail::uint16 > 
    cl_ushort4

    +Functions

    template<typename T >
    detail::tvec3< T > triangleNormal (detail::tvec3< T > const &p1, detail::tvec3< T > const &p2, detail::tvec3< T > const &p3)
     
    -

    Detailed Description

    -

    OpenCL types.

    -

    <glm/gtx/ocl_type.hpp> need to be included to use these functionalities.

    +

    Detailed Description

    +

    Compute the normal of a triangle.

    +

    <glm/gtx/normal.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tvec3<T> glm::triangleNormal (detail::tvec3< T > const & p1,
    detail::tvec3< T > const & p2,
    detail::tvec3< T > const & p3 
    )
    +
    + +

    Computes triangle normal from triangle points.

    +

    From GLM_GTX_normal extension.

    +
    - - +
    +
    + - diff --git a/doc/api/a00190.html b/doc/api/a00190.html index c5385949..e7f67fd8 100644 --- a/doc/api/a00190.html +++ b/doc/api/a00190.html @@ -2,219 +2,120 @@ - -GLM_GTX_optimum_pow: Optimum pow + +GLM_GTX_normalize_dot + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_optimum_pow: Optimum pow
    -
    +
    GLM_GTX_normalize_dot
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - + + + + + +

    +

    Functions

    template<typename genType >
    genType pow2 (const genType &x)
    template<typename genType >
    genType pow3 (const genType &x)
    template<typename genType >
    genType pow4 (const genType &x)
    bool powOfTwo (int num)
    detail::tvec2< bool > powOfTwo (const detail::tvec2< int > &x)
    detail::tvec3< bool > powOfTwo (const detail::tvec3< int > &x)
    detail::tvec4< bool > powOfTwo (const detail::tvec4< int > &x)
    template<typename genType >
    genType::value_type fastNormalizeDot (genType const &x, genType const &y)
     
    template<typename genType >
    genType::value_type normalizeDot (genType const &x, genType const &y)
     
    -

    Detailed Description

    -

    Integer exponentiation of power functions.

    -

    <glm/gtx/optimum_pow.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Dot product of vectors that need to be normalize with a single square root.

    +

    <glm/gtx/normalized_dot.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + + + + + + + + + + +
    genType glm::gtx::pow2 genType::value_type glm::fastNormalizeDot (const genType & x)genType const & x,
    genType const & y 
    )
    -
    -
    +
    -

    Returns x raised to the power of 2.

    -

    From GLM_GTX_optimum_pow extension.

    +

    Normalize parameters and returns the dot product of x and y.

    +

    Faster that dot(fastNormalize(x), fastNormalize(y)). From GLM_GTX_normalize_dot extension.

    - +
    - + - - - + + -
    genType glm::gtx::pow3 genType::value_type glm::normalizeDot (const genType & x)genType const & x,
    -
    -
    - -

    Returns x raised to the power of 3.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - + + + -
    genType glm::gtx::pow4 (const genType & x) genType const & y 
    -
    -
    - -

    Returns x raised to the power of 4.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - + +
    bool glm::gtx::powOfTwo (int num) )
    -
    -
    +
    -

    Checks if the parameter is a power of 2 number.

    -

    From GLM_GTX_optimum_pow extension.

    +

    Normalize parameters and returns the dot product of x and y.

    +

    It's faster that dot(normalize(x), normalize(y)). From GLM_GTX_normalize_dot extension.

    - -
    -
    - - - - - - - - -
    detail::tvec2<bool> glm::gtx::powOfTwo (const detail::tvec2< int > & x)
    -
    -
    - -

    Checks to determine if the parameter component are power of 2 numbers.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec3<bool> glm::gtx::powOfTwo (const detail::tvec3< int > & x)
    -
    -
    - -

    Checks to determine if the parameter component are power of 2 numbers.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec4<bool> glm::gtx::powOfTwo (const detail::tvec4< int > & x)
    -
    -
    - -

    Checks to determine if the parameter component are power of 2 numbers.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00191.html b/doc/api/a00191.html index 75004c08..dfa27e7d 100644 --- a/doc/api/a00191.html +++ b/doc/api/a00191.html @@ -2,123 +2,94 @@ - -GLM_GTX_orthonormalize: Orthonormalize + +GLM_GTX_number_precision + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Typedefs
    -
    GLM_GTX_orthonormalize: Orthonormalize
    -
    GTX Extensions (Experimental)
    +
    GLM_GTX_number_precision
    +
    GTX Extensions (Experimental)
    - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    template<typename T >
    detail::tmat3x3< T > orthonormalize (const detail::tmat3x3< T > &m)
    template<typename T >
    detail::tvec3< T > orthonormalize (const detail::tvec3< T > &x, const detail::tvec3< T > &y)

    +Typedefs

    +typedef f16 f16mat1
     
    +typedef f16 f16mat1x1
     
    +typedef f16 f16vec1
     
    +typedef f32 f32mat1
     
    +typedef f32 f32mat1x1
     
    +typedef f32 f32vec1
     
    +typedef f64 f64mat1
     
    +typedef f64 f64mat1x1
     
    +typedef f64 f64vec1
     
    +typedef u16 u16vec1
     
    +typedef u32 u32vec1
     
    +typedef u64 u64vec1
     
    +typedef u8 u8vec1
     
    -

    Detailed Description

    -

    Orthonormalize matrices.

    -

    <glm/gtx/orthonormalize.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    detail::tmat3x3<T> glm::orthonormalize (const detail::tmat3x3< T > & m)
    -
    -
    - -

    Returns the orthonormalized matrix of m.

    -

    From GLM_GTX_orthonormalize extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T> glm::orthonormalize (const detail::tvec3< T > & x,
    const detail::tvec3< T > & y 
    )
    -
    -
    - -

    Orthonormalizes x according y.

    -

    From GLM_GTX_orthonormalize extension.

    - -
    -
    -
    - - +

    Detailed Description

    +

    Defined size types.

    +

    <glm/gtx/number_precision.hpp> need to be included to use these functionalities.

    + + - diff --git a/doc/api/a00192.html b/doc/api/a00192.html index c670b7f7..3e3719b2 100644 --- a/doc/api/a00192.html +++ b/doc/api/a00192.html @@ -2,101 +2,220 @@ - -GLM_GTX_perpendicular: Perpendicular + +GLM_GTX_ocl_type + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Typedefs
    -
    GLM_GTX_perpendicular: Perpendicular
    -
    GTX Extensions (Experimental)
    +
    GLM_GTX_ocl_type
    +
    GTX Extensions (Experimental)
    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    template<typename vecType >
    vecType perp (vecType const &x, vecType const &Normal)

    +Typedefs

    +typedef detail::int8 cl_char
     
    +typedef detail::int8 cl_char1
     
    +typedef detail::tvec2
    +< detail::int8 > 
    cl_char2
     
    +typedef detail::tvec3
    +< detail::int8 > 
    cl_char3
     
    +typedef detail::tvec4
    +< detail::int8 > 
    cl_char4
     
    +typedef detail::float32 cl_float
     
    +typedef detail::float32 cl_float1
     
    +typedef detail::tvec2
    +< detail::float32 > 
    cl_float2
     
    +typedef detail::tvec3
    +< detail::float32 > 
    cl_float3
     
    +typedef detail::tvec4
    +< detail::float32 > 
    cl_float4
     
    +typedef detail::float16 cl_half
     
    +typedef detail::int32 cl_int
     
    +typedef detail::int32 cl_int1
     
    +typedef detail::tvec2
    +< detail::int32 > 
    cl_int2
     
    +typedef detail::tvec3
    +< detail::int32 > 
    cl_int3
     
    +typedef detail::tvec4
    +< detail::int32 > 
    cl_int4
     
    +typedef detail::int64 cl_long
     
    +typedef detail::int64 cl_long1
     
    +typedef detail::tvec2
    +< detail::int64 > 
    cl_long2
     
    +typedef detail::tvec3
    +< detail::int64 > 
    cl_long3
     
    +typedef detail::tvec4
    +< detail::int64 > 
    cl_long4
     
    +typedef detail::int16 cl_short
     
    +typedef detail::int16 cl_short1
     
    +typedef detail::tvec2
    +< detail::int16 > 
    cl_short2
     
    +typedef detail::tvec3
    +< detail::int16 > 
    cl_short3
     
    +typedef detail::tvec4
    +< detail::int16 > 
    cl_short4
     
    +typedef detail::uint8 cl_uchar
     
    +typedef detail::uint8 cl_uchar1
     
    +typedef detail::tvec2
    +< detail::uint8 > 
    cl_uchar2
     
    +typedef detail::tvec3
    +< detail::uint8 > 
    cl_uchar3
     
    +typedef detail::tvec4
    +< detail::uint8 > 
    cl_uchar4
     
    +typedef detail::uint32 cl_uint
     
    +typedef detail::uint32 cl_uint1
     
    +typedef detail::tvec2
    +< detail::uint32 > 
    cl_uint2
     
    +typedef detail::tvec3
    +< detail::uint32 > 
    cl_uint3
     
    +typedef detail::tvec4
    +< detail::uint32 > 
    cl_uint4
     
    +typedef detail::uint64 cl_ulong
     
    +typedef detail::uint64 cl_ulong1
     
    +typedef detail::tvec2
    +< detail::uint64 > 
    cl_ulong2
     
    +typedef detail::tvec3
    +< detail::uint64 > 
    cl_ulong3
     
    +typedef detail::tvec4
    +< detail::uint64 > 
    cl_ulong4
     
    +typedef detail::uint16 cl_ushort
     
    +typedef detail::uint16 cl_ushort1
     
    +typedef detail::tvec2
    +< detail::uint16 > 
    cl_ushort2
     
    +typedef detail::tvec3
    +< detail::uint16 > 
    cl_ushort3
     
    +typedef detail::tvec4
    +< detail::uint16 > 
    cl_ushort4
     
    -

    Detailed Description

    -

    Perpendicular of a vector from other one.

    -

    <glm/gtx/perpendicular.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    vecType glm::perp (vecType const & x,
    vecType const & Normal 
    )
    -
    -
    - -

    Projects x a perpendicular axis of Normal.

    -

    From GLM_GTX_perpendicular extension.

    - -
    -
    -
    - - +

    Detailed Description

    +

    OpenCL types.

    +

    <glm/gtx/ocl_type.hpp> need to be included to use these functionalities.

    + + - diff --git a/doc/api/a00193.html b/doc/api/a00193.html index 191af8fe..743f3d99 100644 --- a/doc/api/a00193.html +++ b/doc/api/a00193.html @@ -2,113 +2,206 @@ - -GLM_GTX_polar_coordinates: Polar coordinates + +GLM_GTX_optimum_pow + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_polar_coordinates: Polar coordinates
    -
    +
    GLM_GTX_optimum_pow
    +
    GTX Extensions (Experimental)
    - - - - - + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    detail::tvec3< T > euclidean (detail::tvec3< T > const &polar)
    template<typename T >
    detail::tvec3< T > polar (detail::tvec3< T > const &euclidean)
    template<typename genType >
    genType pow2 (const genType &x)
     
    template<typename genType >
    genType pow3 (const genType &x)
     
    template<typename genType >
    genType pow4 (const genType &x)
     
    bool powOfTwo (int num)
     
    detail::tvec2< bool > powOfTwo (const detail::tvec2< int > &x)
     
    detail::tvec3< bool > powOfTwo (const detail::tvec3< int > &x)
     
    detail::tvec4< bool > powOfTwo (const detail::tvec4< int > &x)
     
    -

    Detailed Description

    -

    Conversion from Euclidean space to polar space and revert.

    -

    <glm/gtx/polar_coordinates.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Integer exponentiation of power functions.

    +

    <glm/gtx/optimum_pow.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + +
    detail::tvec3<T> glm::euclidean genType glm::gtx::pow2 (detail::tvec3< T > const & polar)const genType & x)
    -
    -
    +
    -

    Convert Polar to Euclidean coordinates.

    -

    From GLM_GTX_polar_coordinates extension.

    +

    Returns x raised to the power of 2.

    +

    From GLM_GTX_optimum_pow extension.

    - +
    - + - - + +
    detail::tvec3<T> glm::polar genType glm::gtx::pow3 (detail::tvec3< T > const & euclidean)const genType & x)
    -
    -
    +
    -

    Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.

    -

    From GLM_GTX_polar_coordinates extension.

    +

    Returns x raised to the power of 3.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    + + + + + + + + +
    genType glm::gtx::pow4 (const genType & x)
    +
    + +

    Returns x raised to the power of 4.

    +

    From GLM_GTX_optimum_pow extension.

    +
    +
    + +
    +
    + + + + + + + + +
    bool glm::gtx::powOfTwo (int num)
    +
    +

    Checks if the parameter is a power of 2 number.

    +

    From GLM_GTX_optimum_pow extension.

    +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec2<bool> glm::gtx::powOfTwo (const detail::tvec2< int > & x)
    +
    + +

    Checks to determine if the parameter component are power of 2 numbers.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec3<bool> glm::gtx::powOfTwo (const detail::tvec3< int > & x)
    +
    + +

    Checks to determine if the parameter component are power of 2 numbers.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tvec4<bool> glm::gtx::powOfTwo (const detail::tvec4< int > & x)
    +
    + +

    Checks to determine if the parameter component are power of 2 numbers.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    +
    + - diff --git a/doc/api/a00194.html b/doc/api/a00194.html index aa522e6f..b323d862 100644 --- a/doc/api/a00194.html +++ b/doc/api/a00194.html @@ -2,78 +2,90 @@ - -GLM_GTX_projection: Projection + +GLM_GTX_orthonormalize + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_projection: Projection
    -
    +
    GLM_GTX_orthonormalize
    +
    GTX Extensions (Experimental)
    - - - + + + + + +

    +

    Functions

    template<typename vecType >
    vecType proj (vecType const &x, vecType const &Normal)
    template<typename T >
    detail::tmat3x3< T > orthonormalize (const detail::tmat3x3< T > &m)
     
    template<typename T >
    detail::tvec3< T > orthonormalize (const detail::tvec3< T > &x, const detail::tvec3< T > &y)
     
    -

    Detailed Description

    -

    Projection of a vector to other one.

    -

    <glm/gtx/projection.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Orthonormalize matrices.

    +

    <glm/gtx/orthonormalize.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - + + + + +
    vecType glm::proj detail::tmat3x3<T> glm::orthonormalize (vecType const & const detail::tmat3x3< T > & m)
    +
    + +

    Returns the orthonormalized matrix of m.

    +

    From GLM_GTX_orthonormalize extension.

    + +
    +
    + +
    +
    + + + + + - - + + @@ -81,22 +93,19 @@ Functions
    detail::tvec3<T> glm::orthonormalize (const detail::tvec3< T > &  x,
    vecType const & Normal const detail::tvec3< T > & y 
    -
    -
    +
    -

    Projects x on Normal.

    -

    From GLM_GTX_projection extension.

    +

    Orthonormalizes x according y.

    +

    From GLM_GTX_orthonormalize extension.

    -
    - - + + - diff --git a/doc/api/a00195.html b/doc/api/a00195.html index b626f9f2..4c033f60 100644 --- a/doc/api/a00195.html +++ b/doc/api/a00195.html @@ -2,156 +2,68 @@ - -GLM_GTX_quaternion: Extented quaternion types and functions + +GLM_GTX_perpendicular + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_quaternion: Extented quaternion types and functions
    -
    +
    GLM_GTX_perpendicular
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +

    +

    Functions

    template<typename valType >
    valType angle (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType const &z)
    template<typename valType >
    detail::tquat< valType > angleAxis (valType const &angle, detail::tvec3< valType > const &axis)
    template<typename valType >
    detail::tvec3< valType > axis (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tvec3< valType > cross (detail::tquat< valType > const &q, detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tvec3< valType > cross (detail::tvec3< valType > const &v, detail::tquat< valType > const &q)
    template<typename valType >
    detail::tvec3< valType > eulerAngles (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tquat< valType > exp (detail::tquat< valType > const &q, valType const &exponent)
    template<typename valType >
    valType extractRealComponent (detail::tquat< valType > const &q)
    template<typename T >
    detail::tquat< T > fastMix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
    template<typename valType >
    detail::tquat< valType > intermediate (detail::tquat< valType > const &prev, detail::tquat< valType > const &curr, detail::tquat< valType > const &next)
    template<typename valType >
    detail::tquat< valType > log (detail::tquat< valType > const &q)
    template<typename valType >
    valType pitch (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tquat< valType > pow (detail::tquat< valType > const &x, valType const &y)
    template<typename valType >
    valType roll (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tvec3< valType > rotate (detail::tquat< valType > const &q, detail::tvec3< valType > const &v)
    template<typename valType >
    detail::tvec4< valType > rotate (detail::tquat< valType > const &q, detail::tvec4< valType > const &v)
    template<typename T >
    detail::tquat< T > shortMix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
    template<typename valType >
    detail::tquat< valType > squad (detail::tquat< valType > const &q1, detail::tquat< valType > const &q2, detail::tquat< valType > const &s1, detail::tquat< valType > const &s2, valType const &h)
    template<typename valType >
    detail::tmat3x3< valType > toMat3 (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tmat4x4< valType > toMat4 (detail::tquat< valType > const &x)
    template<typename valType >
    detail::tquat< valType > toQuat (detail::tmat3x3< valType > const &x)
    template<typename valType >
    detail::tquat< valType > toQuat (detail::tmat4x4< valType > const &x)
    template<typename valType >
    valType yaw (detail::tquat< valType > const &x)
    template<typename vecType >
    vecType perp (vecType const &x, vecType const &Normal)
     
    -

    Detailed Description

    -

    Extented quaternion types and functions.

    -

    <glm/gtx/quaternion.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Perpendicular of a vector from other one.

    +

    <glm/gtx/perpendicular.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - - -
    valType glm::angle vecType glm::perp (detail::tquat< valType > const & x)
    -
    -
    - -

    Returns the quaternion rotation angle.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - + - - - - - - - - + + @@ -159,624 +71,19 @@ Functions
    detail::tquat<valType> glm::angleAxis (valType const & angle,
    valType const & vecType const &  x,
    valType const & y,
    valType const & z vecType const & Normal 
    -
    -
    +
    -

    Build a quaternion from an angle and a normalized axis.

    -

    From GLM_GTX_quaternion extension.

    +

    Projects x a perpendicular axis of Normal.

    +

    From GLM_GTX_perpendicular extension.

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tquat<valType> glm::angleAxis (valType const & angle,
    detail::tvec3< valType > const & axis 
    )
    -
    -
    - -

    Build a quaternion from an angle and a normalized axis.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec3<valType> glm::axis (detail::tquat< valType > const & x)
    -
    -
    - -

    Returns the q rotation axis.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<valType> glm::cross (detail::tquat< valType > const & q,
    detail::tvec3< valType > const & v 
    )
    -
    -
    - -

    Compute a cross product between a quaternion and a vector.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<valType> glm::cross (detail::tvec3< valType > const & v,
    detail::tquat< valType > const & q 
    )
    -
    -
    - -

    Compute a cross product between a vector and a quaternion.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec3<valType> glm::eulerAngles (detail::tquat< valType > const & x)
    -
    -
    - -

    Returns euler angles, yitch as x, yaw as y, roll as z.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tquat<valType> glm::exp (detail::tquat< valType > const & q,
    valType const & exponent 
    )
    -
    -
    - -

    Returns a exp of a quaternion.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    valType glm::extractRealComponent (detail::tquat< valType > const & q)
    -
    -
    - -

    Extract the real component of a quaternion.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tquat<T> glm::fastMix (detail::tquat< T > const & x,
    detail::tquat< T > const & y,
    T const & a 
    )
    -
    -
    - -

    Quaternion normalized linear interpolation.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tquat<valType> glm::intermediate (detail::tquat< valType > const & prev,
    detail::tquat< valType > const & curr,
    detail::tquat< valType > const & next 
    )
    -
    -
    - -

    Returns an intermediate control point for squad interpolation.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tquat<valType> glm::log (detail::tquat< valType > const & q)
    -
    -
    - -

    Returns a log of a quaternion.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    valType glm::pitch (detail::tquat< valType > const & x)
    -
    -
    - -

    Returns pitch value of euler angles in degrees.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tquat<valType> glm::pow (detail::tquat< valType > const & x,
    valType const & y 
    )
    -
    -
    - -

    Returns x raised to the y power.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    valType glm::roll (detail::tquat< valType > const & x)
    -
    -
    - -

    Returns roll value of euler angles in degrees.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<valType> glm::rotate (detail::tquat< valType > const & q,
    detail::tvec3< valType > const & v 
    )
    -
    -
    - -

    Returns quarternion square root.

    -

    From GLM_GTX_quaternion extension. Rotates a 3 components vector by a quaternion. From GLM_GTX_transform extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<valType> glm::rotate (detail::tquat< valType > const & q,
    detail::tvec4< valType > const & v 
    )
    -
    -
    - -

    Rotates a 4 components vector by a quaternion.

    -

    From GLM_GTX_transform extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tquat<T> glm::shortMix (detail::tquat< T > const & x,
    detail::tquat< T > const & y,
    T const & a 
    )
    -
    -
    - -

    Quaternion interpolation using the rotation short path.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tquat<valType> glm::squad (detail::tquat< valType > const & q1,
    detail::tquat< valType > const & q2,
    detail::tquat< valType > const & s1,
    detail::tquat< valType > const & s2,
    valType const & h 
    )
    -
    -
    - -

    Compute a point on a path according squad equation.

    -

    q1 and q2 are control points; s1 and s2 are intermediate control points. From GLM_GTX_quaternion extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<valType> glm::toMat3 (detail::tquat< valType > const & x)
    -
    -
    - -

    Converts a quaternion to a 3 * 3 matrix.

    -

    From GLM_GTX_quaternion extension.

    - -

    Definition at line 189 of file gtx/quaternion.hpp.

    - -

    References glm::mat3_cast().

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<valType> glm::toMat4 (detail::tquat< valType > const & x)
    -
    -
    - -

    Converts a quaternion to a 4 * 4 matrix.

    -

    From GLM_GTX_quaternion extension.

    - -

    Definition at line 195 of file gtx/quaternion.hpp.

    - -

    References glm::mat4_cast().

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tquat<valType> glm::toQuat (detail::tmat3x3< valType > const & x)
    -
    -
    - -

    Converts a 3 * 3 matrix to a quaternion.

    -

    From GLM_GTX_quaternion extension.

    - -

    Definition at line 201 of file gtx/quaternion.hpp.

    - -

    References glm::quat_cast().

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tquat<valType> glm::toQuat (detail::tmat4x4< valType > const & x)
    -
    -
    - -

    Converts a 4 * 4 matrix to a quaternion.

    -

    From GLM_GTX_quaternion extension.

    - -

    Definition at line 207 of file gtx/quaternion.hpp.

    - -

    References glm::quat_cast().

    - -
    -
    - -
    -
    - - - - - - - - -
    valType glm::yaw (detail::tquat< valType > const & x)
    -
    -
    - -

    Returns yaw value of euler angles in degrees.

    -

    From GLM_GTX_quaternion extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00196.html b/doc/api/a00196.html index 63b2b312..1857bc93 100644 --- a/doc/api/a00196.html +++ b/doc/api/a00196.html @@ -2,198 +2,100 @@ - -GLM_GTX_random: Random + +GLM_GTX_polar_coordinates + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_random: Random
    -
    +
    GLM_GTX_polar_coordinates
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + +

    +

    Functions

    -template<typename T >
    compRand1 ()
    -template<>
    float compRand1 ()
    -template<typename T >
    compRand1 (T Min, T Max)
    -template<typename T >
    detail::tvec2< T > compRand2 (T Min, T Max)
    -template<typename T >
    detail::tvec2< T > compRand2 (const detail::tvec2< T > &Min, const detail::tvec2< T > &Max)
    -template<typename T >
    detail::tvec3< T > compRand3 (T Min, T Max)
    -template<typename T >
    detail::tvec3< T > compRand3 (const detail::tvec3< T > &Min, const detail::tvec3< T > &Max)
    -template<typename T >
    detail::tvec4< T > compRand4 (T Min, T Max)
    -template<typename T >
    detail::tvec3< T > compRand4 (const detail::tvec4< T > &Min, const detail::tvec4< T > &Max)
    -template<typename T >
    gaussRand1 (T mean, T std_deviation)
    -template<typename T >
    detail::tvec2< T > gaussRand2 (T mean, T std_deviation)
    -template<typename T >
    detail::tvec2< T > gaussRand2 (const detail::tvec2< T > &mean, T std_deviation)
    -template<typename T >
    detail::tvec2< T > gaussRand2 (T mean, const detail::tvec2< T > &std_deviation)
    -template<typename T >
    detail::tvec2< T > gaussRand2 (const detail::tvec2< T > &mean, const detail::tvec2< T > &std_deviation)
    -template<typename T >
    detail::tvec3< T > gaussRand3 (T mean, T std_deviation)
    -template<typename T >
    detail::tvec3< T > gaussRand3 (const detail::tvec3< T > &mean, T std_deviation)
    -template<typename T >
    detail::tvec3< T > gaussRand3 (T mean, const detail::tvec3< T > &std_deviation)
    -template<typename T >
    detail::tvec3< T > gaussRand3 (const detail::tvec3< T > &mean, const detail::tvec3< T > &std_deviation)
    -template<typename T >
    detail::tvec4< T > gaussRand4 (T mean, T std_deviation)
    -template<typename T >
    detail::tvec4< T > gaussRand4 (const detail::tvec4< T > &mean, T std_deviation)
    -template<typename T >
    detail::tvec4< T > gaussRand4 (T mean, const detail::tvec4< T > &std_deviation)
    -template<typename T >
    detail::tvec4< T > gaussRand4 (const detail::tvec4< T > &mean, const detail::tvec4< T > &std_deviation)
    -template<typename T >
    detail::tvec2< T > normalizedRand2 ()
    -template<typename T >
    detail::tvec2< T > normalizedRand2 (T Min, T Max)
    -template<typename T >
    detail::tvec3< T > normalizedRand3 ()
    -template<typename T >
    detail::tvec3< T > normalizedRand3 (T Min, T Max)
    template<typename T >
    signedRand1 ()
    -template<>
    float signedRand1 ()
    -template<typename T >
    detail::tvec2< T > signedRand2 ()
    -template<typename T >
    detail::tvec3< T > signedRand3 ()
    -template<typename T >
    detail::tvec4< T > signedRand4 ()
    -template<typename T >
    detail::tvec2< T > vecRand2 ()
    -template<typename T >
    detail::tvec2< T > vecRand2 (T MinRadius, T MaxRadius)
    -template<typename T >
    detail::tvec3< T > vecRand3 ()
    -template<typename T >
    detail::tvec3< T > vecRand3 (T MinRadius, T MaxRadius)
    -template<typename T >
    detail::tvec4< T > vecRand4 ()
    -template<typename T >
    detail::tvec4< T > vecRand4 (T MinRadius, T MaxRadius)
    template<typename T >
    detail::tvec3< T > euclidean (detail::tvec3< T > const &polar)
     
    template<typename T >
    detail::tvec3< T > polar (detail::tvec3< T > const &euclidean)
     
    -

    Detailed Description

    -

    Generate random number from various distribution methods.

    -

    <glm/gtx/random.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Conversion from Euclidean space to polar space and revert.

    +

    <glm/gtx/polar_coordinates.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - + +
    T glm::signedRand1 detail::tvec3<T> glm::euclidean ()detail::tvec3< T > const & polar)
    -
    -
    +
    -

    Generate a random number in the interval [-1, 1], according a linear distribution.

    -

    From GLM_GTX_random extension.

    +

    Convert Polar to Euclidean coordinates.

    +

    From GLM_GTX_polar_coordinates extension.

    + +
    +
    + + + + + + + + +
    detail::tvec3<T> glm::polar (detail::tvec3< T > const & euclidean)
    +
    + +

    Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.

    +

    From GLM_GTX_polar_coordinates extension.

    +
    - - +
    +
    + - diff --git a/doc/api/a00197.html b/doc/api/a00197.html index 454ea751..a0e4acea 100644 --- a/doc/api/a00197.html +++ b/doc/api/a00197.html @@ -2,145 +2,88 @@ - -GLM_GTX_raw_data: Raw data + +GLM_GTX_projection + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Functions
    -
    GLM_GTX_raw_data: Raw data
    -
    GTX Extensions (Experimental)
    +
    GLM_GTX_projection
    +
    GTX Extensions (Experimental)
    - - - - - + + + +

    -Typedefs

    typedef uint8 byte
    typedef uint32 dword
    typedef uint64 qword
    typedef uint16 word

    +Functions

    template<typename vecType >
    vecType proj (vecType const &x, vecType const &Normal)
     
    -

    Detailed Description

    +

    Detailed Description

    Projection of a vector to other one.

    -

    <glm/gtx/raw_data.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    <glm/gtx/projection.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + + + + -
    typedef uint8 bytevecType glm::proj (vecType const & x,
    -
    -
    - -

    Type for byte numbers.

    -

    From GLM_GTX_raw_data extension.

    - -

    Definition at line 56 of file raw_data.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef uint32 dwordvecType const & Normal 
    -
    -
    - -

    Type for dword numbers.

    -

    From GLM_GTX_raw_data extension.

    - -

    Definition at line 64 of file raw_data.hpp.

    - -
    -
    - -
    -
    - - + + +
    typedef uint64 qword)
    -
    -
    +
    -

    Type for qword numbers.

    -

    From GLM_GTX_raw_data extension.

    - -

    Definition at line 68 of file raw_data.hpp.

    +

    Projects x on Normal.

    +

    From GLM_GTX_projection extension.

    - -
    -
    - - - - -
    typedef uint16 word
    -
    -
    - -

    Type for word numbers.

    -

    From GLM_GTX_raw_data extension.

    - -

    Definition at line 60 of file raw_data.hpp.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00198.html b/doc/api/a00198.html index 38d8255f..92e8eed4 100644 --- a/doc/api/a00198.html +++ b/doc/api/a00198.html @@ -2,333 +2,651 @@ - -GLM_GTX_reciprocal: Reciprocal + +GLM_GTX_quaternion + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_reciprocal: Reciprocal
    -
    +
    GLM_GTX_quaternion
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType acot (genType const &x)
    template<typename genType >
    genType acoth (genType const &x)
    template<typename genType >
    genType acsc (genType const &x)
    template<typename genType >
    genType acsch (genType const &x)
    template<typename genType >
    genType asec (genType const &x)
    template<typename genType >
    genType asech (genType const &x)
    template<typename genType >
    genType cot (genType const &angle)
    template<typename genType >
    genType coth (genType const &angle)
    template<typename genType >
    genType csc (genType const &angle)
    template<typename genType >
    genType csch (genType const &angle)
    template<typename genType >
    genType sec (genType const &angle)
    template<typename genType >
    genType sech (genType const &angle)
    template<typename valType >
    detail::tvec3< valType > cross (detail::tquat< valType > const &q, detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tvec3< valType > cross (detail::tvec3< valType > const &v, detail::tquat< valType > const &q)
     
    template<typename valType >
    detail::tvec3< valType > eulerAngles (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > exp (detail::tquat< valType > const &q, valType const &exponent)
     
    template<typename valType >
    valType extractRealComponent (detail::tquat< valType > const &q)
     
    template<typename T >
    detail::tquat< T > fastMix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
     
    template<typename valType >
    detail::tquat< valType > intermediate (detail::tquat< valType > const &prev, detail::tquat< valType > const &curr, detail::tquat< valType > const &next)
     
    template<typename valType >
    detail::tquat< valType > log (detail::tquat< valType > const &q)
     
    template<typename valType >
    valType pitch (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > pow (detail::tquat< valType > const &x, valType const &y)
     
    template<typename valType >
    valType roll (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tvec3< valType > rotate (detail::tquat< valType > const &q, detail::tvec3< valType > const &v)
     
    template<typename valType >
    detail::tvec4< valType > rotate (detail::tquat< valType > const &q, detail::tvec4< valType > const &v)
     
    template<typename T >
    detail::tquat< T > shortMix (detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
     
    template<typename valType >
    detail::tquat< valType > squad (detail::tquat< valType > const &q1, detail::tquat< valType > const &q2, detail::tquat< valType > const &s1, detail::tquat< valType > const &s2, valType const &h)
     
    template<typename valType >
    detail::tmat3x3< valType > toMat3 (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tmat4x4< valType > toMat4 (detail::tquat< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > toQuat (detail::tmat3x3< valType > const &x)
     
    template<typename valType >
    detail::tquat< valType > toQuat (detail::tmat4x4< valType > const &x)
     
    template<typename valType >
    valType yaw (detail::tquat< valType > const &x)
     
    -

    Detailed Description

    -

    Define secant, cosecant and cotangent functions.

    -

    <glm/gtx/reciprocal.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Extented quaternion types and functions.

    +

    <glm/gtx/quaternion.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - + + + + + + + + + + + + + + +
    genType glm::acot detail::tvec3<valType> glm::cross (genType const & detail::tquat< valType > const & q,
    detail::tvec3< valType > const & v 
    )
    +
    + +

    Compute a cross product between a quaternion and a vector.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec3<valType> glm::cross (detail::tvec3< valType > const & v,
    detail::tquat< valType > const & q 
    )
    +
    + +

    Compute a cross product between a vector and a quaternion.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + +
    detail::tvec3<valType> glm::eulerAngles (detail::tquat< valType > const &  x)
    -
    -
    +
    -

    Inverse cotangent function.

    -

    From GLM_GTX_reciprocal extension.

    +

    Returns euler angles, yitch as x, yaw as y, roll as z.

    +
    See Also
    GLM_GTX_quaternion
    - +
    - + - + + + + + + + + + + + + + + +
    genType glm::acoth detail::tquat<valType> glm::exp (genType const & detail::tquat< valType > const & q,
    valType const & exponent 
    )
    +
    + +

    Returns a exp of a quaternion.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    valType glm::extractRealComponent (detail::tquat< valType > const & q)
    +
    + +

    Extract the real component of a quaternion.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tquat<T> glm::fastMix (detail::tquat< T > const & x,
    detail::tquat< T > const & y,
    T const & a 
    )
    +
    + +

    Quaternion normalized linear interpolation.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tquat<valType> glm::intermediate (detail::tquat< valType > const & prev,
    detail::tquat< valType > const & curr,
    detail::tquat< valType > const & next 
    )
    +
    + +

    Returns an intermediate control point for squad interpolation.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    detail::tquat<valType> glm::log (detail::tquat< valType > const & q)
    +
    + +

    Returns a log of a quaternion.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + +
    valType glm::pitch (detail::tquat< valType > const &  x)
    -
    -
    +
    -

    Inverse cotangent hyperbolic function.

    -

    From GLM_GTX_reciprocal extension.

    +

    Returns pitch value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.

    +
    See Also
    GLM_GTX_quaternion
    - +
    - + - + + + + + + + + + + + + + + +
    genType glm::acsc detail::tquat<valType> glm::pow (genType const & detail::tquat< valType > const & x,
    valType const & y 
    )
    +
    + +

    Returns x raised to the y power.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + +
    valType glm::roll (detail::tquat< valType > const &  x)
    -
    -
    +
    -

    Inverse cosecant function.

    -

    From GLM_GTX_reciprocal extension.

    +

    Returns roll value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.

    +
    See Also
    GLM_GTX_quaternion
    - +
    - + - + + + + + + + + + + + + + + +
    genType glm::acsch detail::tvec3<valType> glm::rotate (genType const & detail::tquat< valType > const & q,
    detail::tvec3< valType > const & v 
    )
    +
    + +

    Returns quarternion square root.

    +
    See Also
    GLM_GTX_quaternion Rotates a 3 components vector by a quaternion.
    +
    +GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec4<valType> glm::rotate (detail::tquat< valType > const & q,
    detail::tvec4< valType > const & v 
    )
    +
    + +

    Rotates a 4 components vector by a quaternion.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tquat<T> glm::shortMix (detail::tquat< T > const & x,
    detail::tquat< T > const & y,
    T const & a 
    )
    +
    + +

    Quaternion interpolation using the rotation short path.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tquat<valType> glm::squad (detail::tquat< valType > const & q1,
    detail::tquat< valType > const & q2,
    detail::tquat< valType > const & s1,
    detail::tquat< valType > const & s2,
    valType const & h 
    )
    +
    + +

    Compute a point on a path according squad equation.

    +

    q1 and q2 are control points; s1 and s2 are intermediate control points.

    +
    See Also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + +
    detail::tmat3x3<valType> glm::toMat3 (detail::tquat< valType > const &  x)
    -
    -
    +
    -

    Inverse cosecant hyperbolic function.

    -

    From GLM_GTX_reciprocal extension.

    +

    Converts a quaternion to a 3 * 3 matrix.

    +
    See Also
    GLM_GTX_quaternion
    + +

    Definition at line 177 of file gtx/quaternion.hpp.

    + +

    References glm::mat3_cast().

    - +
    - + - +
    genType glm::asec detail::tmat4x4<valType> glm::toMat4 (genType const & detail::tquat< valType > const &  x)
    -
    -
    +
    -

    Inverse secant function.

    -

    From GLM_GTX_reciprocal extension.

    +

    Converts a quaternion to a 4 * 4 matrix.

    +
    See Also
    GLM_GTX_quaternion
    + +

    Definition at line 184 of file gtx/quaternion.hpp.

    + +

    References glm::mat4_cast().

    - +
    - + - +
    genType glm::asech detail::tquat<valType> glm::toQuat (genType const & detail::tmat3x3< valType > const &  x)
    -
    -
    +
    -

    Inverse secant hyperbolic function.

    -

    From GLM_GTX_reciprocal extension.

    +

    Converts a 3 * 3 matrix to a quaternion.

    +
    See Also
    GLM_GTX_quaternion
    + +

    Definition at line 191 of file gtx/quaternion.hpp.

    + +

    References glm::quat_cast().

    - +
    - + - - + +
    genType glm::cot detail::tquat<valType> glm::toQuat (genType const & angle)detail::tmat4x4< valType > const & x)
    -
    -
    +
    -

    Cotangent function.

    -

    adjacent / opposite or 1 / tan(x) From GLM_GTX_reciprocal extension.

    +

    Converts a 4 * 4 matrix to a quaternion.

    +
    See Also
    GLM_GTX_quaternion
    + +

    Definition at line 198 of file gtx/quaternion.hpp.

    + +

    References glm::quat_cast().

    - +
    - + - - + +
    genType glm::coth valType glm::yaw (genType const & angle)detail::tquat< valType > const & x)
    -
    -
    +
    -

    Cotangent hyperbolic function.

    -

    From GLM_GTX_reciprocal extension.

    +

    Returns yaw value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.

    +
    See Also
    GLM_GTX_quaternion
    - -
    -
    - - - - - - - - -
    genType glm::csc (genType const & angle)
    -
    -
    - -

    Cosecant function.

    -

    hypotenuse / opposite or 1 / sin(x) From GLM_GTX_reciprocal extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::csch (genType const & angle)
    -
    -
    - -

    Cosecant hyperbolic function.

    -

    From GLM_GTX_reciprocal extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::sec (genType const & angle)
    -
    -
    - -

    Secant function.

    -

    hypotenuse / adjacent or 1 / cos(x) From GLM_GTX_reciprocal extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::sech (genType const & angle)
    -
    -
    - -

    Secant hyperbolic function.

    -

    From GLM_GTX_reciprocal extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00199.html b/doc/api/a00199.html index 710e5272..a3f16b84 100644 --- a/doc/api/a00199.html +++ b/doc/api/a00199.html @@ -2,401 +2,132 @@ - -GLM_GTX_rotate_vector: Rotate vector + +GLM_GTX_raw_data + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Typedefs
    -
    GLM_GTX_rotate_vector: Rotate vector
    -
    GTX Extensions (Experimental)
    +
    GLM_GTX_raw_data
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + +

    -Functions

    template<typename T >
    detail::tmat4x4< T > orientation (detail::tvec3< T > const &Normal, detail::tvec3< T > const &Up)
    template<typename T >
    detail::tvec2< T > rotate (detail::tvec2< T > const &v, T const &angle)
    template<typename T >
    detail::tvec3< T > rotate (detail::tvec3< T > const &v, T const &angle, detail::tvec3< T > const &normal)
    template<typename T >
    detail::tvec4< T > rotate (detail::tvec4< T > const &v, T const &angle, detail::tvec3< T > const &normal)
    template<typename T >
    detail::tvec3< T > rotateX (detail::tvec3< T > const &v, T const &angle)
    template<typename T >
    detail::tvec4< T > rotateX (detail::tvec4< T > const &v, T const &angle)
    template<typename T >
    detail::tvec3< T > rotateY (detail::tvec3< T > const &v, T const &angle)
    template<typename T >
    detail::tvec4< T > rotateY (detail::tvec4< T > const &v, T const &angle)
    template<typename T >
    detail::tvec3< T > rotateZ (detail::tvec3< T > const &v, T const &angle)
    template<typename T >
    detail::tvec4< T > rotateZ (detail::tvec4< T > const &v, T const &angle)

    +Typedefs

    typedef uint8 byte
     
    typedef uint32 dword
     
    typedef uint64 qword
     
    typedef uint16 word
     
    -

    Detailed Description

    -

    Function to directly rotate a vector.

    -

    <glm/gtx/rotate_vector.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Projection of a vector to other one.

    +

    <glm/gtx/raw_data.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - - - - - - - - - - - - - - - +
    detail::tmat4x4<T> glm::orientation (detail::tvec3< T > const & Normal,
    detail::tvec3< T > const & Up 
    )typedef uint8 byte
    -
    -
    +
    -

    Build a rotation matrix from a normal and a up vector.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Type for byte numbers.

    +

    From GLM_GTX_raw_data extension.

    + +

    Definition at line 56 of file raw_data.hpp.

    - +
    - - - - - - - - - - - - - - - +
    detail::tvec2<T> glm::rotate (detail::tvec2< T > const & v,
    T const & angle 
    )typedef uint32 dword
    -
    -
    +
    -

    Rotate a two dimensional vector.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Type for dword numbers.

    +

    From GLM_GTX_raw_data extension.

    + +

    Definition at line 64 of file raw_data.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tvec3<T> glm::rotate (detail::tvec3< T > const & v,
    T const & angle,
    detail::tvec3< T > const & normal 
    )typedef uint64 qword
    -
    -
    +
    -

    Rotate a three dimensional vector around an axis.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Type for qword numbers.

    +

    From GLM_GTX_raw_data extension.

    + +

    Definition at line 68 of file raw_data.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tvec4<T> glm::rotate (detail::tvec4< T > const & v,
    T const & angle,
    detail::tvec3< T > const & normal 
    )typedef uint16 word
    -
    -
    +
    -

    Rotate a four dimensional vector around an axis.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Type for word numbers.

    +

    From GLM_GTX_raw_data extension.

    + +

    Definition at line 60 of file raw_data.hpp.

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T> glm::rotateX (detail::tvec3< T > const & v,
    T const & angle 
    )
    -
    -
    - -

    Rotate a three dimensional vector around the X axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<T> glm::rotateX (detail::tvec4< T > const & v,
    T const & angle 
    )
    -
    -
    - -

    Rotate a four dimentionnals vector around the X axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T> glm::rotateY (detail::tvec3< T > const & v,
    T const & angle 
    )
    -
    -
    - -

    Rotate a three dimensional vector around the Y axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<T> glm::rotateY (detail::tvec4< T > const & v,
    T const & angle 
    )
    -
    -
    - -

    Rotate a four dimensional vector around the X axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T> glm::rotateZ (detail::tvec3< T > const & v,
    T const & angle 
    )
    -
    -
    - -

    Rotate a three dimensional vector around the Z axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<T> glm::rotateZ (detail::tvec4< T > const & v,
    T const & angle 
    )
    -
    -
    - -

    Rotate a four dimensional vector around the X axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00200.html b/doc/api/a00200.html index 412bfaf2..a223199d 100644 --- a/doc/api/a00200.html +++ b/doc/api/a00200.html @@ -2,61 +2,388 @@ - -GLM_GTX_simd_mat4: SIMD mat4 type and functions + +GLM_GTX_rotate_vector + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +
    -
    GLM_GTX_simd_mat4: SIMD mat4 type and functions
    -
    +
    GLM_GTX_rotate_vector
    +
    GTX Extensions (Experimental)
    -

    SIMD implementation of mat4 type.

    -

    <glm/gtx/simd_mat4.hpp> need to be included to use these functionalities.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    detail::tmat4x4< T > orientation (detail::tvec3< T > const &Normal, detail::tvec3< T > const &Up)
     
    template<typename T >
    detail::tvec2< T > rotate (detail::tvec2< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec3< T > rotate (detail::tvec3< T > const &v, T const &angle, detail::tvec3< T > const &normal)
     
    template<typename T >
    detail::tvec4< T > rotate (detail::tvec4< T > const &v, T const &angle, detail::tvec3< T > const &normal)
     
    template<typename T >
    detail::tvec3< T > rotateX (detail::tvec3< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec4< T > rotateX (detail::tvec4< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec3< T > rotateY (detail::tvec3< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec4< T > rotateY (detail::tvec4< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec3< T > rotateZ (detail::tvec3< T > const &v, T const &angle)
     
    template<typename T >
    detail::tvec4< T > rotateZ (detail::tvec4< T > const &v, T const &angle)
     
    +

    Detailed Description

    +

    Function to directly rotate a vector.

    +

    <glm/gtx/rotate_vector.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::orientation (detail::tvec3< T > const & Normal,
    detail::tvec3< T > const & Up 
    )
    +
    + +

    Build a rotation matrix from a normal and a up vector.

    +

    From GLM_GTX_rotate_vector extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec2<T> glm::rotate (detail::tvec2< T > const & v,
    T const & angle 
    )
    +
    +

    Rotate a two dimensional vector.

    +

    From GLM_GTX_rotate_vector extension.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tvec3<T> glm::rotate (detail::tvec3< T > const & v,
    T const & angle,
    detail::tvec3< T > const & normal 
    )
    +
    + +

    Rotate a three dimensional vector around an axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tvec4<T> glm::rotate (detail::tvec4< T > const & v,
    T const & angle,
    detail::tvec3< T > const & normal 
    )
    +
    + +

    Rotate a four dimensional vector around an axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec3<T> glm::rotateX (detail::tvec3< T > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a three dimensional vector around the X axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec4<T> glm::rotateX (detail::tvec4< T > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a four dimentionnals vector around the X axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec3<T> glm::rotateY (detail::tvec3< T > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a three dimensional vector around the Y axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec4<T> glm::rotateY (detail::tvec4< T > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a four dimensional vector around the X axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec3<T> glm::rotateZ (detail::tvec3< T > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a three dimensional vector around the Z axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tvec4<T> glm::rotateZ (detail::tvec4< T > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a four dimensional vector around the X axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    +
    + - diff --git a/doc/api/a00201.html b/doc/api/a00201.html index c43a10cf..e452a8d3 100644 --- a/doc/api/a00201.html +++ b/doc/api/a00201.html @@ -2,61 +2,48 @@ - -GLM_GTX_simd_vec4: SIMD vec4 type and functions + +GLM_GTX_simd_mat4 + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_simd_vec4: SIMD vec4 type and functions
    -
    +
    GLM_GTX_simd_mat4
    +
    GTX Extensions (Experimental)
    -

    SIMD implementation of vec4 type.

    -

    <glm/gtx/simd_vec4.hpp> need to be included to use these functionalities.

    -
    - - +

    SIMD implementation of mat4 type.

    +

    <glm/gtx/simd_mat4.hpp> need to be included to use these functionalities.

    + + - diff --git a/doc/api/a00202.html b/doc/api/a00202.html index 92a2e7bc..f85f6972 100644 --- a/doc/api/a00202.html +++ b/doc/api/a00202.html @@ -2,219 +2,48 @@ - -GLM_GTX_spline: Spline + +GLM_GTX_simd_vec4 + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    -
    GLM_GTX_spline: Spline
    -
    +
    GLM_GTX_simd_vec4
    +
    GTX Extensions (Experimental)
    - - - - - - - - -

    -Functions

    template<typename genType >
    genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
    template<typename genType >
    genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
    template<typename genType >
    genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
    -

    Detailed Description

    -

    Spline functions.

    -

    <glm/gtx/spline.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::catmullRom (genType const & v1,
    genType const & v2,
    genType const & v3,
    genType const & v4,
    typename genType::value_type const & s 
    )
    -
    -
    - -

    Return a point from a catmull rom curve.

    -

    From GLM_GTX_spline extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::cubic (genType const & v1,
    genType const & v2,
    genType const & v3,
    genType const & v4,
    typename genType::value_type const & s 
    )
    -
    -
    - -

    Return a point from a cubic curve.

    -

    From GLM_GTX_spline extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::hermite (genType const & v1,
    genType const & t1,
    genType const & v2,
    genType const & t2,
    typename genType::value_type const & s 
    )
    -
    -
    - -

    Return a point from a hermite curve.

    -

    From GLM_GTX_spline extension.

    - -
    -
    -
    - - +

    SIMD implementation of vec4 type.

    +

    <glm/gtx/simd_vec4.hpp> need to be included to use these functionalities.

    + + - diff --git a/doc/api/a00203.html b/doc/api/a00203.html index bec7d4cb..e8159dbc 100644 --- a/doc/api/a00203.html +++ b/doc/api/a00203.html @@ -2,189 +2,206 @@ - -GLM_GTX_std_based_type: Add types based on STL + +GLM_GTX_spline + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Functions
    -
    GLM_GTX_std_based_type: Add types based on STL
    -
    GTX Extensions (Experimental)
    +
    GLM_GTX_spline
    +
    GTX Extensions (Experimental)
    - - - - - - - + + + + + + + + + +

    -Typedefs

    typedef detail::tvec2
    -< std::size_t > 
    size2
    typedef detail::tvec2
    -< std::size_t > 
    size2_t
    typedef detail::tvec3
    -< std::size_t > 
    size3
    typedef detail::tvec3
    -< std::size_t > 
    size3_t
    typedef detail::tvec4
    -< std::size_t > 
    size4
    typedef detail::tvec4
    -< std::size_t > 
    size4_t

    +Functions

    template<typename genType >
    genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
     
    -

    Detailed Description

    -

    Adds vector types based on STL value types.

    -

    <glm/gtx/std_based_type.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    Detailed Description

    +

    Spline functions.

    +

    <glm/gtx/spline.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    typedef detail::tvec2<std::size_t> size2genType glm::catmullRom (genType const & v1,
    genType const & v2,
    genType const & v3,
    genType const & v4,
    typename genType::value_type const & s 
    )
    -
    -
    +
    -

    Vector type based of two std::size_t components.

    -
    See also:
    - GLM_GTX_std_based_type
    - -

    Definition at line 56 of file std_based_type.hpp.

    +

    Return a point from a catmull rom curve.

    +

    From GLM_GTX_spline extension.

    - +
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    typedef detail::tvec2<std::size_t> size2_tgenType glm::cubic (genType const & v1,
    genType const & v2,
    genType const & v3,
    genType const & v4,
    typename genType::value_type const & s 
    )
    -
    -
    +
    -

    Vector type based of two std::size_t components.

    -
    See also:
    - GLM_GTX_std_based_type
    - -

    Definition at line 68 of file std_based_type.hpp.

    +

    Return a point from a cubic curve.

    +

    From GLM_GTX_spline extension.

    - +
    - + + + + -
    typedef detail::tvec3<std::size_t> size3genType glm::hermite (genType const & v1,
    -
    -
    - -

    Vector type based of three std::size_t components.

    -
    See also:
    - GLM_GTX_std_based_type
    - -

    Definition at line 60 of file std_based_type.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::tvec3<std::size_t> size3_tgenType const & t1,
    -
    -
    - -

    Vector type based of three std::size_t components.

    -
    See also:
    - GLM_GTX_std_based_type
    - -

    Definition at line 72 of file std_based_type.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::tvec4<std::size_t> size4genType const & v2,
    -
    -
    - -

    Vector type based of four std::size_t components.

    -
    See also:
    - GLM_GTX_std_based_type
    - -

    Definition at line 64 of file std_based_type.hpp.

    - -
    -
    - -
    -
    - - + + + + + + + + + + + + + + +
    typedef detail::tvec4<std::size_t> size4_tgenType const & t2,
    typename genType::value_type const & s 
    )
    -
    -
    +
    -

    Vector type based of four std::size_t components.

    -
    See also:
    - GLM_GTX_std_based_type
    - -

    Definition at line 76 of file std_based_type.hpp.

    +

    Return a point from a hermite curve.

    +

    From GLM_GTX_spline extension.

    -
    - - + + - diff --git a/doc/api/a00204.html b/doc/api/a00204.html index ca39c8f3..1ac062f1 100644 --- a/doc/api/a00204.html +++ b/doc/api/a00204.html @@ -2,91 +2,176 @@ - -GLM_GTX_string_cast: String cast + +GLM_GTX_std_based_type + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    +Typedefs
    -
    GLM_GTX_string_cast: String cast
    -
    GTX Extensions (Experimental)
    +
    GLM_GTX_std_based_type
    +
    GTX Extensions (Experimental)
    - - - + + + + + + + + + + + + +

    -Functions

    template<typename genType >
    std::string to_string (genType const &x)

    +Typedefs

    typedef detail::tvec2
    +< std::size_t > 
    size2
     
    typedef detail::tvec2
    +< std::size_t > 
    size2_t
     
    typedef detail::tvec3
    +< std::size_t > 
    size3
     
    typedef detail::tvec3
    +< std::size_t > 
    size3_t
     
    typedef detail::tvec4
    +< std::size_t > 
    size4
     
    typedef detail::tvec4
    +< std::size_t > 
    size4_t
     
    -

    Detailed Description

    -

    Setup strings for GLM type values.

    -

    <glm/gtx/string_cast.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Adds vector types based on STL value types.

    +

    <glm/gtx/std_based_type.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - - - - - +
    std::string glm::to_string (genType const & x)typedef detail::tvec2<std::size_t> size2
    -
    -
    +
    -

    Create a string from a GLM type value.

    -

    From GLM_GTX_string_cast extension.

    +

    Vector type based of two std::size_t components.

    +
    See Also
    GLM_GTX_std_based_type
    + +

    Definition at line 56 of file std_based_type.hpp.

    + +
    +
    + + + + +
    typedef detail::tvec2<std::size_t> size2_t
    +
    + +

    Vector type based of two std::size_t components.

    +
    See Also
    GLM_GTX_std_based_type
    + +

    Definition at line 68 of file std_based_type.hpp.

    +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<std::size_t> size3
    +
    +

    Vector type based of three std::size_t components.

    +
    See Also
    GLM_GTX_std_based_type
    +

    Definition at line 60 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec3<std::size_t> size3_t
    +
    + +

    Vector type based of three std::size_t components.

    +
    See Also
    GLM_GTX_std_based_type
    + +

    Definition at line 72 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<std::size_t> size4
    +
    + +

    Vector type based of four std::size_t components.

    +
    See Also
    GLM_GTX_std_based_type
    + +

    Definition at line 64 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::tvec4<std::size_t> size4_t
    +
    + +

    Vector type based of four std::size_t components.

    +
    See Also
    GLM_GTX_std_based_type
    + +

    Definition at line 76 of file std_based_type.hpp.

    + +
    +
    +
    + - diff --git a/doc/api/a00205.html b/doc/api/a00205.html index d415c0e5..69e49478 100644 --- a/doc/api/a00205.html +++ b/doc/api/a00205.html @@ -2,421 +2,78 @@ - -GLM_GTX_transform: Extented transformation matrices + +GLM_GTX_string_cast + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_transform: Extented transformation matrices
    -
    +
    GLM_GTX_string_cast
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - + + +

    +

    Functions

    template<typename T >
    detail::tmat4x4< T > rotate (T angle, T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > rotate (T angle, detail::tvec3< T > const &v)
    template<typename T >
    detail::tmat4x4< T > rotate (detail::tmat4x4< T > const &m, T angle, T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > scale (T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > scale (detail::tmat4x4< T > const &m, T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > scale (detail::tvec3< T > const &v)
    template<typename T >
    detail::tmat4x4< T > translate (T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > translate (detail::tmat4x4< T > const &m, T x, T y, T z)
    template<typename T >
    detail::tmat4x4< T > translate (detail::tvec3< T > const &v)
    template<typename genType >
    std::string to_string (genType const &x)
     
    -

    Detailed Description

    -

    Add transformation matrices.

    -

    <glm/gtx/transform.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Setup strings for GLM type values.

    +

    <glm/gtx/string_cast.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::rotate std::string glm::to_string (angle,
    x,
    y,
    z 
    )
    -
    -
    - -

    Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

    - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::rotate (angle,
    detail::tvec3< T > const & v 
    )
    -
    -
    - -

    Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

    - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::rotate (detail::tmat4x4< T > const & m,
    angle,
    x,
    y,
    z 
    )
    -
    -
    - -

    Transforms a matrix with a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

    - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::scale (x,
    y,
    z 
    )
    -
    -
    - -

    Builds a scale 4 * 4 matrix created from 3 scalars.

    - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::scale (detail::tmat4x4< T > const & m,
    x,
    y,
    z 
    )
    -
    -
    - -

    Transforms a matrix with a scale 4 * 4 matrix created from 3 scalars.

    - - -
    -
    - -
    -
    - - - - - - + +
    detail::tmat4x4<T> glm::scale (detail::tvec3< T > const & v)genType const & x)
    -
    -
    +
    -

    Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.

    - +

    Create a string from a GLM type value.

    +

    From GLM_GTX_string_cast extension.

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::translate (x,
    y,
    z 
    )
    -
    -
    - -

    Builds a translation 4 * 4 matrix created from 3 scalars.

    - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::translate (detail::tmat4x4< T > const & m,
    x,
    y,
    z 
    )
    -
    -
    - -

    Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.

    - - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T> glm::translate (detail::tvec3< T > const & v)
    -
    -
    - -

    Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.

    - - -
    -
    -
    - - + + - diff --git a/doc/api/a00206.html b/doc/api/a00206.html index 6bed327b..0cd074be 100644 --- a/doc/api/a00206.html +++ b/doc/api/a00206.html @@ -2,244 +2,92 @@ - -GLM_GTX_transform2: Extra transformation matrices + +GLM_GTX_transform + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_transform2: Extra transformation matrices
    -
    +
    GLM_GTX_transform
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    detail::tmat3x3< T > proj2D (const detail::tmat3x3< T > &m, const detail::tvec3< T > &normal)
    template<typename T >
    detail::tmat4x4< T > proj3D (const detail::tmat4x4< T > &m, const detail::tvec3< T > &normal)
    template<typename valType >
    detail::tmat4x4< valType > scaleBias (valType scale, valType bias)
    template<typename valType >
    detail::tmat4x4< valType > scaleBias (detail::tmat4x4< valType > const &m, valType scale, valType bias)
    template<typename T >
    detail::tmat3x3< T > shearX2D (detail::tmat3x3< T > const &m, T y)
    template<typename T >
    detail::tmat4x4< T > shearX3D (const detail::tmat4x4< T > &m, T y, T z)
    template<typename T >
    detail::tmat3x3< T > shearY2D (detail::tmat3x3< T > const &m, T x)
    template<typename T >
    detail::tmat4x4< T > shearY3D (const detail::tmat4x4< T > &m, T x, T z)
    template<typename T >
    detail::tmat4x4< T > shearZ3D (const detail::tmat4x4< T > &m, T x, T y)
    template<typename T >
    detail::tmat4x4< T > rotate (T angle, T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > rotate (T angle, detail::tvec3< T > const &v)
     
    template<typename T >
    detail::tmat4x4< T > rotate (detail::tmat4x4< T > const &m, T angle, T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > scale (T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > scale (detail::tmat4x4< T > const &m, T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > scale (detail::tvec3< T > const &v)
     
    template<typename T >
    detail::tmat4x4< T > translate (T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > translate (detail::tmat4x4< T > const &m, T x, T y, T z)
     
    template<typename T >
    detail::tmat4x4< T > translate (detail::tvec3< T > const &v)
     
    -

    Detailed Description

    -

    Add extra transformation matrices.

    -

    <glm/gtx/transform2.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Add transformation matrices.

    +

    <glm/gtx/transform.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - - - - - - - - - - - - - -
    detail::tmat3x3<T> glm::proj2D detail::tmat4x4<T> glm::rotate (const detail::tmat3x3< T > & m,
    const detail::tvec3< T > & normal 
    )
    -
    -
    - -

    Build planar projection matrix along normal axis.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T> glm::proj3D (const detail::tmat4x4< T > & m,
    const detail::tvec3< T > & normal 
    )
    -
    -
    - -

    Build planar projection matrix along normal axis.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType> glm::scaleBias (valType scale,
    valType bias 
    )
    -
    -
    - -

    Build a scale bias matrix.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType> glm::scaleBias (detail::tmat4x4< valType > const & m,
    valType scale,
    valType bias 
    )
    -
    -
    - -

    Build a scale bias matrix.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - + + - - - - - - - -
    detail::tmat3x3<T> glm::shearX2D (detail::tmat3x3< T > const & m, angle,
    y 
    )
    -
    -
    - -

    Transforms a matrix with a shearing on X axis.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - + @@ -259,28 +107,30 @@ Functions
    detail::tmat4x4<T> glm::shearX3D (const detail::tmat4x4< T > & m, x,
    -
    -
    +
    -

    Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.

    +

    Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

    +
    - +
    - + - - + + - - + + @@ -288,30 +138,43 @@ Functions
    detail::tmat3x3<T> glm::shearY2D detail::tmat4x4<T> glm::rotate (detail::tmat3x3< T > const & m, angle,
    x detail::tvec3< T > const & v 
    -
    -
    +
    -

    Transforms a matrix with a shearing on Y axis.

    -

    From GLM_GTX_transform2 extension.

    +

    Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

    +
    - +
    - + - + + + + + + + + + + + + + @@ -324,22 +187,60 @@ Functions
    detail::tmat4x4<T> glm::shearY3D detail::tmat4x4<T> glm::rotate (const detail::tmat4x4< T > & detail::tmat4x4< T > const &  m,
    angle,
    x,
    y,
    -
    -
    +
    -

    Transforms a matrix with a shearing on Y axis.

    -

    From GLM_GTX_transform2 extension.

    +

    Transforms a matrix with a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

    +
    - +
    - + - + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::shearZ3D detail::tmat4x4<T> glm::scale (const detail::tmat4x4< T > & x,
    y,
    z 
    )
    +
    + +

    Builds a scale 4 * 4 matrix created from 3 scalars.

    + + +
    +
    + +
    +
    + + + + + @@ -352,7 +253,13 @@ Functions - + + + + + + + @@ -360,22 +267,143 @@ Functions
    detail::tmat4x4<T> glm::scale (detail::tmat4x4< T > const &  m,
    y y,
    z 
    -
    -
    +
    -

    Transforms a matrix with a shearing on Z axis.

    -

    From GLM_GTX_transform2 extension.

    +

    Transforms a matrix with a scale 4 * 4 matrix created from 3 scalars.

    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::scale (detail::tvec3< T > const & v)
    +
    + +

    Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::translate (x,
    y,
    z 
    )
    +
    +

    Builds a translation 4 * 4 matrix created from 3 scalars.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::translate (detail::tmat4x4< T > const & m,
    x,
    y,
    z 
    )
    +
    + +

    Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.

    + + +
    +
    + +
    +
    + + + + + + + + +
    detail::tmat4x4<T> glm::translate (detail::tvec3< T > const & v)
    +
    + +

    Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.

    + + +
    +
    +
    + - diff --git a/doc/api/a00207.html b/doc/api/a00207.html index 02d3c562..8aa9dfe9 100644 --- a/doc/api/a00207.html +++ b/doc/api/a00207.html @@ -2,87 +2,213 @@ - -GLM_GTX_ulp: Accuracy measurement + +GLM_GTX_transform2 + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_ulp: Accuracy measurement
    -
    +
    GLM_GTX_transform2
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename T >
    uint float_distance (T const &x, T const &y)
    template<typename T , template< typename > class vecType>
    vecType< uint > float_distance (vecType< T > const &x, vecType< T > const &y)
    template<typename genType >
    genType next_float (genType const &x)
    template<typename genType >
    genType next_float (genType const &x, uint const &Distance)
    template<typename genType >
    genType prev_float (genType const &x)
    template<typename genType >
    genType prev_float (genType const &x, uint const &Distance)
    template<typename T >
    detail::tmat3x3< T > proj2D (const detail::tmat3x3< T > &m, const detail::tvec3< T > &normal)
     
    template<typename T >
    detail::tmat4x4< T > proj3D (const detail::tmat4x4< T > &m, const detail::tvec3< T > &normal)
     
    template<typename valType >
    detail::tmat4x4< valType > scaleBias (valType scale, valType bias)
     
    template<typename valType >
    detail::tmat4x4< valType > scaleBias (detail::tmat4x4< valType > const &m, valType scale, valType bias)
     
    template<typename T >
    detail::tmat3x3< T > shearX2D (detail::tmat3x3< T > const &m, T y)
     
    template<typename T >
    detail::tmat4x4< T > shearX3D (const detail::tmat4x4< T > &m, T y, T z)
     
    template<typename T >
    detail::tmat3x3< T > shearY2D (detail::tmat3x3< T > const &m, T x)
     
    template<typename T >
    detail::tmat4x4< T > shearY3D (const detail::tmat4x4< T > &m, T x, T z)
     
    template<typename T >
    detail::tmat4x4< T > shearZ3D (const detail::tmat4x4< T > &m, T x, T y)
     
    -

    Detailed Description

    -

    Allow the measurement of the accuracy of a function against a reference implementation.

    -

    This extension works on floating-point data and provide results in ULP. <glm/gtx/ulp.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Detailed Description

    +

    Add extra transformation matrices.

    +

    <glm/gtx/transform2.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + - - + + - + + + + + + + + +
    uint glm::float_distance detail::tmat3x3<T> glm::proj2D (T const & x, const detail::tmat3x3< T > & m,
    T const & const detail::tvec3< T > & normal 
    )
    +
    + +

    Build planar projection matrix along normal axis.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T> glm::proj3D (const detail::tmat4x4< T > & m,
    const detail::tvec3< T > & normal 
    )
    +
    + +

    Build planar projection matrix along normal axis.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<valType> glm::scaleBias (valType scale,
    valType bias 
    )
    +
    + +

    Build a scale bias matrix.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<valType> glm::scaleBias (detail::tmat4x4< valType > const & m,
    valType scale,
    valType bias 
    )
    +
    + +

    Build a scale bias matrix.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + @@ -91,28 +217,131 @@ Functions
    detail::tmat3x3<T> glm::shearX2D (detail::tmat3x3< T > const & m,
    y 
    -
    -
    +
    -

    Return the distance in the number of ULP between 2 scalars.

    -

    From GLM_GTX_ulp extension.

    +

    Transforms a matrix with a shearing on X axis.

    +

    From GLM_GTX_transform2 extension.

    - +
    - + - + + + + + + + + + + + + + + + + + + + + +
    vecType<uint> glm::float_distance detail::tmat4x4<T> glm::shearX3D (vecType< T > const & const detail::tmat4x4< T > & m,
    y,
    z 
    )
    +
    + +

    Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    detail::tmat3x3<T> glm::shearY2D (detail::tmat3x3< T > const & m,
    x 
    )
    +
    + +

    Transforms a matrix with a shearing on Y axis.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + - + + + + + + + + +
    detail::tmat4x4<T> glm::shearY3D (const detail::tmat4x4< T > & m,
    x,
    vecType< T > const & z 
    )
    +
    + +

    Transforms a matrix with a shearing on Y axis.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + @@ -121,122 +350,19 @@ Functions
    detail::tmat4x4<T> glm::shearZ3D (const detail::tmat4x4< T > & m,
    x,
    y 
    -
    -
    +
    -

    Return the distance in the number of ULP between 2 vectors.

    -

    From GLM_GTX_ulp extension.

    +

    Transforms a matrix with a shearing on Z axis.

    +

    From GLM_GTX_transform2 extension.

    - -
    -
    - - - - - - - - -
    genType glm::next_float (genType const & x)
    -
    -
    - -

    Return the next ULP value(s) after the input value(s).

    -

    From GLM_GTX_ulp extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::next_float (genType const & x,
    uint const & Distance 
    )
    -
    -
    - -

    Return the value(s) ULP distance after the input value(s).

    -

    From GLM_GTX_ulp extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::prev_float (genType const & x)
    -
    -
    - -

    Return the previous ULP value(s) before the input value(s).

    -

    From GLM_GTX_ulp extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::prev_float (genType const & x,
    uint const & Distance 
    )
    -
    -
    - -

    Return the value(s) ULP distance before the input value(s).

    -

    From GLM_GTX_ulp extension.

    - -
    -
    -
    - - + + - diff --git a/doc/api/a00208.html b/doc/api/a00208.html index 8e2f8aec..3343e80c 100644 --- a/doc/api/a00208.html +++ b/doc/api/a00208.html @@ -2,61 +2,48 @@ - -GLM_GTX_vec1: Add vec1 types + +GLM_GTX_vec1 + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_vec1: Add vec1 types
    -
    +
    GLM_GTX_vec1
    +
    GTX Extensions (Experimental)

    Add vec1, ivec1, uvec1 and bvec1 types.

    -

    <glm/gtx/vec1.hpp> need to be included to use these functionalities.

    -
    - - +

    <glm/gtx/vec1.hpp> need to be included to use these functionalities.

    + + - diff --git a/doc/api/a00209.html b/doc/api/a00209.html index c26fdb85..da866bbb 100644 --- a/doc/api/a00209.html +++ b/doc/api/a00209.html @@ -2,68 +2,60 @@ - -GLM_GTX_vector_access: Vector access + +GLM_GTX_vector_access + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_vector_access: Vector access
    -
    +
    GLM_GTX_vector_access
    +
    GTX Extensions (Experimental)
    - - - - - - - + + + + + + + + +

    +

    Functions

    template<typename valType >
    void set (detail::tvec2< valType > &v, valType const &x, valType const &y)
    template<typename valType >
    void set (detail::tvec3< valType > &v, valType const &x, valType const &y, valType const &z)
    template<typename valType >
    void set (detail::tvec4< valType > &v, valType const &x, valType const &y, valType const &z, valType const &w)
    template<typename valType >
    void set (detail::tvec2< valType > &v, valType const &x, valType const &y)
     
    template<typename valType >
    void set (detail::tvec3< valType > &v, valType const &x, valType const &y, valType const &z)
     
    template<typename valType >
    void set (detail::tvec4< valType > &v, valType const &x, valType const &y, valType const &z, valType const &w)
     
    -

    Detailed Description

    +

    Detailed Description

    Function to set values to vectors.

    -

    <glm/gtx/vector_access.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    <glm/gtx/vector_access.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    @@ -91,15 +83,14 @@ Functions
    -
    -
    +

    Set values to a 2 components vector.

    From GLM_GTX_vector_access extension.

    - +
    @@ -133,15 +124,14 @@ Functions
    -
    -
    +

    Set values to a 3 components vector.

    From GLM_GTX_vector_access extension.

    - +
    @@ -181,22 +171,19 @@ Functions
    -
    -
    +

    Set values to a 4 components vector.

    From GLM_GTX_vector_access extension.

    -
    - - + + - diff --git a/doc/api/a00210.html b/doc/api/a00210.html index fc7e3b19..85ecd529 100644 --- a/doc/api/a00210.html +++ b/doc/api/a00210.html @@ -2,69 +2,61 @@ - -GLM_GTX_vector_angle: Vector angle + +GLM_GTX_vector_angle + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_vector_angle: Vector angle
    -
    +
    GLM_GTX_vector_angle
    +
    GTX Extensions (Experimental)
    - - - + - - - - + + + + + + +

    +

    Functions

    template<typename vecType >
    GLM_FUNC_QUALIFIER
    +
    template<typename vecType >
    GLM_FUNC_QUALIFIER
    vecType::value_type 
    angle (vecType const &x, vecType const &y)
    template<typename T >
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec2< T > const &x, detail::tvec2< T > const &y)
    template<typename T >
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec3< T > const &x, detail::tvec3< T > const &y, detail::tvec3< T > const &ref)
     
    template<typename T >
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec2< T > const &x, detail::tvec2< T > const &y)
     
    template<typename T >
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec3< T > const &x, detail::tvec3< T > const &y, detail::tvec3< T > const &ref)
     
    -

    Detailed Description

    +

    Detailed Description

    Compute angle between vectors.

    -

    <glm/gtx/vector_angle.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    <glm/gtx/vector_angle.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    @@ -86,15 +78,14 @@ vecType::value_type 
    -
    -
    +

    Returns the absolute angle between two vectors Parameters need to be normalized.

    From GLM_GTX_vector_angle extension

    - +
    @@ -116,15 +107,14 @@ vecType::value_type 
    -
    -
    +

    Returns the oriented angle between two 2d vectors Parameters need to be normalized.

    From GLM_GTX_vector_angle extension.

    - +
    @@ -152,22 +142,19 @@ vecType::value_type 
    -
    -
    +

    Returns the oriented angle between two 3d vectors based from a reference axis.

    Parameters need to be normalized. From GLM_GTX_vector_angle extension.

    -
    - - + + - diff --git a/doc/api/a00211.html b/doc/api/a00211.html index dfb1c3b5..b37ec9a2 100644 --- a/doc/api/a00211.html +++ b/doc/api/a00211.html @@ -2,76 +2,72 @@ - -GLM_GTX_vector_query: Vector query + +GLM_GTX_vector_query + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_vector_query: Vector query
    -
    +
    GLM_GTX_vector_query
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genType >
    bool areCollinear (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
    template<typename genType >
    bool areOrthogonal (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
    template<typename genType >
    bool areOrthonormal (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
    template<typename genType , template< typename > class vecType>
    bool isNormalized (vecType< genType > const &v, genType const &epsilon)
    template<typename valType >
    bool isNull (detail::tvec2< valType > const &v, valType const &epsilon)
    template<typename valType >
    bool isNull (detail::tvec3< valType > const &v, valType const &epsilon)
    template<typename valType >
    bool isNull (detail::tvec4< valType > const &v, valType const &epsilon)
    template<typename genType >
    bool areCollinear (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
     
    template<typename genType >
    bool areOrthogonal (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
     
    template<typename genType >
    bool areOrthonormal (genType const &v0, genType const &v1, typename genType::value_type const &epsilon)
     
    template<typename genType , template< typename > class vecType>
    bool isNormalized (vecType< genType > const &v, genType const &epsilon)
     
    template<typename valType >
    bool isNull (detail::tvec2< valType > const &v, valType const &epsilon)
     
    template<typename valType >
    bool isNull (detail::tvec3< valType > const &v, valType const &epsilon)
     
    template<typename valType >
    bool isNull (detail::tvec4< valType > const &v, valType const &epsilon)
     
    -

    Detailed Description

    +

    Detailed Description

    Query informations of vector types.

    -

    <glm/gtx/vector_query.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    <glm/gtx/vector_query.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    @@ -99,15 +95,14 @@ Functions
    -
    -
    +

    Check whether two vectors are collinears.

    From GLM_GTX_vector_query extensions.

    - +
    @@ -135,15 +130,14 @@ Functions
    -
    -
    +

    Check whether two vectors are orthogonals.

    From GLM_GTX_vector_query extensions.

    - +
    @@ -171,15 +165,14 @@ Functions
    -
    -
    +

    Check whether two vectors are orthonormal.

    From GLM_GTX_vector_query extensions.

    - +
    @@ -201,15 +194,14 @@ Functions
    -
    -
    +

    Check whether a vector is normalized.

    From GLM_GTX_vector_query extensions.

    - +
    @@ -231,15 +223,14 @@ Functions
    -
    -
    +

    Check whether a vector is null.

    From GLM_GTX_vector_query extensions.

    - +
    @@ -261,15 +252,14 @@ Functions
    -
    -
    +

    Check whether a vector is null.

    From GLM_GTX_vector_query extensions.

    - +
    @@ -291,22 +281,19 @@ Functions
    -
    -
    +

    Check whether a vector is null.

    From GLM_GTX_vector_query extensions.

    -
    - - + + - diff --git a/doc/api/a00212.html b/doc/api/a00212.html index 4b5a7116..a319a10f 100644 --- a/doc/api/a00212.html +++ b/doc/api/a00212.html @@ -2,72 +2,66 @@ - -GLM_GTX_verbose_operator: Verbose operator + +GLM_GTX_verbose_operator + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_verbose_operator: Verbose operator
    -
    +
    GLM_GTX_verbose_operator
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - + + + + + + + + + + + + + + +

    +

    Functions

    template<typename genTypeT , typename genTypeU >
    genTypeT add (genTypeT const &a, genTypeU const &b)
    template<typename genTypeT , typename genTypeU >
    genTypeT div (genTypeT const &a, genTypeU const &b)
    template<typename genTypeT , typename genTypeU , typename genTypeV >
    genTypeT mad (genTypeT const &a, genTypeU const &b, genTypeV const &c)
    template<typename genTypeT , typename genTypeU >
    genTypeT mul (genTypeT const &a, genTypeU const &b)
    template<typename genTypeT , typename genTypeU >
    genTypeT sub (genTypeT const &a, genTypeU const &b)
    template<typename genTypeT , typename genTypeU >
    genTypeT add (genTypeT const &a, genTypeU const &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT div (genTypeT const &a, genTypeU const &b)
     
    template<typename genTypeT , typename genTypeU , typename genTypeV >
    genTypeT mad (genTypeT const &a, genTypeU const &b, genTypeV const &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT mul (genTypeT const &a, genTypeU const &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT sub (genTypeT const &a, genTypeU const &b)
     
    -

    Detailed Description

    +

    Detailed Description

    Use words to replace operators.

    -

    <glm/gtx/verbose_operator.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    <glm/gtx/verbose_operator.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    @@ -89,14 +83,13 @@ Functions
    -
    -
    +

    Addition of two values From GLM_GTX_verbose_operator extension.

    - +
    @@ -118,14 +111,13 @@ Functions
    -
    -
    +

    Division of two values From GLM_GTX_verbose_operator extension.

    - +
    @@ -153,14 +145,13 @@ Functions
    -
    -
    +

    Multiplication and addition of three values From GLM_GTX_verbose_operator extension.

    - +
    @@ -182,14 +173,13 @@ Functions
    -
    -
    +

    Multiplication of two values From GLM_GTX_verbose_operator extension.

    - +
    @@ -211,21 +201,18 @@ Functions
    -
    -
    +

    Substration of two values From GLM_GTX_verbose_operator extension.

    -
    - - + + - diff --git a/doc/api/a00213.html b/doc/api/a00213.html index 515db789..c74653ff 100644 --- a/doc/api/a00213.html +++ b/doc/api/a00213.html @@ -2,68 +2,60 @@ - -GLM_GTX_wrap: Texture coordinate wrap modes + +GLM_GTX_wrap + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    -
    GLM_GTX_wrap: Texture coordinate wrap modes
    -
    +
    GLM_GTX_wrap
    +
    GTX Extensions (Experimental)
    - - - - - - - + + + + + + + + +

    +

    Functions

    template<typename genType >
    genType clamp (genType const &Texcoord)
    template<typename genType >
    genType mirrorRepeat (genType const &Texcoord)
    template<typename genType >
    genType repeat (genType const &Texcoord)
    template<typename genType >
    genType clamp (genType const &Texcoord)
     
    template<typename genType >
    genType mirrorRepeat (genType const &Texcoord)
     
    template<typename genType >
    genType repeat (genType const &Texcoord)
     
    -

    Detailed Description

    +

    Detailed Description

    Wrapping mode of texture coordinates.

    -

    <glm/gtx/wrap.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    <glm/gtx/wrap.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    @@ -75,14 +67,13 @@ Functions
    -
    -
    +

    Simulate GL_CLAMP OpenGL wrap mode From GLM_GTX_wrap extension.

    - +
    @@ -94,14 +85,13 @@ Functions
    -
    -
    +

    Simulate GL_MIRROR_REPEAT OpenGL wrap mode From GLM_GTX_wrap extension.

    - +
    @@ -113,21 +103,18 @@ Functions
    -
    -
    +

    Simulate GL_REPEAT OpenGL wrap mode From GLM_GTX_wrap extension.

    -
    - - + + - diff --git a/doc/api/a00214.html b/doc/api/a00214.html index 900fdca5..97e8d2b2 100644 --- a/doc/api/a00214.html +++ b/doc/api/a00214.html @@ -2,61 +2,48 @@ - + GLM_VIRTREV_xstream: xml like output + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    GLM_VIRTREV_xstream: xml like output
    -
    +
    VIRTREV Extensions

    Streaming vector and matrix in a xml way.

    -

    Include <glm/virtrev/xstream.hpp> for this functionality.

    -
    - - +

    Include <glm/virtrev/xstream.hpp> for this functionality.

    + + - diff --git a/doc/api/a00215.html b/doc/api/a00215.html index d2c7a3d5..2d7bdd8f 100644 --- a/doc/api/a00215.html +++ b/doc/api/a00215.html @@ -2,75 +2,62 @@ - + Todo List + + - - - -
    - - +
    - - - - - - - - +
    - - + + -
    +
    Todo List
    -
    +
    -
    Member glm::bitCount (genIUType< T > const &Value)
    -
    Clarify the declaration to specify that scalars are suported.
    -
    Member glm::epsilon ()
    +
    Member glm::bitCount (genIUType< T > const &Value)
    +
    Clarify the declaration to specify that scalars are suported.
    +
    Member glm::epsilon ()
    Implement epsilon for half-precision floating point type.
    -
    Member glm::findLSB (genIUType< T > const &Value)
    -
    Clarify the declaration to specify that scalars are suported.
    -
    Member glm::findMSB (genIUType< T > const &Value)
    -
    Clarify the declaration to specify that scalars are suported.
    -
    Member glm::intBitsToFloat (genIType const &value)
    +
    Member glm::findLSB (genIUType< T > const &Value)
    +
    Clarify the declaration to specify that scalars are suported.
    +
    Member glm::findMSB (genIUType< T > const &Value)
    +
    Clarify the declaration to specify that scalars are suported.
    +
    Member glm::intBitsToFloat (genIType const &value)
    Clarify this declaration, we don't need to actually specify the return type
    -
    Member glm::outerProduct (vecType const &c, vecType const &r)
    -
    Clarify the declaration to specify that matType doesn't have to be provided when used.
    -
    Member glm::uintBitsToFloat (genUType const &value)
    +
    Member glm::outerProduct (vecType const &c, vecType const &r)
    +
    Clarify the declaration to specify that matType doesn't have to be provided when used.
    +
    Member glm::uintBitsToFloat (genUType const &value)
    Clarify this declaration, we don't need to actually specify the return type
    -
    - - + + - diff --git a/doc/api/a00217.html b/doc/api/a00217.html deleted file mode 100644 index 1d893b75..00000000 --- a/doc/api/a00217.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - -Member List - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    -
    -
    half Member List
    -
    -
    -This is the complete list of members for half, including all inherited members. -
    - - - - - - diff --git a/doc/api/a00218.html b/doc/api/a00218.html deleted file mode 100644 index 04dff381..00000000 --- a/doc/api/a00218.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - -Member List - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    -
    -
    tquat< T > Member List
    -
    -
    -This is the complete list of members for tquat< T >, including all inherited members. - -
    tquat(tvec3< T > const &eulerAngles)tquat< T > [explicit]
    - - - - - - diff --git a/doc/api/annotated.html b/doc/api/annotated.html deleted file mode 100644 index 709985ae..00000000 --- a/doc/api/annotated.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -Class List - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    - - - - -
    -
    -
    -
    Class List
    -
    -
    -
    Here are the classes, structs, unions and interfaces with brief descriptions:
    - - -
    half16-bit floating point type
    tquat< T >Template for quaternion
    -
    - - - - - - diff --git a/doc/api/background.jpg b/doc/api/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16467d310b830345c0df3403de1d2c6a0383269a GIT binary patch literal 1019860 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%0AK!z%%uOYHrFoIyM3u_= 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ə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%0DID70hzGP6nWA6jW!~0G)HCvz@9%n=kH^ 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%0DDSG^FM;R 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

    ~S8C_x3pF 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%0D$AOsr26+>Fj{1 zwEbq^Z;F=J z&Mz4|qxxaKwC+gz$&(>`*?5AuU-#56gE-XNZYeqYSD>+VozeiiC|ILK1=f zyo+84<lHVL;_{K?@k{s14fT0y&qows)mfROSr3aO1bS+(|!*xMSY_}za&1JP8#)u!wH?@z%mt=EfwIj0GfIbR^^OUhg4 z#Utp!DAmLasDk9gg~MrB#gDgd{z&-I6Sd{3;7AYXjp#Za(9DI?b@y8s zR7B+ka)f_!(Ly7&C&HZe1kD2fMIWyi1}P%FFt;p03)RqdakTv-rnjNeB2^X;P3F%8yAKtEZhI59)W>YP&MVzC~@}IGub>hjKhi%y9FT-65-?o(Y%#Bwah#6x~o)qdwno(xm zx9}pYFjJoNhc5QH(wCurAE&i1IYt@INyrW{Fza@}E`*_F1Ox6!E-)Sx!o|y0MAFE=F=3x`U?xK5;jXBc^Qz znu29Z+`+pWRMBpC3DY-SkrPw)%GBX;SCBbjyGMLQ!&BOqQeQF_n*3cK8o~#E?1BwH z7+7hDKvAO&r2YGHB<+e3kkUz{o~$%pSQZ${k#9lj@8JJx0?z|_?5JWIVKA6l7+3>|<<;U5EHXkRSND$0uC_p9 zBj+fevfHA@!+1h9%OkjlX@(KLiI)S`&&GxRhMxOiHnRE4_Hg=`*0Ld83}JRMKyJ74 z`}_q#&1cP=G#bbBci?~(r9GDA$*_<1D0(idGN&}e!fUiUvMr&n4LUrAgm+0+fw+Au zd5Zs?)zAIXryN+6qAK^x5+TuYBf#k{d^zOH@lb`cPg2Iv2^}uhOrbW2|L@X(aAj}4 z8FF14<@xAso)DlH#I|bR;WhkgfXH>vc~|bkuO2gE8V*7-6~n#44p-9eov7Ndj1Nwx z3VPq}2I2W}O0zJD61@)d$iA!GZB_suL=#m2diXgjDG-S1TcmTkS)rpxijoj>wYf55 zBj4X;e*(H{R}3DlrJ{Y#n*W)P>AaL{#39AJJSIQtcvjcn2H3X#JDYCSB5Vd1QfLAO zP+Z8wW3t7s%`-oajyi_0@e+|DrQ6tzwD0W5{M&$6_^hFDK^F_}y+5F8E1MCB)N$ z{cAGwvl3=~X81~FkO)Itvykwy~5Fgvek8+Cb= z``rkNw5VpxkVe)?CwHa8d!`4k!A;k+uW=leU7`D3Kd>Y7(Tz#xT-EPfD73AA6WIEj z=xP$^5)U1=Vo49X7TGfDZN1GePX0{p&1agWaTfu$=iS)3sp5e3&ySjX-0oq|GfY2z z9ZT6`_bpg5OR`0aYlbgbH_L{7PL)eNyZs7q2*WRwZsGE|X4 z3wG(F{oX+a3PDEc!9A4Wwa#KLJIthFwfGk9e9`(Lm>__kJ9)PnWO^HUFuNICvEtVt6u-;@7?T%zt=E^vZeP&KFQa+#cD05?AMNIqli8=cWJ=6) zFWq{3G;=yeC#Oa-gn)Y|D3%#!P2t5N|MV6QD^mgAP8}Q^v_gR|@N@0NO_@~>-m3#_ zLF4li%24#+7kvFe#;3?rqb~Jwf~dSmN3-4&PVl}H4WpSZNET5qsaWiu%J;2L2D5_! zQFgdH<^e)nk_(2z3s>wh%`z{4G-n&tupYTjgl+?qB4j44gOQ)5N@FVcU`4&Q(Jxq<)Pt@GZzi0IhU$Un1gWHhh!x>ukOpf__~5v<`rmbBa4vAXc|-Ty>? zzZ;)yi{61bZ$yCNF>a)V_{PB{m_PsX@0x8S2~nr%K`NIZ=jXG+nQ?);_j8u7@^)0- zwirnbl{qSBaBF~jA*;&dkt*p+XWrK4&iRrtdnktC<)fLe9%`J{Ei9h%kZO3V@NL3; z_c}J(@2USt@_cgo8Q3h-dmD+X7KVT6>scXxdRm)N#NdY9S{EIaqtnfl&|PrBN1FXi z2a76}&iUVK3=Jykd{KHnc1jtwpA^@`-5qYhAVK#5l=rR2O7%2XY_XRYLKH)z$|Swk z-Ne`O)Z4mfz^2<0V~WnyeE!oi%7oSebpEG8O`3ynNq{{>g0&2Cx49d^j4I_tF*=L$ zi_ffYqnxa+s^=9~CG}w+;D_V^q{EfYt>=1V6UQyZB|HXko2aN^er~qLWV+`Cb0L089v290#?_Dx!w0jMa?`-?OmKikj<76J2LUE&j6ucIRmlG~|f=`g}T1C9ce+THbtna1w>SXGHNejkA69P95U z0+H4*FLBJG11@RtQ9-9T*b1ig?Ya8x6<|8%u6W#VbC9BbW3|Y1QqScDEEI|O>cjXn z@$u|OjpzYF{hy&igdrP-6UCT=*eVyV=N!`Z2dS3TMq)u-t$oG4O}A zUXT>`&`P>Jl;S>zhufv}l+oZ-B64s(L4{V3+mW}LBOt38=!T@`e|;5aqV!9WZ) zF(ryn{eG_Blt!3Z&~QZ32?H1WdXv&c+5T&VrbhJD+o9j0ch*(f>~lV+8L2eJ%IO(= z7}l2fcXpt{o2f^C%2Z4 zsyN=(h54vcYdq!tREM-;K=~uw0P=KNmGu7sT)&#zyhOJ)lJ}YQVzLWW%rPD2w(P@P%Bhh67^GnS_RFmPny{D6l`AaD%ES zu<^B+f<9DeEL}cs`wE|_F;zVpGLRgSYirPIh|&T?O3kd^)d6x9faX6t4i)aaR~k~_ zNBag$*k)WVN)523bDv2VI4tZwtZzGuyjNCQH=_|SgOfIkx{{f&bhUM6!Vz@%UGy>B zbri!!n0(Y~^q!WG0e?SKztlkC?&>d!aqNe#Q(l6|KiK(*u4}1}MzKz3@Xwxd%HLOB z6z06WrHet}VhO!2H2*ij_@S5rtxk!;i2Jwg zBwy=0ZDsb#b$f_JvTnvF@bgNlAdU}z)kCi;Wh>5KRt@gT_phkg9acTtBlO~C8VVl% z)}#4X{$msU2*ezS`T~7?d|W~}_GXdm&M)D_SJz_B-Bi54$93}^Lz)XZ?)PsA(Hyk2 z0W9z;GwuK@d!g<1u}qo~TBFVA${slW)ZnQ3gado|>c)db0PgyvQtyxdLdsFMQ5ObG z(5Z`C_uObqr)K45(-uPT+e3So8q(AGe#Ry+XEb$B?{fsqqdoNLpYH$Y;5iv#iEFuO zbw~3|TqW_P)3VegE=*$Ma)M z>R^!WJ-7J})YBol*sx-l*{;%w{8d!3NT%wt>OjQuqm#C;y-U~VI8;oij|KiwPVSBH zu~nLbj*Q>?b1&|0o>OM(d|nQihFhWZYsc)+yMv7lsinG*TnEc|R?+;IxGV$D^-#y# zEAJy452I}ljvq<$UTEnW9X_EDju0XoHNV=Z5~z_I5oKe0j?kIz*;Q&DkQ#ZXi15if zzz`|Sw6kO|6L(0SEsMuGZ`X4a9S!SKKL07xaWytDp~)z_Y%P2FuKW$sp%~orUY9;( zS!TIbx;t6A%;&0AmQ!k^Yo=AS8jt?xnTODSojwd%v#!2jw3q8+6;yk8=~19r=2_oj zJNXCDqM(QE>2oK?dk9ttX)7J_!n{uS>mQYfDf<5bLc3ZQqWh{PU?6#82%t4&+u+*G zxV!py8<2iot*oc>z5*fl!Yyj#bD#J=fJlM5iRu8oV9yW))gIH2-rA;h75})}9bq~@ zKLn5)9LLO!SFcB9E;OQJZD6h9S9}oR`oZreT zg_%wYq_CZB>qpt49;nQHyD{Kv1$j}}`!^b`PsI#omBO@Ny2YR5{_@#1cKHzmO>i_zsv>!`Y-Zs^Bu2wXL6agP|r zoWsrD$M=U0ga+sQEaf!^d1{!g-n3zZssKNaRV??AmCufd3+Q>TSCxM#dY9`HK0F_I z=iRf|hf-66-GW(;hAlb`Z%SR~}4X6qR@Gd2DJQ7HWdQw}ukV$P4ke zhYu%HBZDisV>P2RXDVDXGs`x*%Dzos)Sb7S3_xQ1R`c;N=P2?+8C}ia$Hl}~a;XWW zH>~m&vOu{;IkVaTuh0j-Zu~uDTr;^Q^?@qt|2s1%Me3>YRXGMg(t_l8q8n&XQtP<> z>^HP%<{n3SAj41MNc z!iaE))I?*$0kGz-NqhbGzI~ThI1jH_cgyj$f#hn<>1*wggNhn{x>z`n8KRAnJRMkj zD$2NN7HaTLUkuJqSSxEK+1s!bCl!EOwy<7s|>JR zbCaxwi4HX{w zT%q%>dd9f)rP_isxjMlej+3Rd1M6_zD<2hoH>hAE8kytGxK!Xv8P@)J-3iT69={@0 zVvHbwUK+Kq|G~dFvK!1g&bdiuJId?GbStLPs|>K}e4T1kvS4}2)}-OKjm7xXv!*#7 zUj)%oYtk=ts>pehcn}iOEd2gO$#G7r&iR5Y1qEvfB^?@ezpM)jXLL`Aq}pDlZkb9&=HL3n5um~?VAHkP4mE?u*07d6xWJmlhy_&HBaZ@$qkXZmobhEXmM zhU*#%^U+89_*WE(wo0upDQ!yhQp`A;l2YFugc4jB>992 zArv5FDBuP(UpP$!a~Q0Q{wv-h%|EYSfXNm$1q0}~taz9;?* zu;LC^4d!mX^9Xzs?|ufNhg8ah8%EPwzF}32ydD`;=hsO4`;tBBI-Aw8r`ZEZcid|j zCLB?4H7t-#8e*E$WfcNxZt#>fIxC;yI6KRyCIj2ZPL}xUy5=gi7iXVOj>jeT`B$&Nn9NFxutu$^8)5D>$^V1p4S4~ne;fVu2F-fr4 zmgpplAm^qZemf(|&m*sJQIe`f=K>o41PJ==_p@8j9?AGV^|!HqF!!@~-EdY16v!Yt zF>F+8N!uyIC|2Ol1NKUMuDccB8;M=F;zE&r{WgXPvB4{5F@huG?Z#9kgoP`HYmsX| zEDZphQ(k4S9o?jz)ykY&P&!iZaMGmpK{QZ!yT@T!*hKxP z3n!{)j=)VxXXtWIrt``vLKr=+o1oo&a7^;|tME7=&=1WLZ1I}?yO#l84Z+7e%Dn5s zVDyw>Nq(}7n`z5faAjqeqD<-NvZ72g!NKs)!@SPW9+#mK zXWc{*^6~C5oheDvAT63^Hsua7;Eu`V(VdvFD3rWeP6m7fn0Mc08mtM{sGk+_`b85C zE&A~tcGE9JZt|Ez&ScLW)=w@!a)G_$0=B$``1aB}UqKjz9?p&1LS9(COyI|`g&+Pv z0N3rW0?T~3eia!3Zn3%E-v%nHf}clxb$F=}4k)tCNmumCSb7#KFUD)=S=$7z!q+Rs z!a{jiE;$(@3Dmw*kzw@*qn+J)DB7r^OZCh%jA6x8uRn8!*d9L0e zh{ihdTQAwL8w1fk0lxUw;JFKD-$$Ze-ggHTA1mB)SQXX<-(#4(v`S+S=;Cr?`N@hM z>5)J82^2?2vNQ#+O^fOaMbBXU8=e{u#xz@?2EwZlAc6SDJ9@lV@pKYx@Lv8C1#sUm zRBebQO^~uH`5bi>1z$G8W$oWGf~;XY`Emv9j~BhlNoZf7Q?9dQX!ACE1paXH%U62H zAwa=IpB24@rvTT}3+=*kls^Xu;jSMz`X*4?_i&}w`;8I)nmp$dF6LX^YU|D)UT=LmtGD8H7^++iiulH)PktZ*h@fJS#wI7`(;W;Tyy} z_as?#w&Z7^EhV9+kl{gtz%=_tRx7(E&BrwOdZwU|KTX{MqAJH_hj!y)=U;_2+OvVx z(!>exgsrvMRYXdr-8i%eKhq$HkvWH=+#A?B{o zBCwv2y9da-omNTnD6-GaI8=Q>%Zwqm#Ezn+PLA!ang?q$$w>#sR}^Ixg9c)KQLDwc zGU;WIAqRj}5dk==^ZGhi=A|bqAur$DxUnZxB^hwD9i7u>xDmZPXy|7N?SsE?u~7w6 zjHd1}Kh4O}+H*309uVw*WFVI4g8V&62If30?2X|Hsf19MR;pCBJ_>YZ4J^E8UFt#mZ83?V=7Te`nOGIad5yt*(7$gzpGjWqpX^O~@xOd)}ez_e4Q6@V@gioNVj zmo?$s(?%ux4hy-2t~>!EF{aqF2{+vbR3vGEIAmhW^fu{ZU{2J{rD=yC03q( z{|kXP(o<1-dJmDHQf(QBfga1ypY|QRX=3K(mSkAFruSq9^ad6DEAtx{^n}V7>KwCA zZ4wo=q0(np?x>_+XFX)QNl~Tia#cDIIH!_=VAZ&XyZeC!uRE5vC1cK2EydU5xGJT^m?rKX^B#}bQD_Z{?)o2P9l_UC$EE>wdWvM%O$ob3qIEoc6 z$^Wifmgt=FrKkyoWVT!%27)XZ9q;kxL&ExpJ7E&LEl|+Ka9jtSWa8Z-2h__zA^<*T zg7ie9w%7tQ*=o)&M9zcS+aEBingpKA;hXOWHkVIT!?dO3kd+i5Oo*oE@_WwHeYE~y z)sfNgog(Cws+E@4c~I=jP@bPa%%d~4&0EP_YFpDfvG$A3QtKH==!H*>#Y$dSC!T4s zDU*Sn*+XZ(;?pcMD+cbWe7zi9Q(+Zkc6=jPFCEKs3Rwk&vJip8e`_*+YfY4uOscQGI8w1cruMWJRoRUbg-J1hQzKV2Ks{{_ z4UErPwMWmzs#@ZW{Kt#qrxERNS~&$mp(^7X#9Ay4E|$l3fI18t@|jawh5 z6m{Q%Tpa4@KeKQIPXT|3dF9cdw=J)vqjsr9`KN>7GEF?4kwOPfcu1!v17ADWwVGeF z2;s@SE3+?7>rdG;ls4R`LnwZtp=Vz#`j>`j1*HkCwXHR6EJ~YIq*Sf|&c*l<$N!yC zikt2Bl{e4MhSBENa#FXrZr-dw7X|veONrJ3srvQ757umc+Ton8zTq+DhHI-JcmN>c z;<_VBN`m0GktPP)BiY^~CNMGrR-0Vkca@L4dvABc)L5!$*B!#?4Y zbG;T!OR7h?B4ga;ytyHYngMzY+rO6VD%VJDD~Wf|)wn0r*!QC?66nze;Qjs3&4HK$ zfRmR>3hdUlOVmsVyO2c(J9*()%guQt{E7g86g)V2r4w+RW|nRjoL7Qb8Kn^YTdh{I z7T$U}-Uu#|HCxP7QXku)2h_Wa-nVHk7(ZcV2tvXXhZhDq2p4L0Y3!(b1SIn3%eM?~ zCRWAi&n!Sz9Q^5BvY5ZOUTT2x=+wcOo(*wtJ%)_F6a9eqwTiKJN-_G8j^8$2_MzYf z=Y>I>G{kxcAIZ0>KbKfC64^~XT^%EDDBScRAKr8gqCN?T+1-GYR{jXji!-RFJ4Kai zz8fJJWvuk}6+yXkGZ4Y*RPXeg@hNW0=b1Xxq7|{Fo#XT=?aJFG`Z{` zy9d)GvnL+dlZZ77dpHM$4|w{)kE@@hFMuridWU3>i`dc?fmy#_cX*H10C%H67lcji zuYJ7RPV>?6uS&mAgc5bza{K+da2q=hLp((F2EZ$^SKb}+5$VoC&LaBc*52JpKB(E8 z@>vqd=6NtN|LHTWKPg;5g0Yg9JM67(=wB2>)2HGmWEMGMD3HBN4gjy=1!1jTa`I>N zIE=kEtnZlt59 z9aT6L`a>6?!3wABx~f~}b56y|K1{}HENY(mU2z zzE!tXjnWP5iIIEeafh5gZ+5upZpEq}s*0Pxyq&KG^~+DkQ75)Kv2Zu=?a|Qk@c_ky z;icV#`D8`nRZg7z!a=NLEt7mUOCzCF0^#1Lk}&?~^}Qm1&f&3;U8=IHjdua6BSt?8 zev0C6QFy#uTsCey$XZy_grf!~WXZ z;j`9NZAUG9cZe4l^kfjB=l@Z3F8)mR{~y0*n8V1~)<(k|a*8Po)f}2pInN=~oI4;U zr;=tOhhdvTWTYs^*9{MO_&ix_Dl=8hD45Qn zNx2x72MFQPTFG&OrZ3!)F4AZ++N^qOp^J(1!Q!2%is6RDG5Kd`0g`2Fj zsp{2XOzFY$uF@j*=;B5^Del^JG4?rR|Dw6p2=1tiUHN>Hxvc}Ong^@_);;R7+AGR^ zP`HDIfw$gU5BXgiJx$E!eu)0d&VrR+KDv3a+`9--^8FT#8mAg6kQQGM5w3Ao^(c}$ zG~OsimaS}L*kQFDh>@>jHJ&>DKxy8tjsL;XLi=hGe~GS+Mxo3(ml)4LK5FEa7U%Lh zHBbcTHi&2V!ll!E^CIwmpFUjjUSPJNnIpdCmaH~A>F^iX_8H5KIPaBb#arQ~Qj&=+ zd1bfvzQQDJ1>48G)M#lLe@MvXTgkmQ1q4<;>e8zy29-MrGiJJOw#t@IHTvjN>S^K4 z+b7QseTwBBiwhX#QOxz<~aQl6vT|d|Fq; zd#F9a{!<1HDNOoKxW-d3Z1a3fEj^>;PLFUq^j(}H9VFTV9AiA{9N!!h4(EJJZZuS} zd~^BEs6_X7MsabO_QU4N@J+vQ+wdqccim8VGb?eXm&=9IrS1Sdfwn$O>Q38HGkJ=+ z{BAtPi}y68LHp3rF!6%nwv-zA^PYr_3-73NPU;p|h?3f1Dh)QID*wx@IZU>X%wTDz zP5w3|JdK-Jks`hs5Mh{kl^NrzijAB7*iqe_fzkW^H>@%SAH_$5C}g$(JuX&RC($ti zgjCP9me>%XodTDcRPzqh8Gzj(gx2dNxH!1HrtG)QJO@(>quPJOMEbLtbJ~C zN6QMqD>dh?#X@z_Bm^I}FuFf@Hn;lFPR z-Y&+Kdo?X;ywt8Uve-Ml1sM}p?s*Olu(^}>somkTdQ7MG@lCTR_j0h_EBfvuq}4Jz zT9Rnz0-3GUCNgvwAv@u2p!eBR-mBi2g-uMIy#4;}_;KVN&Ewx|{=R*t4#X+F_BpuNyCm&en~($zwdRf7~k$B`45!^CK<&^6FFP z|8r$JETXxYilm`U2-cUVgQlw0R*n^Km!HDkF7ugH+Y_R7Y}VmVg;D4EIZ;1}IBT%} zz`A5^|GC8I+ee@nNwL0-)vJa`jXQDcRfBoJ`eJXHUx5>$1?t_bq-=r$C4J4Il85u! z`@v{n$V=d?J1pqSA$qSEW}=GC7sjp+Z1#KgE|npbSw#5PVA`E_L{n3jlj_Wiu_AMo z!@JsRbx>9J*;#wcK7L4Py|UBDJsD)<3IT&NY0G>IF&?n`r&l=B% zk9QwZ#|oaDs2UJ}*fBw28CeiYd{EU!zRIrscU@{rxPMwctF%XIIrN~T7py|yXwvR{pKt#ID$oCFfS)jX<`I~*XW4hE zoX?T)u|of;2jnT5SI)i&G=96>-DKpfcPvIP{CBxSUxk&_uj;88m(f-#!sCCylK=oy zu!C-WH!>$LMwyPLPVt>Xg4TakB+!5m0@q<(L2fdl4Bo%z1s4YSv_Zl5uy>@jpf#f-;Y z$@!7+iJcXJPiF3gzm6GV#*n_!ENx;mq)k{XXmyy&oAsUEGhk_eE{e(!3#SBo8D=k{ zu^zw-g_iee=?#jxvN&!i85CF>Q$SzRc9fdjX!{5{NE|@_0CvwLk3zZs1Nw?Z)DX0kTL`dw-#hbQN$>2OGl6%7DH+u~!$>`XY%*o?? zaH~bJa;snJPMp6b5DKwpt;SuS2%vy6rhdOwMTFATi1SS&HFy!6LgXPo!Q{daky!ox4uI@6bZzS1&c1Er&mjZAB_dvo=IAYC8WY)$CV$L7nQ8*e*{IX zeMK7%n7!1t{GPEz$rC@9*}0PVdDoR=?~c~i(Q#m_>nnerrdT7$4hv6wlz6TSbOInZ z^fsoey*aSustc?<{i{*ey@$6;z3gSK*6s=tuELsM9j-v^L{LZ2G3{Zi^1nlm%of9E zFw$dkD4|Grl;cC?`SD0EQ&am(C&!;E0niZ3D3i@?4bJiHDp8?O)wbvMeUnm$p-~;8 z^-1Z-|MY@3rNml}6-xwoEMIxsWIg-T_`QKvk<+LS+-|`vbT6Z&*wvBgG34Mt>2z|2 zdKMYpxvq22ohxnU0a9HTT4m|bk0={8MH$1F(HKgrqoQ?iuOO~wV>qe(%;{%vQ&~7M zzt5;bRr$0iIrF}R*}LJEw0WX;Ht_VHe#$k;;|+DowF?`DuI&RH5iE+>3y`+WPDz_M zne3Kk95trwMaebka5YAGIa8t5U^=k>>-q9~m;Y5=eyIm-nvQ8up-db1SvJDasy@ca z)spFMS?3zt=>A%p^ZU%hdL(ph18_NecZlB(C(Ry}`%+cQ+FakA5*1z;tu1~A1gFzD zQeJ^y*<`^F%>YjF?tAwL#-rg0hEng#;BkyL6SNHell(&dR2&{tch#a>1feyOEKvw4 z@Vk(cToU(rfT~g6&oOh+fk}2Rls>D?j#+H;HQ(AxDlpDGyBKEc-<=`?s>cxy9h7J1 zXDMlwJlx4y8efG&g)EI(me@!mpCI<|(!s<4Pxt_7QN^a<{ocR*_`?Z+;+7I&Y(WP2 zXqpIKtxdZI%|oZEvZxgxMBL=pqZhoXxPHii>3~xP4|-_51$T19Y$SzhV;>vh`>jzH zR`Dl&wmQdpm-T{M$2&nw#&K5lAS;)u`q#>o6wPakUo0Q`r1s>z;wI)+2j9yX<&JuM z1zH8jPQz8$2a4_K`%Ye?$$bX!EqGf1BlDIZ5HW6QW_r10^vIu6NfYOz613GpnukaDkNSh1ny^ z-11vKYnNHGs(EMQG|JX~m6pLd9>eVylpqA03Y?FkA?F_%$G@kh0*@z}V&`WmI6BIksP3{rQ==T!&f!dgXyt43LY3Hr zR~776i{fVVuXw4-qftihvcp!=*L}8V;Y+2%Kv36>&6Ke6cjC3ipvUaX6J6iDESPx>k|=tDmRLM*DaX z{+MnTbad!YMpxKIVa3dvb@P_%M&Gx-WNSfF6a2{nu0$I?w^otTGDT$Mn!oMp%25uFs<+d?Si+I`hKjcz&x zS34{f9zKNH6~45MCggI2959%X{i(bCX;=Ek@OWjhoITvQ`fQz=shV8tNr{V!!$8!0 zeTAMXA}3cf(w>BAe&8Q2Ru`s|lx()D-Md%FK%TFd2KP>v>7RaIFmynQdIvmK}Qm~FD z0Tw;__iU{?*lP3hf5unv^<$8gM8iA3cA^s0zzUT1eYz#g_%FetgkuNl2u@oN5M)%w zeKL{Za@fM0_>3OlJ~2#wd$IMO7lYEWS)Sml9=juLlL}_1puLD}LXePbRNs{^sG?=MCA-}2TPIoS)&yO=f@xTAT0G54O1Jm!41N7Ne3(5*r{B6M8Eg? zt}|^X=J)eyTP2cJ+HaZS-Z)DdExzi_Pxm_YJcysv6f1sCL9*A4Wvv+5-d2VkatVMnzQ^fhh=3a4P!k^Z!cuqVL zphf7{@@SUJ8#K{YP`UjR2q#s?oqcHLKX~kW?hPzLf&%Re)O~Il9)!0T&|&@QJ#h8i zKUE)c^W?H47~P{F`Me2*J;{^=_7bho?L|f7izC>am^6F~0FIL}1I_+^i9?(1+iX># zy1g%J-#EWpvN%NMPTu+%ke4jIUdCD5Eb}xZjwCNBm+x${k+coNeegK}80CY{JdpH(_Z_vrZzj11RXiN?Xg3g0+vnmE_b^zrCN8YJ3UQZ>kKi>2Zyanb@U&h0oN^@PFge&Yz4 zg3X$_s)a@*Eq47gS29(sU?%8z{9~QssIrXi+N`28B+)ldXf8~|5|QB^l2aG5O}LiA zGUHK1$`1Fb7ug4#S=HCg`dL5w<-TGB(aGe|MnT$3dwQ$ePi=>fQ(?3yR51th*28Om z1S)M>ybbYm2GKi;<&Z%K$#*;Mqy6EL&W2)TLXtvZ4P~Ar)B31zg7#Cip$KYgo_L}>bVtgYQbMkOB*)BN%nE6sf-t1=y~`C3ulRea0FFfO$oa*zzs z7&v(GBTp5@_ZDp>4|+8=dl>O^g-!fHB0)ipm5)7ze-X)zavMpra?hrYcHv z)+j>txarFSMTnkoa_uZuETii6?&qnB0kbKS+|gvyw^-V$u79@eodzO} zVxxC9f5ioE+Y0034^z)p%COAh*m9dLePGm9pMKm#qD#^@BX|Jp_J$0%MSeM~ zS8-rw+L5J%nGy$OP`BH8%d%4QmKXr<*}Wb_>pp?9lGMqd*CnceR(mc+hw8G=h&_r} zLZ#CBO1qtrE%n07-1=5nRQ2&Ar#~5Qw%qzJ!iRwiW-KNjF24ipl;YJ7i6RC6>P{52 zlr01WU5g~fWGMsP$HMW!cu_>9RS$|*2}1FP)#7?B{u(@l-Ho6Fwl3yD6Uz>|QGnWe*e3*D<;hy|_<7W}K)rN0 z;*5H`?yVlypZ2lG?(#fPqHaD*O}BPLEBjkr*_RU=|Jq)c>fD=)^G3)`?9N7YFZ5qE zmQFftN+2E^#>NIjTwQ~N{D0V44mMIOs)%hNxvCFpc^F3&TPQWg%Mo;_H zrcriSS2YYvuNl>{AJ~YQ1W#Ayw%Wb#R45FpNkmogrXh!--lIs&@eIar*k`X3e6XVy z(;=<%DfHS|I?o}_KDd9+kpT`Kr?&0KwpBB0aSNZq>mbCh?odS0pJh}OjcJ>3U1>c2 z!E?1jdq(z^($IMvaVb`X7S9|(7g{v69XA}xyOp7v{d}U}-qU#h&A6$9@~`^9%dwXC z)_13>?Trbb8whTth?_+!wP_H7rv!15z+fE6i!z) z5fG!RSPjXFrjgtm{xih+ls$bZztZ?3@j)=hk-g24HgXjJ6wDW$e3iQtj>LY~k)q9q zcBO|2&ZXC7Kx-_6D~L3ug1Obf`&U zVjH2jCDb=V*;Hg0nc(@obCkC6g?7`_PD^|r`qyfWJ|j>Vn3emh`vuGkKAo^kC06(& z*JaFKiO|@q7lRYlJ|Qy-pA{5bT|)m|=RI;&Y2Ag)8~~n+CnvRBzvW(m3eh4WGCW?| zNGmHv_?H+5;J-h`9=_NU-L=9rpq*ap&qUjge~01fO|*c5k$SJ$qOd1nuOs$zId_T(63@0~y=}E=i10C0FYY~{K5>-G2bF@52grf7I?^7g`@9^6 zYIX6jB>9)AEipE)1ErSOmC5CT+Z>1W!&=bc6jTEk8K!eLes<)Ss3vcH#RRWfg4Eu+ z9wcuzw1ix2I|4*GbdD?dF>X(5ZiZ_em705AE(p`1Vj*;&tTEMw=mo{HGuxwmiVS-n zFNAfJ{`MoAHj#vR6+WcymYJnwTmTmKDOJ8gP^pqH`&m#@6dZD(BK8C+M=>b7xOG9z zVsnfZMpwAm9NxfR0NEuUmCadx7=iO(OM!%?2600*bNuAk0XPt)@-=-jzAXE^Z9Ms^ zD#}c5t8tDRSC3{Te_`F(C_sNV&Sie;lKOy=Ankb7DS=K(3sQ7|jW8EU`rF^0VQgJ^ zhZ!Z?d1_FLfLGcFrdUbn|G%3z*qFiI98^if%Z-$o5jeksEIQWb{@{=eUju!Ao&NR7 z+;n3&M?fo2f;w~4KYH_z#vza&x|#F-2?iO+^JCF5K#?)&8+kUH48e*Fa>sRF_)a|J zXn>8wkuji-!SlqRj8E6S>?Z*7_VvcIGPnOOZBbuzTcHdBO1AXW8~bGd*r@7o@aGo~ zM=fLJRyqu6H_&IlcL(<6sBP}egew^cBNGgn?Tjqlz%z(;_JW!KD+E9v z^m4daYF2zxsCfWCZfTod5_p}H(~GOn~*NMi^>&yk{w)YFC}R? zo5Z6j&ZT84bRFZV)EK>QY`Q#LGhr|waC}u`4A~xWljq4}YEwO}fbipw ze#w2}p9@^`%+-nLon0R7^OrojE9ybyjH(ce~CTBkA39|{Po#}_5 zG*hqKvJx@l)}xKHj0 zb6Dz0>+zN_a)s(CEg>S+RBFcZ$5`u=kt5a7L-$n(_ivi}>WvZ|ONg+s#CI>P5gQa{IG3^?bjz-6tITXI zgOrFZ6|F7}RTQ#%VxsR)Y*ou_1xSW~Cm;OE*eul*_afKB1?k>fnkk6FrAeiuO@iF4 z4*wP{vHEiEV)$%t+nP-w=*zq3n<)hjo97?6G9d)Jfe!1@f`}PpyKq%ER8SLNTy$Lp zlzy4umR7&zU>)mYriI(ZZZZ>>o9&4c$tuNK&$LZxRUB)1)j+04S~=q#ge=RS!GjuR zm{fGaP|(@89}9D#w|xpc>*VFvurh1jcZ2!<5+9G-M_r0XJQ_`PkP_s;J&$I>qJL-+ zCVx90qyVGebq98r|DD=-Qyx;xd}Luu%0@^&Phi&VdXzH$>dwoVV+U)XvM3Lp<*3W- zUX++WWR{ZxglFD(+>#q>s<^SZ1KtpK*;1FIJ>;+fbMgB}$unEMAG z2MT7RUrI9Ego9rrg;wVGb+D779s*%rgj(u!)Y__)#$4TUaqKw*$^p3;T18QZ#4L(e z&Kr9Px|AGPi>-UiRm`9-QHQ(KJNo8$3 z)Jh;zHBtNuCDA_-GxFifh1{&+M%<1enO1utno_i(5g2AMrFo+VEE34AH2 zvuU|`u8?@dgP_%)==@%5t`wAvPpFpChe6P}ca(O&vFg>8n$hi5@?gTS=_a-p%G^Wd@^3G=AuFqj9lSkMtYxQk*n9N zeK-HTFx#~%n+Np8Eau}232*8Gsl$wIkd*nuX3j@-sjO?({X404dAa-ZtM=aIwKc?K z)p8Ia*kr-rS77iwdU3#$1&%xzxvs2kSSjf_eVq=7vo8!7PaDQ(j0z;qJDBXN3kZ^0 zDm%VBbe5>{P5$MO3mX|Xq>Nf1Er4zKhwTn@J?Dk$$mGouypmOP1Gfv2SV*JhQxkuq zuJrxA#5T=@);I_rQi269!&hPV4bCgg@?S`n z80PZwZgbegHpF;1_}aWTfCcKspWd_8FaL3U{2!MWoix$x733R37jn z{Izj~M%dMHtw zX|0QZJ)m)?VDr-!o}%XGaTVfXuH9=$^tNj>#`z+lR5SDYmQAmQiXYzI-}+(r=iLVX8j4%i0rksee77TTb<8^{|YtAFMO%%#`kXixr;9| zeyAno-yo8QYF#Yd@lom({f8L2zcU{4EQX&^;k0gGBgybw-9uLxCEFzL9`BCr#!E0o zykf_(D}BDi@FVt9Ux{hTZ22HsG25?n78h1#JuXRG8i$SAQ}J)L(#c1W#eC3DNON9z zW~w}K{$S4NEIM4*mFoF4X}GkLZO&bS?FX5^JijqGgt?W!|0=eBCRtAb>Ux##u5W!1 z7SmdJtmC@-@w^j6C|u}2Wo~+^Nl1?$fgzlMQk7X-2HF)IlN!cZpU5s?xIR>X=&URh zkC&3%;v-D&Vx$~zy)QXmsl%J$NlN`@Lr~Sp;bHegTE|xtU?-lmqS3$ALi=4Hx zF`+{0D(tW+M0IL9sGK`GrR&eJS`T7;rjXiV9x=*HUW-X@o-?YrEAP$o%7S6}FGqRg z3bG^6%dr^aOG+eLDr36H79i~oCf{nQ7ZPtL0d4>i`oG{bGc>quv-F_bA)+QELD#?W z_kaUcg&M#)jwkjocj>-9Y*##JWcY;OunWDQlvH@cqx%UJZ;sNxQjv|)A}v~VbO`?k zD0~D*jCdpjhIo{UB#MP@AEcw3SnJ3oeYkahO#gF<#|P|2Oz~zisxzLMYBNv!=o&95 zJ`3y7VtBkOgIh`P0i43Tegv_^F4sH-F_W80;}0^VKay?%i|c zT?-99e8b>tUibn58M{X8sDf(;aD|1#;fLR2pj6-!k>AEm|>in+*}W z8@3Xulyrac0eNZ^zOQT5Sb8vwWw7yxa{7e8j7~`jGThL{)F})V@KS!y?SeyET^?;3 zHR1i1J?e#~`RsPx^f0D?5?F0NQjk4^&$Nh2eBF)l$zl%zI zONOJRqiBlHRkK_6X@^SsfnOmDud+*hF|C3ai5#E?L=nwM$39=oc*cUtTnjsj0ERfa zQ*g4k^(;kJY(#W6v9@L?M%e}a%6t9b@NtE9Dumno4651t1CHK;RrRPW<6;C+kd2O} zQvIYgMq#Q>wZ#5s@ro7CBEDfN08mh<3TSl4oQeU3%NC_|A2a|TC1(l#qzP?e zrv}MRQX+EJ9&2#T60n=*3eqK{iL72AM@T+Y8}Y>1ZIu05Np^!yQ@H?MNnBt^{3F z%oui(7bqy)Hw?(v5NJ;CxTnun+ATy<_LFG4jMF9x_*Ypv;Y@W@SQ1A(&Y=}M)_g?3 z^t>5nB$pLGVjG-|NO#nfpI_CG2%qI8lPMwcgY;p4Yc73^?E4ww&KuuY;dQix}|eoq^q)PpuG``Nd+#V23DjNhTG5tz!`@X4Xj5 zkGzJ`6IF^(3g#}`K2~G&pf%fW)0OaO)t?K01vJtn4sS|_Rx?{YTb!U=wpb2g0T+?1 z4C455rkY(u1+`QknT;;Q|3t-(tztI-o#dcJx1^mM$q~;_+a+R{i7e|e@S&f|Jn_@! z&%Vue)F68kH{VqtDUWR!@5L%jr$t^?+nnF^(9eBl!o>kFOH}?K*B+>_TrP}osN)cG zb#(F0j(u4(Q(@Hs<(WA6EB;BMw>CNolnmPXGi5|g3A)e26M&1wK`XT^WjaKw4hp;G z3|J^{7LRB?VZ-iSqV5=DXH)JWax=sRh@fKN+?K= zE@I?>!By`~MP{DBwQflfmm|#}2o(zoJ@qxM4m_2(Oc=IakwWlhK3ZAyDD5dX@B_J> zaDeFOWQ~M*KFYh({p6EI_xceXYQa|Qy!cs<(#hY}tH2xW$dE2lLjRyDQ-lQNSWxlL z=N>N65`oJ<7Rrc;-Y5YX{8K~+_K8!kmUj^m6w5Dl1d3?8juLWhS%)pZ!y;#-Z67M6 zds5wxU#gQ6UW;@oJ+&MubJN;>v%!|NW*q0HLf_S}61$nt{IV6}keu;UDu|lT?4{`u z#F=aldm%{g?+&6{6k?NHSX!Ryjf#jKzBwZN^vBsWy7n$u-Iu#WjwomQir?qehRool z*DTm-JG9;2N>C1l=pY(4=l1&zxIxgFgOYH#s_=|TJL$F~?1~x6IH>{3s`f)wvq<4I z8Q@8*qNgx2BBZ^d{F>|oR|yY%I+=}L)xRY!!+)(`QLar_Hs-19D_>`;Dt2A~>QeN< zfT?Ou({(F!`>FXuU*~}2G|_igVPOR)1)E8Yj-vURyls(A5>(b9Z&}ksEUf`nw1#3_#(*HAkY1}Ng%%T-B@r_9~Q{|A`(d<(R;iz?R*DMi;vcWt<{MswmSibI43 zsOl@a!(n#M@EB4=MZb0ASa`6INk%{lv3#7sPwOH&qIDiR znkJ;&383_+we{}@?eAze6k&_}0p|+kQ6Mr(f7iBssJx52M?&I0bj+Q=RkMebTaShj z?D4(-1N@UD5S>h5(j$JE?Q<=fsfKFF`AB4j{(d2DKX+8`dA|@uQ-~AggPu5fUYC+t zi0_Z-^*Cv#R2%uSe+dR?_V2dxbNx1Y4|7+cPe|<}jvf1YYAzx(?Xiz0-iCDfVT$4# zbX1~8I87mNl{mM%IqF>efZX%%6OnVLw1UUAo7QC<5B>5|PXad=J)EU1F{K3NBZo{^ zwu0Z}tJ!8KX=DCdE2=gbY8Uvc!i)n^LOQT7`0QeRs{2Oin@n?JB(j@mSxvTU&nVOp zC6Z)nlP^B;=Cu0si5IwX`W&46<nWu8rP<5&wDM#+rN9Ws-+pw6yo|R9&+|K~j~K z%L5@SfUvMC){f3{v0MVZ!8{9%!x`H(YE%kiD%;#q3(!PBj-5!i?WAmi`_Ry=C^21` zp{Cq~r*=x_uO!(fjy{{=SytDg^*(ZAy?jJ9LYvk2h3rUA`0UKXOFe`^?Uv&Y<{fq) znSRbBa_M3PBDSDqLf7uCVA71a@!Iz?Ut402c{nnT4LTZiD=21e+Z|B+TqHNqm2JY@ zRq@(l7ae0JkzdbWpkhW28)iead-MHf)u!g8Wd_qV+N^Fj7;vXZ7=amhLcjMc;dwv5 zCCt-6EAyDNL0$UCQR!(E9lDj#*Xt!An)1HZ^2joC?0$EOr5^ovb2bw^=LXWJ;LKyE z*NJuR<^*}Sci8hKn5*V@b+mo>A3%0g8|D1Vi5LDOm)FJh)d}A3jZ@Ib02>@O)Du{4 z)I^mXyfDON4lnl#{0y3;Hb+lYTxYeH;?1)J$x-OH0hH!L|GfTFbF1XPEs))lN2NOP zJ8ojEv|c+3`9+|6qPB$F(f!Sa4!`lk#yjJGrZ{5l0DTvraA|I@&^RE^uxbo$;FuZ~ zne@c0B?!D(Tn%xPNV)2=JLg-thwRt!Hje-Ym5~1$vIkJv5V+2rz*htA^9H)vVwi{8 z&E@%O2DN9IM2BTJcgJBM*+anQZ%LCfj^aH}jXyI*K(;G%x(Qkt;`BGM^Zy#arDOV@ zuW#^paMy)wW4wdtok-~I%n0x_kNGylVC;ToSyXP=m4X*X3DS>%Z#vHMeriO*n>MCpO$^5ERCX{3KiOZ0*yN2bHVRMrY2R|>Sjha-pM6V9Oy z_jv`J(BBD)3&;t&+<%WLWzC1@aOBx}2OK(_A04M=cywh{l&BlKyl1njGiWIzz)KaV z?}6s@3_uJqe>}BU)iQgntW<01@!%GT+ke=t$w{(=V3I zT9Lx@(;^>oZ(Pa*dHbE$zOddN7ru}6)IH_8rlAVE2T(C#gZL`CxY>9JJ_ipxE2d`8 zRvPdDT4y76lA1Q{cb;VK{_xVpJJrCa7uvjnGB?aFIAKwmBuv<(>&$X+HPE5g=tw!O zBQyf~j8*eKZuJQx)d4uxxUL(gBTgz%Y*-psiYN^zHwW4r_waN4#oPkM(B!(rftH>9 zKl9gC#UHA9@!$+fzUdc4)LtfTP$@wWa)!xOBj%HIJ;1-IorgZaHWZ85MsWlL0r)Yl zAiLxN*fbk;mG9N=_S^NqSDV*|`@(!&$@0B&)37W5aW=-Hv()R0j%oqce=rsl7vEz& z))ZLg7cJq(B*suJAv7j$&D>n%XsSg$ITR%G^nCpooU!$I?$-_@OLU$%P~jcV+%7St z;f8SrUze+B$fClEO+RTe!G}seP#<_N=<~z0h7FYb!6i{ z0mkVlUCn@zm+i+y9SeLDmoODZ=@*sr&L&GPv=poy8Uf)C1+Vps1*eB53_y$?#m`^s z@%KGiaRTFip1zmVgnm!uo-*by7&eNp%atL$QT{6!OcuGW$I$Y2M_P^2dyM)q(4Ycd zV77v2jw;nD+I~gxERAqP#|{CC{@*s!#@Vc! zfV=Kb1e75~CXQo&z;$CW-T$7C`M4JSeBzW$ui^yN$v(%fm|4Eau8~Rp_uBNm<%f!) zG2f_7FP3~wsI-!^;kJJH3ebCP9o|m#o0i&sE`cs0k#AQ{dOOndE z*RcpO(!vS_)s+(KuT{{d3DUE6XQ_mP4lN4s9|(ud_`pQ8v@xn|In;ML*Mp-2%J3t~ z3@EP*4E}x97ipzrwFhHGo;kYGX_haE)tN;YM4qRwGD>3l+*At6(X07`-ZK3*78CIW z`E9K~$jOrA^`}BFmpzx76$=5|TMb#&mT6ZR0UF@uTk-AVXk9S69FLYn#)6lTr#c>2 z&lB!Q;{Wcrgr@wmcs7(X7Z~ER*C+;%*wwS5k6ajuy}jy&-hjgCp-G0nVOh#*2#R|N zOYDy5K6{X*C|j9}#yGs1P+nhXa|+P5Wx&!ZsegEnvgzw%qHJChqQ3Xco%3^D#XDqB zZrY$!L9Mt2Rbf;aiotPs3sJ%Q%qCQH>$Fbs(i*+^Qb#O!wViSmvdIw!@mCt%FeV53vLMO(Y=wizded3Z@G0x`vT?F~aax+%qiz)LInYYE>eS4z1vLk-$PsA9SNhDRVSs_V= zwVLi)r3u`s!IA#~58fQ_$~QgMVS%KN>OAYhh=aG!wezudcoF{bopVI1N3?ic;<)tGatH?BqH`IdQ>HT{;d+_oTRU@5nP6cqgwsEJF zipQuX(N*NZtT;FHgLh)V;&RZl8bO`P)*cGb4lTo^Z*CS0ea9YFmlNJxOV>xE;DH#e z*|6i5otA`)c&xX=fb1~Y>XUIY`KZcOu!5o)=Gy3N))6ULsvBtRv-OCI%B6cfIpXAO z-DJvdRgYE~j_dL@i6mhRcx6vAINlPH!+&A&7MDTEGgHIWsFp8!8@l)eKW59!cHa1Q z+{&{zaH_tl;+BK6!Djl#fl^;PwH+Uqu0Pib`kc9h-P<;Qhj|E@x?^h!sj*yNFTZU_ zGRy-ErQI|OzX)7{R_o;boMh+_XcS0r4O1HATKul4oOKs+e4KOVfx!29$1MB3T_L|x zDs<09Yp)Kq*=-yE-QuU5lIebp?(R9gEVrDAz}(*u?j$=G)NNXdIbV5HS1ML_O4%K` z{DI8NJlDx!BW)MX+i&e*DY;4U-BBKpS2H%o+}(?h1|PbpIe6ltn7W!C$6~#=!n;#~ zlxH4}#h7F@q*SB$p)*etbX^8WflygRYW?Y{^v{e_Hq-w+j?7an@PCMwwjF}2lO-ae z)h2bp-^{yWAZ=eR#9Z7w+R@QYm|6}i&B;-N=4WbttsswVP-MyEc%0@fiT+%>+iQ-} zirniLLRLsIUKU*AYe{$~Quu{twS0@OMKAH1p&g+rd+aWyJxi8%k62(W;wFwu>XmCL z$#MN9(~1iQ6*FF_#|JF{;ESuGDx7^(-0C*z;rGJE4vgDMzaMyC*(CO(8wj`+%{+1e zR)l`C8fnsX7)ltV4p>Xqazl%24vQ}!Y611d2+tC`cS8`~WjCZGnV6~Zm z6Q4#?ccVVvTkdlze9_sAsRg%%w585&oj)n*el*^!Jk=e>P-QwkDmFWE_|VIp9mnNf zTS7X{i@??Nfv%}yn8r8v^52fm_lkdoVS@^Vmwa9YH6L1NT6{|osn@42l()Xn!3Ome zg1~4ok0{`|-!vZBYLMe2$WZF2&h^L1^;D)NAm$&DLVOmlMcyo8=Ydm^9uR zuc*xqPMRX}@#J2bWtW zdaS);BR3E-K69!xyx7=25uB`rhi9NJ)X4hIuwIykU*;xJ;L7Au!&}lpmM??U_^BV= zEKdBIspaua^AL?M7J<&XauHFmPc)jT4}v6?NpW`TXr82xvnPDXoEx zU1-pUm|A>Y32-d9qs%>JVHyw-h2W=ra4%7XVFlQahP0lh?=BT>-?>dhP2Z5*!$~}0 z*}e)XlGLCk1xgI?Gg{$|I+)MyO?73vV{~Vn#T(@bKSp@dV}S60Y|7fVrB-eznK7K38s_Ti(=XkFD%+S;tnPCFvn{|^sS5{ZR6kIp)4 zH7i-Wt$b2*%6Rl_TJK0fY7*d>1*QT!ogdF>eiLM6JC_(pZ$5*mx;dI_o)oz^jL9j7 z&CnE(TF>%?qI5;|ab9tA>e-L+upneRHu}QYnDv(;?Y>vFMe(IK99mTK2ou}|l~Mla zqsaq>&XF2#9~-W07`zxL&khCud5W&PDyX!I@JrCMA=S@eCE4eG`7+8o#Qz7Bk(zfB z8iJG=*$n=#CF%(9Ed}6oGHRn!Q*uw5YnovpaS+%bi3;jp_&Lc5u{Q3)1-r)B|?(1tiDuO$sm<7_1`~S&{f<8(gk-L&A3&gAUqe{~< zpj*x9q5lKiCkco#_`*ZAyvARN|I{7B!?I^|qBK3BE#-4*iV1k@%mu+`JvhXgsj~0Z z2Q%Z2Qg+G4yjOf_00D8K>LV38on)1=*dl{FQCe^)#*`{CJ2-~O1}yA9GZ$E~!vH1W z6!%R$8&c=g1An^t@h1XvGhN`(cklmj?j_DFR&UT2O#E6y&4y;e)}l=PAV^d$Tr8 zm$BcIHy)uKP``}WA{^aw&aH&v{>ifbkcbQmTzQAHRkoppS<7|rLLr) z%|uwa+t7kda25tg+PIJ(AclU3vR=}X9t&zQ_Wsdk>|#hys05DE;S%#Z(RhC@qbK{#${_ynme=QMXrzc}M z&||x|9!MF9?p*e;7wzbH5U=pFQqvT=u|lbl+OKja%j3ScFelUlonkaUv)7(Xlj<2d zelZk|A5;0ZS&UJAx>K;f&C08S=0REz(Sco>8a}x+#+8VsdCbzvHp>S|AZQkl1x7*G zz*%^OZBjiZ|0asIlITo}a=vLZBSywBhn@N!LM>|DP12)$nma!mi@$%-?@EAwyM7R6i23*uyM0%m^x} z6v{NFu{2M`#=V&dR2%D>zN+@g>Qh}=(Hp$c!RjQuKRt-nUv#$Ru-~Am!sbe5ycG?7 zA$iU(ICQ0$Mw*I5v}07aI1-$}8VT$BVuIhU@2p#(5BJkzawo1&iptwoUu8&)jqe=Y z{2!o)`hQ9s2PFk0o4q4F7U_ zX`#HWY!1F$_PcU=W{rubAj<9Q9 z7G=H*PyG(Y*V4h;ZS#a_0%|Me+B=h*sglkTlhx59@!IC;&aj%*AQ?HtFv@>_tko!c5w05Ub1Z~qE zeak97=GTG|zcY{1{O%-!GqD|wq4QKYz<=={-&&vfST?9%R1OUJkEc^G^rFLeB&OFR zGXbUitef5+H&aTz-_N@;wI->O3GVC?O$gS|!mcu3AN*nOR(=`goXF$f|ZbL9DK0sv|OQ43l2$9}{2|cVg1=nv}$);%^;pJSWH2*#CVyLh{sq8>jb9 z7*G9fIM1MOx<^uH0|>fVFiT$AwfBuFxg*2kQz@Qp(!J)V-3rS4kXxzs-&Rw*B+oRr zzw|n5CLaE5V18o<63yG%T0*8F@;1jDH=+kl}O683bb25M`d-E)p$)^)9=DM^GKy<3fXWPcf33c+8z z?}4abJ}4TZ$fx3A;ivygi+^yv>ilK>LVrUo?I)(bP22u24P4R2v-CI(B$VCZ zr%nob>3=|GhyTk+dXM2P!m8}2_5``>KlO^JlYI_^aru+2m1YY;3!JUCV1?{gi)=aA zlDD2zBV_HpN2}y|(Y4{gp0Iai#_I+cQjc5}&o~r>bFvX8X8_#{;GD05AvpoD<8bi& z;cZ))udoO9x**nv=hx4a8B{f64lkTc`y!5oK zPhPWqr7y+j<|YVkmea1eLcaoo`$@vpF7!vlJq*;w>I_LEneNz4*D zGXUiIMMv3U()!Pjxp2ua=4^)3nk5*%Lk8tbtQ;6VI~U$${D~ThZ7PJbmp0T;`j&XO z$4<;kEFQ)KKX`%8g$1|=&vuyg6aWXe3$WSzO6)>cb=slJz3{tp?6?An1;qo??!FE9 zle_s(ZttZ0oFAeR2HI>QUBZtLrXB~tMU%m31DAhoO`pCLSBoXcFU|MIAabM(O(iOD z$-kteRz;4PI9QHpVCgjK{_3*bQ;+B7k_2;PZsXY@Sj(6W4Fo^@1GW(%o2;C=cthgO z(LWtz^*!TrTINsAtR4ZrbL0QaT3xylU)43`t}?yS z`|77a1%;_Jb<@S3p~t2OhWPX`jlp)GE&5Z4=vM1bIgqHzlN!evZMd8k%=qMQf{YTE zww4X+XML?*a-`NT|2x5EddiDrpy4Piu$^{x-Lb^Sq6l4>+*rVL!P*I|gWCnn(|9oQ z@5;5wu%MC(-6GOT2&N@qS2!#LlQ+$01B|+0h3k}hB5uN6#Mg21B zvl8E~EX+SitwW}sBscg9ZA5~@9fvB)PNd291nY&^7$=4RN=2pwWzc~4{EV_B*skwv zq<+tM>KJQtk%^Wb(6juMmiF@fybm73c}AMhj$vimC+JCU%QQD}Pd<9Vpk9!*SwVp3 zo@B2_3%nlG#7A``g#xAeV1++^l)8QSJM_(L^S=XkFnG&=SoLoT1qQ#+5aXDqj-vZJ zVSc3+UReH!^yaSPw@Z2iBjlX~r9w99#;N6NAAcB>1rL=;8t3x5ZXZ6Z?Y0tsJl7(b zwbPAVsE)YLdQh~6X7#7(7{FguAaM*>7N98gl`x&SQZrR>IM)EmnGlPq@ZL=MNrZuW zeiTs<&r(+v2*{<{TX`3EljNo|2&QR zUZto*Z(mz(dq1YmATKa13J2xmc|S(fX$OPPNuN61pZ!HyV!^e8SWc0oj-%Q07(dH( zR1x%@QN+owgz%MPO+Ex&3F2#@4rO?3m#Ds0n07vq+r$};_rRW-o4Id%ead<4aeyp+ zwKn)FU+$UfpG9SbF60|>?ZVxu=RTGOB4l{Lr=DYgo0Dld$T6kJgTF3R2F#yJ|F&S% z7o*q}sT^rrBT}O;L)OzWi!B_Tc$@p>2JwD&#~m9cW<%yn? zMM|sAiDgf8L^}I0h8+fyM+{iVs=jG}8!uBt8Vx*m=^Vz!`TRLkxs}7orYPjOoqt4k zv<$>re&~%sT%hs$XHOa$l#&7?tV~=@h)+{&*q=tg`KAQCQAAT`{ZUNb>*I`B!{r|W zNdUA>u^BNQj}Px9iU-$(p6pTr20RvndwzjZL*KH@1}iBkZBwz+Q&Y9bE47a9KYh2 z>Y$p~f}hhHkdzT%Zi&eo5~+JYuo|tys*w_VmT>}igv&yvJ_~;9ww9UnMIUP45|6=hj+ z78&G7q_2hD3wGh^gI%_L1Y^!DCq94+hpH7_5CasGYM}e4-_)rd!8@vLwkNEdrCIs} zchbL)F0Oke?@o%%%l_@!670x?Uv@qm_6rpa2N#d&5{+I)ev7c`@+gebiOP6EMG=&= z4CYzI^yGd&9xchGEhkErm2WE|vQoHu68)}D zizyHqZ_4hVO8V2+VR*P*YV4uTn_c$B8@K#a@=dj237?9%$TT{=a(&-Ni#J9Re)7kk zF}2CyiA9>ZeX%g-5+g|Y1Fn;KV|CFwy7jrlv)rZtwb;=Cj&1sepQHT#1Ysre<2x_k zE3r{3y(2IVDIlJfAB;JOj^ha9Sd{NGam)OG2{L4PNfA{jogs#vpi z`rf{qi!~XTM6Wt3f5*5H;E(_NPJA{^g#|@pLU)}Ik?3ddn;y7n!5=R*Kx@Yz@QrtVA5QJ^5Aq$aqnU*E8S=3Hk8IY0un=W%6Z{mLih z%~w6s$o$(;9krNBV5nV&NFLLJ)j+L0Q>{ov7GVz*)h^!H>(96iKQcDXiyMW(*EPMa zP|I4kreNZd$U0*7msP7yBF%Ki2TDeY3~7~1eY@)bJ7rN>s>c_s?4k24sDw)sMU*+~ zmE1MIwvehd1_)u6+yg@pf=JB;J>E#_jpG zD<(C?f_xBCM7S6LEa7)#`)it>l=*ffj~+bzooI+)*qsMgijRFDAmjUPP431>u=|JH z3MLMZ%dZy=kGL9HzNbJ<6VX%J#GI+FpDvQ`@_I00!CHNgvn$rTQuqftHDd0Z=cSU7 z4(&oFZ5v(aW)otx)`6t1HuDrMz~8rXtPkpzPa%H?(NmA%@^W^WriJe;Qt`;{6FpOa zcV}YOc<|J)>pY7!&x%CJW<^`OoK>opFFUeqtwg zgKR(>F#38Xg)YyN9a7(X@!2G8%)mGcEQgX(4k{82{eldIv1gLMzK_I|P32#@i>`k! zVT?H6l6l-rUzVk4gG}SL>VwBUKAX4RK1CWNmpbBO3mKP_IRg||aZCUF`;Vi3G%37> zU9(B`fmKl7>foaO|15$y5M)t=x9iu2msCmmkH019J_?2qZjW_Guxk+LXDnUn*^8*a z?rYqnMg>CyOW>FQOQl#OT@-0iqMPZ%KM|0N)y3huGt5h8(b}Gm%NR~2oyXxn0a}~i z(DwFvQO{j?mlaxo9+PmFRNVF95Y0&6q}~Js5iQ(?#xkrv-G#y%ejg5`_)UJ%!9w2} zJXsMd4}5HtDO>s4oU@W7KeXLj5&P4A62q~2_V0KbOv6C}Sx7*Z%v&dbN{sG2>q-H0 zYRQ!Hc&?`*#Ml$WQ0hj#ZX8>lNOCui)tG1MzKc!uEv#5Na0gdD4|{+gA(E6q z?78r#Vk zHKCmo@;|_NGFHdj{9L%}-l#l5P;-ayjzM1Q^E`DiYyunJVG)gbhth$3iRRAj5EHFD z4s;kUczQnhccDh#gCg@$gGeIOIw&~6;;qUlX9rJ@7NGj=$1fEovsFef<$|~$>lqh< z4Dd)t$cb9+P7z2u$>9S!YKXHG0-W4kjf>aX-K}payKpzIEMdu;*c_BI9!*^~@2z$8 z-PT^rRLD55tPhbb4}5 z?Q>~Ms%M-59uPt(bSeQ;{4~vT-p711cP2)`)5dm1`q84e@~-6!803Hh=|hopoY54% z`R{e(YOfu#_E^x8^$2?>O@ymeQE777FAUsue@p#@<}6bofEdMod?DDdRpq~Q;)&%< zs@e20k7Ko`56n!zumrs}9Zqebvc@->i54 zWW(d6)Qq;#x`f5t*>0`y`Da7TY9f{}G1t75*@m7aZ_8*FMA)hqUt+gH2fL8VRS7tj zqgT%EZBS|wh=Lb=*LU5@>Z0e1Xi-|$OnrcHe_@LSr=|qRH=_}42E_B2MTb*uuUx3I z?FvpU?v8)$+>i;CHm6v~kBao_zs6+WeosD;hUyhY&RM>rVPhDErJt$MwbbLP3x=FV zuvo&ut?ej360`!*5z|G3?CVChuBrv^LHRZJ<&Q|&woQoOZ7)aFQ=qXlP&DG6e(SUT zT2ug0RHK>Xo*bN-4+coq7NXa;&I&r2K9L>^eCGRQ(jfMCjRJGwCp{4ZJ=^~vw>`td zrKk_?itEiXCjQWid|bmNY@EGl6sExp5++r~4Y*#OOoXxkK((GcodlZ)-H&M6ERW(v zE!l}F8Xf5(@q#L4xpEZfeh>dpi)mP)a-y+Ug;|%rW<+qdU8Nv)gb0GQo*joNj4iOz z1a&fIkl?qeX_m%A>(AN_zMrmi5?Kl{&!E%txDEbw#SOgOzO=DLi|x}g5xM3^+|yG|;jn2RXhgK=-zUf9e7ORO5!7lYtt)7M+S*t0 zzkLXW*nA1t=S@n)Q3DE}qhPwC4<(3YW6tkk34q@po^JBM_7f=-bNxtMY2d>k8RAzJ z@0gXCX?tW)?z#CPqt4>{g|3$Iht97=1R~l@$?Iz)2Xsk-nsw<^z^^{U79PI|NkC8t z?*VISZ0mAy?D$dsRkX|(eQ*$swn8J#_)zUH0MESJF~Q|D7_`CC6?&*a|L_8K*W1+}A+>w8oB4#0ag4d0hDC&bZWzS)C* z2L4?t1G-w$4D2-GA#lRj>8~KRi-D}-F)V_iPwgjRaSO$?6JjYase>U9tBMD4dLR;4 zGH^8Jh69RgJvG$@n709D>%Yw7z+x0D;ebm$JPvHclA&^!SsZa&N^1ggo!-uiAxNX< zVWq3fB8*X^;gA*LE(1Hhyzp-O|MiR_VT(u>AT`**r1$$okS(?#EjuN zqn7aDNSziF@18L+WTeE~UUbi2Uf_G>z$M!5>*aGIMVBK1UbLHSEdeQl6LR`TY}g_< zi$2Nl+M<3#pAw%8{10deLCMcqS8B!*QP%pc97-tcAxZk zaPm$bbAC0`NZTp}3`!KfDgF>HT$|W-&9K|$KxP}2;84!q@QJ`M*-8WWh{M?=fJNdDthyGLB3wmm294t9M^jWm1@ronVE$i(L=tDj&t}&?`(JA=MGbjFO zMux`B&*6m-1n-qxOzDZ6PC4#x7DCa5r_7lo-2 z@Kt|W23d+te)4F0)=zlzp;spj>}~45a>uB2P!;aRHRr2IrwlC2XbBx&HL{XHvaBXU zNLf|huIG{*o0lmgOP1?f&FqE9ygw*E#r^Ut+GRlFxN>1N1uAE2+&qBQ_l-AGb?S@3 zdg9#u{4O!XnX)Q zOSMySYb*xxiXfw<(&q0+l$Buv6FmAJ=`m5wvj%H!hexQ(g16_3Sia9V`$aq{ls?bx zLa$<9((!_BzYtd)3n_MPb8nfY1|{)R5gzqa%<6-W2CfjeNp>ztq@N66BE) zl>as`Rf^WCY@`zP>?^yxn65D~O@XDQdOC_p>MnHMxM2uG8F~t1+Oe-52*sh&Dhqug z&3)!?f`pL)H(wI68VydK9kHCji@wJ6^vu#$ zOA`O%xG}{2`}F$+6C>nl+n+KfzDLtr38B+uymODU%G}QU!|h5%aZ~*5#YHXWaSk{yk@nEtTH&Ug7(p6;YyS2T zYRK-=gDtxxG07V(r4Ce#AAqnIEfnMe$>~GCeUB<0^=t7b+1|2Xq)Pr?2P~FmCRn*C z+-5Q1KS71ZS$Y}^FXi~}ZE!^lg2Gbe_<~iCtsLN1J+>1AkwbyH+RwoOwL^ zbYuKe2|ep?#T`4%wIjSw89Uw4qfI-Nrj~kqjwR}A(8GQ=Ux7S4x2RrHoRq*_@?Sgf z(JU2D8LUy6SUUS`BWeJQFfy(!|5L9LutU+Mv#cB}wD4yBM*wmhb^Iz?U)277w!0x{ zU`Za7J*$vEieaJX&S~zRZy99UgT&;Ho!X;V&!;7RgasDU5-nWUuYAm0zB>5()e+rJ zbgN`QU&825x8w#m-g>1*q_#Bi?ur+2amqyXK!r@XpOi|7glM(rdy2=cFmUhwTDL;% zn!Ib#js5^lLVbJa&YM*N6!^wbDT~F>9fb1r1`&NX0I=P7M+O`hE!Wpn(xPJ5?fBnh zgp(N+9ODc&3q2vUu<=anG|L-(eVJ!WqUeo=0(8=?!|u9{jYLrf)Vx$`NXX-L=_{F% z-&0m`Y(zz6Vb_`O6J7T>Izmz6fOzZOP`P4U8V5781v=yB^KPYP9LRiZLgA4n`{kgf8gtnW?z3 zcJz_!y4j)V0}>&aBA~T3@v2p0nE}EI_m!OEwwng3E@yydejkU%POpK1kY2C5ydt%{#PcYUWAyx-OtTa+2qhY~*d?Ec zZxCx0Y&=u(scOb%8D%i9GA^{^{hBXoG>ZWtvwMqNeJM`F->&#LKIL)}?5<{S@8L(*H=E*}7si?6CP5*t z;47!`W5Ke0sP#KtsaU1R;xH86-OshuFwnRr-dU>qKn_YiOyu+3haFwJ#QcIJCn6O- z!|?OmJL$Kl<@`u`*JfR9U`xt%y$5aR!~v$&)%`(xL^ZfF7q@QkaoM=d=7wXU?*BH2 zpI}F=#2q|}u4LzSn1CBgliTV8qu;oc3OWQD17)IZBlstDKXZa1S*NSL*`BXR-jSHE zFU98Fp=5<2qpgLs0yT;3NrK&MF!cFzRvfktfP6LDN;Nh0)=F?jSZ|@*4<+%-*ADGT zavt1FGr(+(O6^ZObv2N$tX=Bv_>ANFS;{+xz7xrcG@uf8r`jxVY0mdOF+s*HnPrhO zUcOL)3R751fl8|i9g5rt>JscQiRFe8|2rp9>-iZHD}U<10@S;7!07pHZ||<6WBq$= z7~(!q>&EcF`I?n*px`u=#1a47V~5OR4zTI_Y2KNFnKH$^x{Lu!_CI+!l!}Q+vA`(s z)`qyp;+ie!2)vlTKua251+nim*?3`6;0c9%$t-5~Pd~L#@S(nWWtq@$&f-hA4~*s< zjhg|NiB+T}%o!|#V$hcu!rRJlfU0+Lw9|S9+uU~8K~IWd;TqlM8)CkL2wRH7Wk*Pc zQz2TOXZ}>By{k+haMA4`IMG8Bv^&h0v29)13FkudvZW?}zr@llQ5i7llqxRZVV$RK zpqEYoMA9m2CGzu$g^87fryD1C80GX@GBI^zahgsci>BZ^gQ_zE`sGH3(O^Ww*i_sH0br$F|#Ax6qu`ae3p}-^=Xi9qN|J< z!!`P}?D=I^KSM3Nsv?$)tjsYN*N4A}RTA36n}C4euFS+Y&CHec@tvLU!}+s^tiBGI zj!1BXkd1`hwA|x^>WwA<;ZE+IAt733vwIIFc@Z~gJ%$)l)1MWjxLq-=E8Zrp#Okz1 z2ALf6r~6eulzl~S6Ce42K2c-scNBBtt-)Ki$81ey5U=w5RA|z{vr+Ct<+>wtU{Gh0 zW#kvXKrWW^{s2L=Z89GXG6f&rRM%ZZiOTa-$BXl+31)g2zrqKMBRZr(!-Qm?toHB2IE>Y=yH z%o?T<+Y-zu`jXdIF6yW(@>rO1S~rRc&ZBY6^1RiNSgpBLLbT3&Xi~nL#BOyF3Ay5){5cCn2TA;w zlt{JI@g?3lN8Mm7H6D+${Q`^a!8Np(=*8$!c(i!cvU}n?a`-DIu1@Qw+{sgMhQE^s zn!SM=ebvy2w(in-&(*{wd#cS~ORv~mPd9N@Ka$r9!pLLkX?*P2!=)Ys&*l=>rQBO? z+e%UdL0j-?5Sx9b*EAmWN^xGv?5NhbqeA`pyco@QBD5H|&`gMogXt9tcYGLV`Yztyd}qq5>v3GYQ!FZg>bY? zQ5q7Dy&DpR^I48coe4V5R%NT##LJT-jRg$ej&Nzo+wN9UY=yWG$}yZ$jz&)a6*r~c z#ES}n?Zh+Ax8Bq95=}*Q>^)1i!rkHA?jsIE3ihCa$xhXox5+U|Fn*yUiB+I0FGIEN z%Zh`!Ta^cDyDH+y7;t*evwMwETVxObMRK*jV(1o$ppbUJ72mZP^Pm6Kj6yiY1VX(YVZc35-nP zwe`)-XQgBj9X_UD6|)?KZH^w1o9LO|tiN^Afnd&Kx%Fk*4!?5trPs?O<^QI%R?64k z^4Pt-ZaEy+8yVn!&3O&?TnM9;Eb;v3RMe=?-dT8C)q_m@_;EbcPNrrfab=HyS>!no zm|-`0UE)0%k4EIhmp;<*mNjT#6-}*i9~}>-MZ}l<4^TH9IhwrEeqcnLa4Ia$|228f z=XW7)rRIwW(EUOssdgrY`4$C4i(QR!gp!7Py28)@blq7g7^hbtu#Y4>DhgwJ?U+6* zx(;R;W2^VR=QM`jJ6~};$NKid;r!MH(n2bJfu#Zn!Lt&L1&WL1{txCf`XsmUh!W1~ zF0bGKYu2BRAs#){iaa3?&3tj3mAhO&;Lqo^hcfM&+wHWjSG7E}!Sib2@R7K?x~2b5 z9Zzj|f;QX?G5Y;x(#JSdnw~d{4jU7dyN>)Mq|8_m;Q?-r79`<{X_DoEDK$+V8l-e!(hs*r7qkyQ5*|A1JFq$G#~mA3(P4;=T@ao^7S6<(fgGVPCm z1v=vfIut&>MN3pcxRp}Va;)2IIUTpWsjK29Lh)U-r=oe~GHu^uO#FZ8@$Ek4Hxs3Z z@N)86Q~tU^bdi<0KzE{mGm{m<_W2@(!{yiOyA*j7$ zT}_THE2KZY*;X(?8UsV$-|Y*PX&4*N@JWSj?S7KB%HH>+{)CJ}Lp*c$y2jgndU6ei zoee13pH5}%HEwD2{$)IwfcM> zE*Ur2?Ejiw->bduCj-M-Y|hdq>lhB=Njg235bmY({-Em@f(xm~6o*Y6prq;LHwk*8 z43Ng2?7N}8j@f3~-Of$@R{Bmo{H6Mx>-Ob|Tq0>&T>2=FT6St+W^VdVF$Y)~k457+ zzpq{z;gWuHZ(K)2G(0aw9E*Q~7aUloZdudP`)4F&{Ytf7B zdPvNzu=c;#W>uW_*X+#7VFx^r7i88_n8Rr=No#ue(*bKL4N@{i4>00MCAF>>7+ zdjIU}Z)gdnq;ut_sCGft7vGfCZj?YMYts;bKIB}~?N^wPD_sg=t9VnMFcu{AfC&LW zfQb6>pcX6D@7}${Ro&&+>{b^;(KvMRFDC;IMm63$c=6ory;5V0jp?JQ1*zPq0zC-L zj1~F_z=V2!S{2QambAXT6e`(;|Cn^5IdB4cQZF2a*Cy=us=p@Yao!mL!74&uIhoP@ zvSdVpG!u<41l;Om-q7t1QbQ!%gMO5Jq7QdwU#QNaW~db2S{hE^C$;MOFxV-uLJ~d% zoMrfHany2vm%D+!-^I$a9aVLA)G4GDddXyv=G09jd@gJT8+xXK5>ADIzg>j!6PVq4 zC(HkRE!Zs}t$)eD6Ge-NP@d)Iy>~5UN+y0L-_JYx2*xSjme$8FQF<(`8OovOV6UCZ zC$kbtOtaP~h2!>%D9~cJHrQIx20pO#d^5F<^IZH=b8xmss~O70#0J4_<~@+KWTU{P zJ5jgZnb$qo#z?dlJdUs$@p49v^i5Vcf<#lgWE-RR=U=#JB~hEM796LrX_zR%f*rw6 z$ktcx!aLi$6ztDBy%4WG>3`KY!U$VdN;GyR`sdY%K@vc1cWgxC4Vp<)0u_KpT`e_X z3p^DBw=fGm**gxz*fg|xP#!}&6Gu+*ffN!&WT#3Ow+{;LR;HQ~my)J>O8#v5S#aI# z-E`GLB%cgPr=?!}W(fygu=~mZn7`7@975cwbWVF4SpJF~ja?{qQ-4+wWGpB3aeVj( z$Y{liDY&sWQ7@W8wLc2n(|CFIpI5>}mw(LO5O-89QA&Mi8#)}60sb;sj1peGD2G~Tyt5}@$$Ub=WGpYv-GtwTX2MB{}E)3#3 z{F9rC&#j2dS2fs7hCF#hZrt>vgis**!T%LTf8iI*sd9Db@x`;^FoK%i=8Ey)mq5Jw z{kiky-k5ujcBdS}(2hPcnfmQw%>*NZka2-@gs<%eGeM9WR7g9<&^--`dD-M!r}c!0 zeG@&OxMn!6kUrTUtt|7rBZ|tq(sIZ^YDh**gJcs(-c98-)xkNoU6>JxX*J!zg>Eo>$wKwuO02rE^o(7(Kwfpb zP0eK15nfUk2@LscAVoYkM_kuoBMx;UKJ~5Fy@;1%XkhGo`Fa2QPExC^naE;qx~lWR zuqVc?2&o=6^dM#RJEn*=gA(iyniAy)jdJd#HdK^U%2m5ri{srn1M82lq)_SDn?`N3 zfy?m*mU6-oXem@W>eAIpn%ox)i_;Oq_32fjR?~2LgLRvmW6;0t;y!?JjOw|S<{kTR zad@m7bW?iQY~$~ngzKJKr7o2``sTXjPSWt$gC}|E^J;+>ph2B>8Hed*)&VS?TB8m$ z{D>+fx|)$xF@AE^Ks;)m1gXxl4!Rf99(E_iCOLRkNlD*z_s>iae5WG5(k$91zZ@SB zzDl{}dZ}4i9E02N-MVMj>mXmu5Lv~J4ZNh)Q;9xB)*VOdBok$zt5)LT&qrh43xU0g zpjY9qFK*77iHidChB3sTQc*l(5(0rC91cK|AZ5bcGu5!K?f8Dxyz!LmpO#~uKfc-< zP4i~wAzC#)Ijv9^lT0Pe4vFDqys1Y7tyo%E&k=I-cee;s>Dvu&B9r@V?n zru8GWwaC?sfzvop#@cNKaZ28r7-0T-9{vmS_lGFW67F=P|LmLj8qbuS7{#V@g{+gi z2eZpBeTaWRwRd4i4xbFIGwUio@LJ{QgTb!m)`Nk9?l182T{x7aUooACC#v z2oiS>)vg#c>^`yRnNJ2K#L}dHCNO*?CJh&)&q?L3#2hl^)&zQS?`J~yg54yT2WK=+p(k9v34JFM)@@c@#ylyx;}Tl{G&5(GmkE^&(hw90$c z(;5%%cP<|2iD)o*=v)3M9*IVsxu#Jc3eyAUSH$l~b~i9LDU{iW?uKCb2|lfPnKl$r z85eoSFT--w@*|ebHCI1Hyvd8Ia77xG>5gt@`_+GA17iO~2r~{7;kl|A1kde$vt(9O zxnpvh{acvm>I&ZvD&~JWd}~a*sXwSKt-70bQnbhhkqv43P*B>dVKMPQc*%3c>6C%vpSI}q>IdV;QwH!qM}4F} z`AevI?rwKYLqyA*95dPKG6mU2j{&h=v>2xkFMLnH6;*A6LbP_NRMa_|da>LbahIJ{ zwnoIr_RXib+BDvsG-!MqD50~`zWvcA+L%kR5Ie(KNXIP%-@f-Guaz3`& z2IyEog=HqwDWg@!|E}zF7MqpWAyt*v ziJ~<;qI!yBGU9m@M3Ma|;G0w2xhCQ#jGv(*%^vO+l9Zr*g0^`nolm_$HI4DK_|X!f zR-Q6Q3YM<~qyF;rS%)a}v6{0_HKhZ!FL{Pa`|eE`KTVodAsxKJh=x-d zoZ226vFOo=0!xSnE6Vo#b;t4H(Q7vTaHBG=1QDPnSRiP?>YoXM()C-FU6nie?71|0 z4m_>Q%0)KQ9bEfQ7cJ89Ww(jwo>=YD!{Qdj0po#MW=SVsDnb)AM`L*E*`8dZJ3kHv zWju1xr1a6RSfNJ9g1P*n8z0sybwjO;^<7zxxzeCB0Q*Yz0tB zK5$8=J)5i}VQ8EKKA6hvKt8zRt5{ri!!)3fWdJh(O1IU{C?7 z;NiAL{XVK{{Er`I#$)1>?M$#dn@o0DcSl$K618xmuRs(&SvZa<#O0`dc)5RMiWw(% z)Zolc@Xwql>y;}-lEC{z-7BSGFDBwL7%CFd_76|uOhZ@YJquq{`iTvP?cV6vaGVUZ zhpdhK5~x{-hQ{Olu$7;ICTqDv_bW_>oDVkyy1NcYwCC8i3v25$qSdiNm!ryy@ZL;L z>hWh|I#CERz!|(~{)DyKwD>bNb99Re`m!IAy)<()ESH&B=VNMB<@V}oi^y!KqRC~K zN=?EipQ-g+?cP3*>!5lk`K2v!n}NLNHY0YlV?u~aWZJcN9&R+Y@i|=HlYNp8VNpgp zso=^?p30#Fdct}YD|2qH^7u!}bytDuZV=nyjPw;3_A2MDxV;w7Gf`zXbEg}AE2Cvp#=>^p6{49 z^Jp?3b^*&(mA61vuQIvo`H+2gHMshdf;uyDXY{LC^#cpm!(sUn2Xn<2EBUk<>DXiY zzKu_4lV0vO7f8Cf@4Qm}I^Zu3<;qa3R=B=)jpr<69zVnr<0k6qINOp)v-Clz+;}=P z-Tj*dRyiCcCM0uEq(_b^5_|;cSsPw3VSOLxtkRurLs+J~yld;{+8cpl0j3CQ9hQ3u zCvF4Gb-j8gFgc|$&>juIWuKV8-jf4U1hh;PI!=l=T=kR_rF9lm!k(3{8W=n9`JR#h zMsWEjA;wdFfn(2-s)nA6p?{%+>=y8#W%v9;Z+F?os5ixm3paom9wl~ zhB%r&Hg(wy1J|B7y3c=25pZF!-BL?K4dHSVnuD+pH*Q#B{yY?~u%?#NV+$3qoSGJS z-4AR?k)!4%(CEaQ)P6T}hEHnkbv?hu9#?2kz$_vG5P~BO9qbM27MH|qL@Govh9grq zm?H0tZ}k2Tz!gcZZojz=X@B@`kV!_WOuw8Fv965ri5~gf*J0WNR+$a|ar4+=W(ufO zF=f^7V*?9Sx>G)OgP?NxbZY;LlP@y{Z|hsX(mq_F$9G>AClXxU;0LxopH8X&_$2I< zxQwsbgjDm((|M4OGdqgH_8 zk~bFGIm=$te1h_wOzen<9%|R}&wT2|wfnCPbSV?+ojtz)11{0D9rXh|swH&W$Iz+3 zzWUe2IO0?|Qfla?__->FZMZRNe|CmG$4#9*+J=NVpX3`zly`?e)pZO+PK6fQ9=j*jBAh zgU{leKKRqd?ac8|=YlwN$KUs{J&*h-eQv_BtpR(zjT^gt9=kXaBH_2^esDDDOxe0r zJk3G|>UHH2wI(Ga*k|b7z7ty=sU2qe*bJ9Gl)Qz`O4VD_KcJ-V_F^Ulv1?5>!m(M+ zO?uVG272THjRdTJ%35F#f$e$oe@bt35k*dEvcP*sp| zf#xpi#-o_|qg79=A5Oy}#`=k1+~? z?Sz4CpK}&Z-K=`nSv-z5f5nKLJp5PSx!!0uIvMM9uo%~g<~-LIyr8NQZEIRTC}YPr zT?)!5JH6_&4_+yfRs?cm$`_e#Zt*JGgb)ex#+|{Zm9d2eVZoE*zd440;OCx6cJ7}n zz9>V^g@!E@c5JT9zS%_>zTr3W^mlh!mwYocA=+f9QBPD)^j&>VM}IELFVoGd1dp)I z7&90f{UZMLBpMwKq`hgPwGb&@@yBsvkI!o2npp$3tKy#+Haw}$mPDUF-}67Rps_>P#kao`o&Csnja&a?&$-1|vR2Jo;kYs${<){P-Y zjVWfHkiU$*ebV62`AVy*8Y2s<|D)(U+>%_}HxA++xD^u>1s9G`%MoU1hLGEwsfCKG z9EiEfIylop1GkAQEobIRF|BZfIMQ}*F;T1IC_L5iG`>H6{{k1+`@YZf-1q0>VZKG0 zjYJ07C&1EHh=`Wtv7D2D(>f|6(xvMR(D2N{OJ~Sk_lKyZVBZtQ)k}3CZHI5xYJV5h zNppE1+UvWIM(&Q?g$2>Y1(e=^l+#U!%dsAVh1Wd9x9f1h^z3Lb8-_r2w*h7w(1b8{@t zp<#2&=tblaz?`FJ{iUA|m`{t^%7isI+oD`6)5P~p&u5j-F3k8zziP1B!-vtp79$2h zTn5)Fy&q}QAJWIsnL%Y4Yb9S*360ha8&B&Y1BNcEk9Zb)tG?S6ZiXh zkOH3CXs^&pH9~!QleqV8w0?m#0?P@L*$nZQv%=nJ&aU4Ff+(Wqs4KotzaOVcKySql zxVT^{IgY`FTq<7z*h3{`3ZCz>#(mwlS2ljp+Havuawio&JAs`b4x(Jo&D_B>yYbjw<(pe(ZS9zhnSIUCL)BZtMeYE7&3gt<*c*u4 zqZR8>F(T?IsC=dW0YK730f{9Or&b4!?tRPjxpH#D{DXDv6R!P)ae`3|>x&qSf8ot# z*C|KhiZoTuFvTgpN{T9k5kiep$&-ow>d8eU!BX|3TyMNWi)5W)d}#&1K4Se}im7O- zP~LiJ{{TQ+nLERU9cUzOfZ| zWIayJ+epQaYv4LL?K9NfPFBu`LrJNy504y6?}E>4_=-27yRNg%vgmKSs0wovY?06l zdg0)WYkc{qm&qHPeIOh?O^Bod3xPTmBl}o0Z;3;LeBfG^Qba&{pDkR)%bX0}#c-O- zcRVPsoN|S~st9LOnCSxtaFgPqu?#H@k$|4Z#_4w>_~j%b+`ycrQ)kb|`a}6{SP1m1 zpZA+-JxpktcOhxy6rnZ6YMMcrR}<401_1OZ$RJM7gWKm$nJ!|vc0L7cduy?@&;gCB z%;yPbr!&PZ*|wvMkV2JE{6Y#?ZUZPr!7ZV~+`Zm3R+gH4z(dRrGA45T%oN7Dbg>XU*~pG;Tta#rse{t`>D#ik{9S2Lghr}lHRN7|L* zfz#${O1#1)M5_}!n%pn(xB8z>?U;Bkj{W@iXfbic3 zp0}*FU^$^fJh+|vbQXO)2KwRQ_8sXa^zY06sFiM|l`Y%WQLT2o7Xk`dV(}*B@KylUUTCOq_tiH=%aph+ zS`{g|!HNSfKCXC)QRF`D1XlyBo%_1YE3$E<;OZV3rOzMeM$j|F;$FT0lkl^c*Y{Oc zo<`EkH>{=YO^3T*(yPau6sbhUEiOd)=$~>j-}U$ip!wejpM511k;XiC=Qz`5{HrDk zW&Z5(3<#trI_PYD{36>y<~jw)VPh{gKK=4-TGjdJ zbm+}r~Gdr|4rxe_Lf7e^S3w0xq~yPb@L-!r-fQR>cDb35^*5)4?we?D{J0U)vz zk=!P4tDut+7ba?L+gQMcPvwrTi#iMrtFhG*OL@K#&B38d&*n0}epyV3iOor|P+(>Q zFz9Yp;vhpEA!gn;`50%UYUtmamLm=# ziNi3(Azav}qPh%L%SPW5W{FaEE4x+q>RsFZDIsN&Bivl`I+R!ImO1XykE^V(ZKNsF zhx+o%NxF?<2xVizd&NHYbCi(mzc@tU3EhpD{^vR^OY<qP5lL$qq6M8LMsSbw2*O|2q9|59xG zE?yZ8HzkPNpR%CkeNahYDoes6v<@3Lv@F*={s_8^GmbwKlM-hM?dGbfLy;ulv7qu&z03b*=U5HN@S-4$G^4p7>(HP=Nq&2 zJZ`Lo#mj z8a<@?k4paPjD9rdd}&3&z(hQi88sUbn-s@Q5gldLbkv&QZNT!vonaO|-L|L^A>Y20WsPJU7-P-LNm*1EP_ZZf}IMl8X!>E>EyqNCpeJ}5yI86HUK{0dH zC3T+JUvjZ^qTIOI7ocY$UuJ6M{Wr;reQlJL!2Iy}f%NHQZHic~t->*%yq)#@J2ym5 z6*wGR;1A3VR^K!{72Fi%k~MniZ)WYKhp*GEx02p5imE4xw9Z`IT=iJ1{_24bIW=Z~ zHHlnv@f4|(e{<%ImNhEm2Z?pkR;4g9xl;KX9ktYXI;s6~58EPBlMXjyghqQi4?Inud*GR53t z&l{b0iy2mZ{~>9a)q)6ofG`gCv6MC*Efp4#5tQvEC1#DS!Wfyr`LmxTlGHNi`^Izf z=_UMUK{2FZw=YYPXnTFg`mw_iy7|@CW=&FZ#u)X?g6Tx8=eyzH%#4EmjX$9xv_6U-@PJwEc*9!I8ulGcVUK+`deswHt^HF+0Ukv z+vj6WM0a~kA#uJU($n~ahslF7&BKMV_MJ6gk(33k?4vSR%PS1Fyyp31E^Rp87mZ{B z>Q?md1kgzg_CgGO&qAM?(}LMlWBQ2YYKQ-Kwn8u&l+tY^Xx6|F}XLi}hJ? zI0*FLS!60|if$KVL5rzAUpnrG|E2Q`LB=XkIA5FmSqdU_(bt`Z<0n#;q5JOw=Pvku zq}Xj}**!FFODH7L+T~xX$n? zPM>DWFkz)Z$hrw-O=2Wyi2T+5>UZmxIP7SJ&YN+Q)XLZ)imv9Bj>4_8OHOHb) zk_U9h%ck^i+e1QKVk{LTq;lc0SpZ5L%{)ye(+L%kxgg*~HU%SWE>svsEeN+CMq?b8dd2 z6!OK;m8dhcIwZ<T}y| z(zlzpydQU4IzK4qXH`X3>9q@9n?fD}~u0 z_#zi=KMseP0v(3pJW^m&0Eb=pk0wMh_0qZ|aPH*g-M_n(UCgF(sB-4!O+|pP@i)Y;#VpZ*sCZaG$w8xoRo$piW0~g^I1Bbo-J!PP$NkiJ z+tEihRse`mh?|lENeu&7>$V4k*uXo*oWP>%3{fMhQ3H}@Rvvc!L<;=xPg6YHCg>U< z0K&+el+`EqSwm5P#Or%EMlQ~i<`#!=Gwq}?8_6Ln$$`l)SFMk?S|pOz+&+LmBsXg% zP5e!b>`0R&yP1msF0xmgRnSi`PvI^4K<7ICGKXYQJX;41?b)g|-X>3Dtb-fC+fr6D zsPSa6k0OrUkIKA8PI=E<3$9INKkGL@d~pM^4zL&mwe6meCt{FaWTXNk2MC4{(1z>v zg2x!d3xQ^KawQbm_sXMhE$86CsGL{)rU-{fD7-MblxtEw{C%TT@G9CmNRgQj;|l^Y zO_w)c@j8IoqitPF+g!j;c)Ymo}Xww7^Sf6}$D z>(twTdBGmu^w~B0%m?{uO5Cy_LecQo*T-?fAeX=aDG_0mi5^LOhQk_`$s84y=Ho+g zvu6un{^PfsG(+@(Qbu9|LLh!g{?X1bfbZs{tdwGJcjlr0uR(9yd05ThR6Ifb@82It zQ6Sg5%aUoWv-)3SVJ!=P&N7mMVl{tJoI0Y3J_i}`45Lo85PN*e)Cv_f^Xjqqf=^-M z?Sie5O!JuvNl#|OO&cxon*{!Dz**S(}|&x8gX{&}CnvE?Zia@9l1 zr)M-8LlgP+F-j(sv>BAeICLHHt|aA@udn?}rWo3a?R;&glyZi_Tc@sNbX*E*0Wv3d z!XO9ulC2GiB6Wb_fBjQ47e;~&qmrmGogu&Hdq4q(%v(D=;)HoT`NAk6&!n#GsO0!CW@Cnj%zWgGg-+OCL7M(ls?Xns zx7|y`pEv|q3AA}eu;A6CLc6c<4pEdv(Y^sZCTb%v?hB(?D;3xYEfXfo%8Z}AloGE7 z%JnfgPue02*v6&*b?44bv5$WQHF)9K%5TpaGe@}b;V=d4EAe=N1jptmaq`zj)fJeR zXu$b@DY4mE`;9dR;|PYYlGRH(WsZHy`&6h4=Jd^|wJ5Hm_So%D#&^dk1x^5}vpA)FqXP$Px=OlN2 z*3obXniP~u3Kh{HCotp~(B03##FtO1(Mhf6BHkYa5v)BQf)Pld&#botqlTQwSl6K( z(cHB@d3Afk-_U6oe>YaWXZT=H$mme4BQ)+HpVZze&i?&NLJOD{u5TkPXSnCH zODw{zV2k(6xfJ4D;a-lI0P(ll6!dLc`($a%z-aF8g}r?M(lYM2Qp|Dm)}|ii@bU#? zhmJGXM#QgntmR6DJFHnrK)=mwEK?H#QjSshCGGy=L;y`GR@xq#Io*^1QiB|K685Qa zolyrNg`nf=cUsqfT59YSbPra zgSlifd1tWu){4er@?l45*~#VPbrX8wW&Q^b78TzkIm6xc)t7HQ?7C!!hi!vwbm|^g zu7h!~>r&aq+!_~(1=g1NodR}GSGe+F>0E9lnLAFszSIPu7d09#>RHq@Xt|dN`MyyU z(6(-gxKys(V2Mo__D?66A#q&se-Q-ge3FPwK1s6g-Kf}Au8^7{j6V=R1U6%WsBf5$ zahx-i)#i1v!kU%`r_x8xxtJFT>=V;Yap(T*PnQ1mxDW&OEW;>jp7To;OVP~-{2Bl$ z0bf>8@F|{;rNE+Zq?OMYK6F>_Mh)X<{J{@vlM;?#QCgv91#e4zUCR9sPrgkE@Qjnc znxZ)@YuDC0t(jw8^f$jpl;AS6onNUBq|?-Mxyf(Q1rgIav`OiZdTqzJl<>xbVfK=t zeloWa1rdyN_PUeJWPW#%e`^;NI_WRnB0}N+EVOewsc8hh*!)A)I1piBFgIKAMhE$; zE>8E_CtH=!InjZ^s`&>}*p6h&7eI6uEh8&^s7svn4}3$~Z1@q8K<^^)R0+VP44>}m zKS5K_-g|hxCWu8>B6ZO5TW^>Lqp-ND0Go7wlXl0K&z+%%96$@gY^Vlz_YwSHMm2 z9ta>_xA3oQ#{U347`by7&ZRksLc8H{hzQ52LDSW57l*!(@G!#}H`v903J@+>zJhoE z?vl)QyEnJGJ}=Z902x0w^qXh?dt4i^QWa2aQZVL3<=(2IJyx4sXQ-6iw%(W^-|xi@ zO&RS~q36tti(&9ZYmF$-g>`>sfu|?s1gbz?{F&v~Qf-Iws73fDursyY#L1@+mpN!m zHNSBmQRyMq=OgN1hE9_P0{DRDv#0t4bStwo+9-nR2+{%|>I7?5XxtJel-cOtc>2cV zgGIsU1?DY4R+k5~&}PB;N$SLmJsbvbZoW`}R_GXyNG^qMg`a`Vi7yT~l%5#n$Lb8U z%^FKc-`^isvE=L(j2gepvH#QF1A~M*Ra_>N)+Z$)2RT3pEca@IFxp7jVGsw3;t`7g zh{6kxd7d2yg=f9aMC*3iMVp@?nV2SnDO#0PFcMIA;FfW&eV)|39+mH z03K#I3RVd?gn8yK;rBlK@ZX(D6EqsY8zW$NZ20e`x6YwcD^2G4p$3%4U9h7Wr$NPMZHq&ag zXEsBxLxtKh_=0@5>t^fqNIjIjVK3V;=lm5=QTRbs-LOEiCfYKAltn$0CrznfgilNZ zg?vM@s^^0EC=`I}v;W3*Qz+G>WJX*Z{5E{%1zzgYI5dL>yw`2#q0u8(>9sBB06p z5r@H_v&RHG>@)ga@5_uH+dXPF_SHaE@J%pUvZ^ldq$EjlL50o=HnV3GPJcq4q%cGSSGw)s;D%);zJWq+XqM^ufhMs3+|s$e0Wj7)&HaI_)BS8a(&GqO$h@ zCKoHpjwbxS*Q+|u&ZB+1VAFE8L`6FB{Y6IPQ8(u-Xrc&inlP33>c}F~%uiBXH!uW{ z2|x~Ttd9V@#QUf+g$<^6!`4kfavcD*ut^H5XfdI;?tb%b>FdzugI{+YNUhXH1D{*P z1*{zD6W5C~jf!r3g35kt9&toGVck#{>BcXG5ty7UQ;aq5vmpI+=Ft&)x9!mHR{(Er zteXDuysgK8r0@N*=CJZDWPn_6t?eBPetEK*5tBy*&FY^>IVav=t`?m9sp7@NaL%$OCw@O3LIZoZ!8t$s`WM@aW#iZUU)#OA;ph4PEnZ_HOqIb7DXMQ?y_ z7<*=%sf3S6?*vh~{M0%r`eHjpumzRREGNcrD$pamcyvWV@1=E^yq|;kH1%ck2u)BQ zOLYb)?Z!5ijbvo1TTgzmxgRyGR35&>_K}~&@c$$UTdL~|G|$wuHnzph&up&&12@S7 z>a#KjsCh?9X8t~EHTQf)!H|atUhjq;9a8|YHdfBQ(jSsn@OrnC+ex5LkfW@`$qah`xNmRtqpF}1?*Eekgf_g8>>y-i`n)4%jL#} zMPoEZ)K5|#F%m18(jtws!Hh|3x_37#0bL$F87JSeFdI2Q3RQ26r}@hMb`H;ejt(h!$Fhp85jP%nZd2PLlVABeJv~cAP z?o9-r9>ntzI6$}vy`sllHO_s~90LMKf9;3K26tM3_kUKI~xU zVUKd-&>xjbr=V}G7=2lL^4!7lD|J?J2Hy?EXd{>|oMW@ZgQhz>84^P0zoia!+QgF$Ugh^GV#2i#E4SJgWU~2v@&?`ea5<0LIeaj6b;8;! z1q(z<07(PGp={bc?zF{F^JKHH$Vq34$Iij&-|Mxt`iL(;-KDiEA*Z>!o>_4R;r2a; zk@W_HIKsgRk|Iq|)cxu_V3mD%DElu{$5~B(wXNiL*6YF@W)sSn23>p#$GpvT#yDI)*2UB+;|%c5-GByXPyokqP<$!#ZJ1-t^0z1qWga z<^zTZdpZLYlr#GUA%}eh%hua`eb??Ny-qUhDad@N-U3748oaA zzQuP;n9A6m`wElSK;@;6)3Y+zVy-`>R!{6eOyO6%wM_P*(seL$s{m=x9$=#{G5{AH z+C>utxVG!bw0JaorxgIJ5qHhQAT<48g)(~8h|x3Xjv91Werjl=a>05;_z4)vwGn+h&o|n5k!Vn9Q5}2$H({&eI*0vW$cIq zd%{xW-&zLIu=~5Yokpkm&^XgxZYFajP z7SzrD`w#zCyT(S)A$ZmQ?)ps1)U{E7+D;857B$C&zIi^TpE;=DuqYHTczWcd!W0Q} z7;rO^b9Z9K&PyUrOsD4N<+6>i;AhIvW1qfotZ^P z_m`K^&)XCT7n+1dFMHY-9bY{{xHZ_jj`&)tD|>WyZds~#Fc;=NKmTXSz;}))a<9m| zfP==J`8+pSC=M8XGEg**{1fP4_qQQJC3rF4p}w=jKT{}!;s#KDKGktLEJC+Cklg7Z zM(1Z~dFDoV`E>CQYW`KLF}cl;$Os`*X)3lBs3IrLOF5*$*%jepMu!vRDE*!@X_D@e z-lJ5nkrlUu7n$OMiZIgVRv-o;3uBUWbd>XV_i|POZAFORJ z$wlXGx#8~(5;X2&C8q)VN;}2nEa_>9y)uoU=o<6h1*O6;`+wq>us- zC?c0WEq<1qikI#_K}U4KExjwo&JTH2p#3)HfINY5jRr1v%!w&U1M3mZ>)-&cQcF*JXbdEH4YvUUgbwG!*e=ps*`v)UebSyk8vUQ8vQ>wm0TO=O8 zFF^K8AMVhc`+7Prx`eiT8Rf{*yBI zKbFuDsIrL@$2h>yFc0t+deuVZMOdZUN>7Qwx zTs~v}62y^ECbXDFcAtnE_`NHcAvQ(eymF=+9vOGs{IZ zu-RUBdf(Btsq~m(vEn$yo z%EE6|_S6J=zC8rly0IXnH^5X?Rp@k(GF*CcI(O#fe!uU;Pp0zwM)Tu2_n$3wm?qz8 z)H4}PuOzKnDYl^JzVfqr|LRVRz9>{sy&HOVHnILf{eyZyzx zi`VK{`v>lQUy(~C1Fn0&rDm=>8?6yWurg1+tl|iUv}T?-tmvYWfr8oQvi-Y@FLKdR(-M!!YqoS@@E*M-VZ43FVWE^RQm9 zte&d_@3}ro^7dJww;jo#m=q(~!IHgMWb!DrO@2b}QR!nmozO44QRfvf9BxB3lEXMq zP9VN%=Lu6zrTOIEHJUgyDIBxyt?YYKe*c=O=#(!vQ{ha>na=Tz@P#D{QJN6N(v|^yFMRa{Decqk zBV}etCIG^It4@K@OIW-%`K%0PX5Bgh;Mf0pYvp=`k5AB)-tVWTJ8VaF9{_^z#rmN8 z>?7w`bCAMwGwm;RkEm89{sRTRNB@EE5eZubbMo`Hw4UBPeGXBA*)KA+QMwd|=nzfa zDzaeTIM>!;d8|hO38|DaFTU<^jGNV4-I)Hbb)C3L46&0e92SyjV1`unf0}F+s}{7w zIrq^%0i}fSG>)LkcVbY6#Pu@+BaJm%sa#SsBW`fx0H#i{9zebJe28ETB0P| zr;Fyx760jtY*Lp$W!UGaoqtZQ3>GWC{VY#wXsd2r{bZyK0`wxZQa3}`?i|RSSq_oS zF|MD>f=sw%w4%*vitu@|#@PcbGzSr}6$l zxj0d9sQ62NN?1WHFha?g(2-b3PFQ`~St#=%h|x@=YqI?$Pu#3sHdO*{4?wJyhd)h7 z6Hia8S!FLAvQWWdFv@rcQVKX4H-7xTIm?RE4Qpg8dM86C>qU{@CJSP#A}ruMX&h02 z!FIi}g_!3&0I2( zR4MSB&YCh-RyNn#rTG7v)4)x@N{3@;^KnaMr@UUpIyjsDTN-HRztCjdm{qF5vdxSV zy3*pge#TI|?u53z|I)1rh0%KsSJrLDg_zaYcMD+#Cm&iNr%J_6ppCP|2=(FtFCcz=%&( z29uA)2vOd9-Tv62TWOY=r4cvM}LE1h-&@uOZJaWY#2#?; z|5~2G1+6n=wIAL7JQ>o~`^RVXP1o)G@Cm zeH~fpO9K0CCi11XY=(!&A&rmmJ^>oUrB6e-`r1zte{!zdoqPM)T5UW?k#hU(tCf?g zW%oCY02oPeR zIqjLJF3wnFUM_3Ue^GAG(RkVUrjyqVtk%X->PLIyZMSI>$toF^ar>X+deM9D+$|L; zRy(tkbN|GIpC=oR+pIFSAdl~)x=kJ_IIL-?cWK4#H8W=l`M_b?tT5q6>g>^vhQF)A zlO&zu8o&^xu>Hz1NAR?&LCU3BG04K3-0Erc3GnK9$Jrln1xDnBoCv9XBc+2XWSynW z0vRRIYEpmq{-{xXniuXR9&o2@!h`JsV1|`x{ttjs{?z?hI?ORgIXKgps*L@B(K0U? zHsNP5lMy#=povAq(wn@@E3F#8ddl@-o!pv=t&NF$)wi!^+-tVJW;)bOSooMy10zE>BN!a4J-*W#IZa_>A z;W6zm)6uXI8kpjBI)l#0ZEBb&6WJuQ!Hs#yi3A#!Owl8oQKcDBkLAUy!$yclnrXJG zs9X)F5#J#``t7HPZ&Ce;v-lPSz8=|}{X--e5< znre8o6CGwEAE~HVupx+`1fI1MPZHDbz@SMMr+>OSUws}gDwi?y78ao!Es2v5xVmDR zih%RI-yS#*+!kHlFbo$IDhy9gX85>Qpu7!2f#YAD-#{g&-=0&HK+^$&m#~nuZ@D7CUDjp`Uzu3)ID8=M;PlDUE*= z=5tFpEe^7#jKDxlmwta30=-FixfGrJ!)$s`QN$SpK|BJqpPuL!z~=48SB%&fa%!q# zBN5*@DQWG_@d`xP!CRbL)}}Rl69E_la!wcjMQncG(}i3QW!Gc<;)t|fm(fja3bLsl zeVJEimLxSH{jUedQeUK^pxqo7dQ62NO0tJBiY(@zM`}EpKn%fgHJE;Y& zIGB9Ki!kVWn=4%#0VvTg5EUwe%4x3``pq5tI(}T-deY>=Aml#bgVjI;|A&HK+y?q2 z`jIvXgJcSS6ScI_=zQM#yDodav-kAk+b4gMC4#tF@8OJWfynRB`+bF%w~jXYWOS(; zp~)J-r=R& zyQohfaZ}1#mhTS21pinNEltuMA#_pbgOzmAgj&?wo~!|U@pO3sUX#_TWJ=4vvj*VKc7ajh$ zB6EAvCA!NcyzuRreT%MB0HbT$%GCcuQ8 z?yYAqyx*%(ZAasc(z@8&(CiK;gbi%Obz_srrsqVfX#QlKzHq(vqck0hEg=1!t z-WD;!Exz`-OF(aU3+x0s6%;Dr74mdi1hG;P0h%xs3aOyVu4r0ok@!mQu2nZJ=H5t= zq-EZ;Nn$zD@p+RTwMQ)k{1ozNj@tMg|EL9%jUM|5-P>Q7{i1TOLMCnz$2VB&6`EFZ z=1lHw-{5WZPWTnZ+lM^j5z)oTc;mI#;vJ5u2SYvlCtrRQp(M`Xj-KAgir z6sDOt(Xsi?jt~K?Tw9V*@7G`UzypLOw_cZV)BwK9O_}jUyeTw}ZdhtO z6&W_H;ZXW%_}dj($*B#jG@&9B7H>A+$i@i|iWK-?({0c#iJ%-iA+@lVoi8Ecmms5u zTc9edc^3snlM-ewTM29CuDkS?S<8Br z#D(Q&W`|#j0KT;gqioPX1CLQk8RL@)ljlECi9$z;p9ct-g2U>al4%)L6pVJKaz9s^ z_m25iKSMbnp`XlghN-*U4fb@lRDVIFJ{3f7bidcN<6uv|6sC9I+#K)Km;pt?;ugS| zWm*csL&PXr-JL^sje? zcsU2{^C;oDDmEb0FW)Y7Eze}Y%Xg#`P~*X+XK_L;8FZhROE;VE=5Mfq;+O8?4u}z^ zgIFoyk^d-9Q)?*dUuSiHegFOnj&2rFIkK!Mv|A)JkA!r*A~z+k)5ni@RMmfa*ABm} zep57|Xu7a1N6+Dmt`=KeE`z^ywQdF`b zHMR+!Ecwm4XVa_91);JC)E(wl#I@i?8Ty|+;ja@A-e%X6=Tdb=2p`>Sw_zW< z^G_^#cB{u*^wnq3pf|>$n=|HeU5@gsuOd;Mti4piJ%H#locI%v&#XKtdF@db57D3yEr^EdT0`I_S& z3@e^KAE=5U_r1IxiU;gO2xo#)W}($Pd7yj@SUsiUS&ChXP&PD-5o@cwn2Fs6koS<- zxqc(Kv&s5pDVm;h&uBk0rYLtuYD?_IeyWL` zKmitNzBW;G1Yv;5N&>V^Pvwld&}GJh4pu_u!-y^a`9lj6(2RHH)XzYLBY7j1BDgv7 zlHuQ(SZ}|h*7EkoA5Uhpg5=cZfDn)StoT|1a8r((bTmV+{SH?Gq5ig%nEzvUyzJc3 zQwZbO+LEHc`0{aUj>vexvl;J4=m!;6Vut%U25T-?Erz@o|-O0oz~}Qo8u40C(YBOUh5wPU9eKLKV)m( z1u~=PNVe#REQsmOnk%ej%t(IIp`f2z_!X)<;-QWfjOw4Zy~b%^rk5iXo4O#V!rgCk z^_>q0dss2Gi3-`EOz}Ipv~6YY`p+bZIIKvT^25d*V;4}PqvhV?a$h6_Fz+3zs@=Dx z4-&iakBRE(-s-#g#3)k$Aml8@H&~GPX0S0ZX!@!dWLORG&qb2}FM~fR(E{?n=37{t zsXF0&alP1J!fSmEg>%?Xxq7Ec2r|zy|Dg@m2T#uF7n-wvzVj_zyHa6-uTFM?heXa( z>kz-PWh)f?g|NV%qc=Xb+a6bx^Xzv;X9qt+T%8umW65OB8D&+oim6md0BfMfbaxvh z)K0%uG9~E#g!0OSi6EK9nX-k9;G1R+Q~TBt=QoP5YpYFJal#6C z#8;s-`5v3tw%$5pzyV%s6)u(n_$qA&tr@$!79J(v*BK$%xLa)8)VUy+Fqmu=!WReJ zwJb--b8%#0iR^>riBm>Qy|?UlgoE`B*wxnoR%I4CJr2|Lr9ohSL+=H-9zyPf*5|J* z8<22K-^Ge71o};PkD;|#vbi|u!a;)Z)&HPW>4>_@h6UCg^Mac>GJ1hfAq2o8W+8zQ z(p6&vSm);4nb#J=lB*$d9gSK1W(4osgnAlc>w(`r9Dnk!CaC~g~p&uQG6Y-WE92S;-w|uW6HtQgS!Qp%kP&c4J#$pm? zCzl^VlRy-y7`R~i$4jWXZiShf3KguT$-2m4)vwwA4P9tmF_2R8_S7-rS$Z4z3fCe1 zqM;cX1s!A@S?rM*LTh{y0k~9m}D!Vu}ZaE|6SX3fw?r5>n(poe(I5vT98JQ{^W$0 z0PLh7EBLJdTr%+d6tm3HP4J=BH#!cnrBA0@MT4i4`Iiu^tG=29J|q@|l*mn%V9EjVng6_30Cp>%t)k zd@iuF&)%d+byI+X75cSoRQc0e%-pts;!{;>jYY@>pBXHuldY1s zw8~_vSuH3N$KEUNTWP2RykAyI^NGNy`7i*1$#y)`?8?|v(#5)6Op>>2@YcWvs^LhPjwz)^2ocW%% zP}XQy2%jw|qS|tQ0;1Wp#;-_aIy_qWPr67bmopu>VKXdDQ3cT7$kW?D&89r8kIgo| z*_%0U<0$~kNp2-<*+4T5_buVZt@WgTjYsh2?L1R89Lt>05@$VrfoL%ptDqtuGD9o| zA#q*}AuD8Akj>$bjTC9;SOuc)ZkS&|?vl*?A{(!{xD;s3I6#r3*Y9b}g+~>T@7FG8 zho7@-YZgpx6-6mBbNbEqqu`2W`BsBM&!Mrs9Y7lxh%@{*Rlh9Qv~m< zUZgT_PgtWOJG;OK%ZK*~iq$W<-+|Z8Jv9|O z(Gp+~={@1Q^i%ZXEe_vIEDl84Znbvs-$j5hQ1ZVg-Er>a<|OQw)|x1;vKKsN+f<4A zkK~nof2-TE_ilIeeP?lm*bu7YdYc}+Z6*~~x zpk^bS=`>ZCFmwE0Bjd0sV{gV0+gFy>kC+?Xq3Epk63p+pfh99ZO;8|4GpysI)iG*> za@bSj^OHe?sPzQUom@cVJ@sg~Zd>WCk+V5Pm2>JeZ!xSdFu2yV9?NYka&kY25Z^gB z()T`HBOAzU3S(W`mynooCdo>lM{xO@0dTx#Navsohv^F&&?b@a9M*c*8P)`VAJwbu zpOrV%gEWYsk5@kA4Ht|faF%om;J~8L==QrK*7blpKD5`&51F&9W~yC(*3 ze^-6dchc};E2SCkNCUs@m8^~EiWN^|I+WKr|+Udmk*5Lgx#at?pw zFXM}p3O=7Go3)?0d6eVOP&$0V62Q?JjM8J?z=IYsqe$D%E>3`blJTOOXtL=s(wO{@ z9B<~0Nq!`~-k+jPSC%a+YKG}J}R*lB6J+w4b$h{AlQxw(rN`Ij}v>M~pIR0=H=CIhE z++EPf1q)KRLSmTPeYL%JVzRjn2E(@ui=0a!@s*ta0pjDuE{0MJ)U$-_2-?oV6Lc4K z+L!CoGQHP12c72P5aG?X3#yu-Rx1a8NJ=4{qN1wtGwKoG)$%Cx4Vu`=L#NX5bUFH_ z5ll+Gn2JlOA0zg;KhK5jAb^1?|GCkH27?@bjyYERNQ*wyZH5S+faoR^GjkC8FNDgf zTCp1W`SK0@x1?WPU#Pb)m~XTt1qpkR?Ts&{czlIg*0^$*VkTN;%9Rz>gB%|}baJKm z!S`BPEDPbM-P|azL3iG4iIK^l0tgc~%m&F6ERX_LURRNVO|VwL*^%@WWq;jPI?TwUd_(e|SmtCu1|KReY5nF+$Q2d6_30Jx_c9eyJ5{Y;dqVsq*9-#FXt3!x z>GQU7T{6#qyj;7aJv<`_FztqwBPQ}EWrJRbPEP%0`BDHO_Ffn8d6)cQIAVInQ2luD zQyUu%cfV+pY0q)_e5>|X3L6tQffBS3R7#kL)AEvF*m*B@ch#z5hKT!BA;`5nGV`7A zoHfSV5P<8j+7iD&vHUuho z_3D&U2QTWy^rKkA)+cMvu0QP!=nxKl<&;c!A($o6;*-&2;68wt#o(^xi$sA|(iJUB zHF~3s?zpMl4sQKmT()#`AcKWojruw01Y_LZ3wyKZUY&J1{6@0+$?z}ul`6Fa$}^xo zL;hbsYHIxG*_}7{{@WFdMoZWD3u2CBTJwRDCQ#d5Ut?J7QsfJ4%`4Q6&pNjGua;dr za|GrqBe>cB0RGdPr}XQ6xM!~QgYGcju3Mlp7;VC?yN=XtNRLKCs1P`?ZpMsuq2#~E z(_V;psUhTs8y8pkwo+Wu-gJO0n?NJuJ^X0C5kS3_mv#m)~+lk z6_apZN4mDQTsUdtMC$V%&pl^;1&zDu5 z;m6&V%vlv1o?dBwzf;Ey7)`~LxAsWE%Ea3YlO}%G6u#}+8?zD-@+(qxWQq_%pj$>p zPQ41l>yOivY5ySvP^kBb7>xd6Nf$3p*mjhwB(}|k>*MwrnY=yM(&6Ty<{bNZUP1Y$ z2`^Z|xPDquwy`&c3a+V zOf%`(zD9gs@*1A>af3!4yyFZPyZdHk#C>N8XkwE_wnNqA^&Df@cx0GRwXaV#bN@YP ziu7_;;V>g_B4Q|6-#5L{SD`nX|2a*(%GpSD{?E{aGLy`uPbcxl*`0dm>hyk2F&7ee znlPO^k~`hG-w!lZUphk;O|>nN0K_XO(Ynbn^zGVg&q|-Bd7VJN3#I^Cb4X&I$!cSl zqK~A;MNh;R1Q+5!UoSUjI>!o?pVsmWGN$Hddq>+KBpT(4k+i;j7UdsSxVSDC{i8-M z*Lgz)Vrkf)&502&%&SfHv$VM7o3ZmRQ9yThQMiV1O>Dqd2EF{Z)(gnNC zsnSi-|E_0j4A5y7rYJ3=y2*x z%B@wIfCMSY*PLV~RVbk1-7kD|@grS)UR4BHjDX50kYX{5lLVVTqfj}KMyvOr%E`d8 zQ)PB}FD+!g-6}79XA_Q{O8QVcWJU~8_-LAC-`v!5cht`0o<9Ts@?+|^oY`rVWuBxf zr{HcC&k=&g09QiAPNs2@g>t|PH??!mXeM8pv>I8Lr|DE0IbY;t{7Nwf%#B*Ah>X&p zl9^WpZF<3yp)bXYt&{1l(5#CFwsU``bVqY!H6_w~derkLH*N zA!*FTimsfA01-Xzpu<1h^#JCu+m*B;J?c}A4<|)ta;H8X^zG$Yo~2C>r>D%xx3pDm zCC=@55EppIMGHn}r$uzbob5ppC9V4gK$gz!%Qgp@F^*;vy_VuC9tc!Hh z>k!o*=;Tk%5dnSTYX(a56OCf-A3P_6i+jT1sO6cuH)>;;TQ(h?@kyLe?T`w2PZpKNac&@^JjmRbM*tajbta?str=rkgsn1plyL8IT3j$dr^?x_1(|VytDVl0d@H_??2^@2 zyl5-D;44OSFr=>PF+nKur5`u@MW_jN9C))O=9~k3st}HLP%@roDLH^1r=pchKjUSJ zv#P}ko+1o7M4-|9)Zq1f ziLBiq-*#wvLyB115HA{Bf946oQc3-@7no?YGy(fv0VrUcus>}4%uC|^wS&;$&EL89 zh3cyR(JU7%4Z08SZGhuPJCytu!VK7Jg6u6HJ-1i$i z4o5S$C)#siXePWpBd%AGD{gYi?IVT<+I|Hy%J8$6`)%}!%`%3-!0^M8>N9t2D(Xo( zWB&2-*J(@6Shc^O2Q!*jdmpFiQCEBkTwSUQSc@9Q5HE*E@L^xf>HR&3=YvzESxsi- zvC$!2u6~o|l*!G~F;J|e0Xt2*2XI|!I91Y`98xg$4$$-an6oi$2tgq?+zDXiOXXZw z)Y{BPV?BE2WYS{m(6;kJ@dlU4_ma$=_B>!(*ou!a| zw_%Ci+2-0?Ax1t0mDaqzPZt~VYwGS(B31xSYmpiK!eMKZdqymQ2t3*OUz%Wb5c$rU zv(YdX(0;3^!V7e;FWw;nFT@eJd_mNm3m^9fLBi%8R3fmR4d5~?9|gK-bq?FS>c|Xv zvA0YR>pfsfB+)MOxF)${hl`+q@%lN~jWBfBVv>I7hpjX0d}=^;Ra>>)48_F1^zwlv6f1MnWS~-h_b`^JNbZtr1Od65fPCaqxr+_CGgar-Hu3L z5C8|RcDSG0aT^_b-MXu1uyemhxxL=Z(eM~Zj^&ui4IsIraaX%wZFZA@;T@il^eAm# z&E0oFJYmT40fzII)Wc>P+f!HfE@bo3+~pQQZ|P@>2|Xz!z6n7av%^Tk6vWh<9VkPK zqU;~1pr0j&gSR-|DrjG0C+a4cnS+q~26%^tP*gc93#>j4Xbn+C8jkLRN@;U2xuB{i zMAZ1nQH$`J2W0zcKF4L1;pUd#=t5JN1SBodw3JwiBWXObYawYnj!n{Ui^#g3P|==9 zQ*c#~OMzB{6kcS!yr~^vzJf<-l45K|4fDVB#&1_;dUYzfwwwq2ZZ4M_W^yA+B*QgA z%-3XdcLr1Dh!*mO6pDUl*+!F-VQ6X@ip_h~NsC2yx!pM|T5+kK#HY!kubDzJgP%=% z3giz2iwTW_0B4kv^AYpE{kuZ&#i7vmT4}eXcLrse`zmgp&b?T_i45FVoC`>(zX1FS z@6~w~X7?FFU$MOSNpE6$zEb(=RO|#3cNgKn{&WP}0#^8uEf`PRqj(s$4Ss}n#b%+Y( z1D%b<;}V17-*E8u>q$$zRW(&4oYE33UpYd4iYc41QqF}OF*@BoysXF`(~9t*=Y@MV zkD4PCYLk{lHqV=#RXK4zx?FyCN zqvh2WSVc*1RzYk0lQZ-jNFu|uG$$_S+jD5A5r)|)rA1knE1JHUTpsRIXZ4J$tPSBw z02-A*-ugpi+auJi&Pmx`9gf!RDk-O zN3Lf`{bT3y!A2ehFTLiyAMg+Sp(iY%#U$joM~E;4v(u%*-hiwh7R`(S>t3y z-Ti|e35klKP)7RnWn!6P1(tIAaW}|7dux+11Lkgxi7cOUPDa z?a5}bRdHx`Zr`|LpdY68!`aG--z`Hd{J)E)irJ;Htc^wo2`*o9uqtoCac+Ik`&E2c zAw^}GIA4k7!V$k8x}CbC`fjVZs=-(qwd}rHhFV%^L+OB%BL+qVzX!IdP)$wLT!yC@ z&3My?F@{Ogxe+PlJx%aLZ&N{2i0iSyk#viNcrtGA>r2VHnKjyV(AA92g6tL(`hsEJw-N+hqh7<4unn zcF)R==%N*~03K|4+2BSKVi(r)c6rlxZ8S-Z0rF4E<8k+(S!uE6G$=K&r#Eq5`Nx#x z-8Q$HE-B6h{!R9mAqcBx?k&Tar!n0(Q1Z%`W0{hlIOs@pcB$H+4s1vq8diVfz`dRK ze2I=y8CYDbi^I8uUQSl2Z72j{InbjdLe$F~SsQZ;g+ofNDeEqa>t;a08tqg-cRQ;F zvYP7`64fMq5&~wb@@tqfB+87~-U{oh;q$0Xu!Ma|6(9e)F3Qk>Bm|twRW6;4=udAe zD5lFc(b~L8mwsG1EnL^m`T_4(Ft#%TdLql&5i%!i73=Mp%A7R6*xme49xhBSjSIYw zxS@!+MQdwC!8y^cBjg z1bfkL9*96ozz+2A`|LdXd;vr}u#w1VArD%Q6=F@0=Z?#cy7qi^i$}|jC=3);-u1A@ z?KhQj)&+c!n9@DGj#sPZ3?!Qg-~v1@K+76KN!+c=6bqMg*uzsb9g9lPYPU zX?(CwAr&~QBPZ>pF}tX~DD^Ax;Yn}q_la>PH^5ASBQ-37bl` zk|b@s`I@&c4eWp4NR4mpRabfgM@r!tKTuQM4#2D#lC18Q&k~1$XFaAT}hj^X4-mc%KX~t1tS8eg@i< zcn57kZ`wrHtcv4RzH_(TEm#}%Z+^ff{;)CpCL4LSmfuk&y?ut|z^W&9fefWOBUifRhTph2 zJMN6jwkFJU_AmPDCs+4CRTeBe?ipT9P?-o=*Q(adCvej<6R-M}LuLl83p2j$OdbM- z=^QQ7$?`aG!pvyJAKYI);=3S@>$SB3NjCyAQkHA353#fb~m-H(q+BL>lh zxk*JO2_ZFq7J8I(49RJlS1hsjn&-}@p{jacv|UxG@CtbPAD0x%$js{R0P60wB>BHt zYtd8-yzBwJn}S+avUF3X(UvvagWyvafP+_m1SKlDMv4!a8tC?SUbv0Zc3a&JxC+ud zAG@nhyjo)Iw)MbKozhLyTqrtptA5CV=?NsgEfntkC-(bfee1(BWm3KhUsvgDR1)a% z_2`g!JM~l>&c zlt-`F-Hhh>LN6)sh>VoPyEJR+vSub6LHdst{AT{bwV=3B|LCnHEJn=YsJ;4M;z*D1 zd&D3@0H27tz8>GLyLY#de~7Td6*Z(8x}UamJ=N6Hw`|Wvn%_p5+E+TX8iD8wV?;9gPbBJ zgHK}HO)`hSK-9S>D{AEN>_?9ty}nXrUzt-Vp!d-tlBAFN^tb%^c+d?y_|zJ0;cD3( z5wGg*KHJ=mh5i!%UDKF(^Knm$6}a3es%y9*?Eb#BiSM4SC<_}^*|&F8)_Bfbb;PNd zg3if)ioq-LYq5TB2MH8Wz0_AIRKO3$6{htpc8E`M}wJ@(MoA&0NKM`YQYaV^fK6|h)g&1Y z)56Jm#U&#LYg<08j#d4H4OGWk92Yy>T=yc-SL=ZZUFpE>4(cA1jmGJ+wq~=3&1EKo zn!Bj|GMp};d?hZ8W-+HZzUJ6_i9O|z8M{@WXN_L@%sC) ztJ@Np6R|A5cXhqj;9T5Yhrv6r}Qp{~X0_mA#^#)^yscQG6C6d}->&sq6&0wCSohHDcN!uu+;qAI zk_@t0pe*OV?<$|t?^4Hk%go#Q(>quLHH!#+21}7;ynKlI-Qe(%%WCydj$|-GRW2B8 zG)jJ@$VL2F_j#C*a+qW2EzficAECbL=-y#_`lTK*e^*57a$Y?2@3+KO2|@*_NHI5b z!`wdo#hW#{`-+ieX!T)<@1F;>PvWh!myR*x{bf6uE@Iq{gXlsmAoARyEuvp)o;qkv zCj`>6wF7dYzlS*^%Y}q7kfplWa>m`iaH)=klqM)WBLsBl__w6L+42uGoy(rne zq1@-ARz7)ETH~*(ciNCPxhabPj+9rex!*>J2x%DR*y1Dw1i3Npz2Vl7I&G1TK?v1L zsQyCH^1MA^s$*Nq-q zVN)PzP`AxIFY8V6C-n~_IMyn%gq(x|vsO^R=9`>_OYS#U^$w1drjZCEQXBIsj>us~ zF^$2hPC=*wfWw&xt$WTGxT{-Jc9EW9fTXWY!I;!+!EMlNpK4F;(Q{;ku|!g*>RD9$ z|9}ejq{71!3cAr;&6lP9rusS7Rpkk@mxJkPSlGTt;>(Xy%IuenYq@jHlJF7?{e{}@ zeuaK8xX7&#FiY;aI_2#ZO6Tmx5hmOUKImxrM$wd}dvsJL66z+#Lfmfmm&vwD&9Dvc z57ElsN+OE;_y~magWH4%M^rR%y6Bq%XP7NJB4#ByrXo}VTH+78Riw&r%9VznXBnva z>|X(%?w1yb{0CqF{0@0z_QUyJ+_t5ZU6j7G*P}z?$RnD_ENPu&tE|@nA&Z3$aHS@= z`edna;<)&L*kyOS*vvlI;imCoZwBe8M+MHY!Vlhtl05M6rVQC*7>`r86qg-pvL_)A zjb){B{My|b{$+$TuP_je8 z<3>%d&lIR3A@^|9b_m}M1N|{(ckL;*L;C|C4!cY-4kp{@T3)JzX8fBzK%yzRA|g9? ziiTgSZVXq*2`DrfPTe`+_b^Te9J8==sQLcIgkMV29bH>(XQu{@X85kU5b-sMTypKz z5$CEp05F!RChLyhk@hsPMych=1n?_|6f$Rz%S?>x#KVjn9skss-P1JL?-rG0pjZ~( zX8#p5KOtBE$EcQGXbPFZj}|@Lt=E5)b4_b?yj=9D5iWLYhV&`-{ZO<^(OHonwL8r( zVn$A(%^x@Z6e~`~oAR8%4DJK%Z~8&-mX?#z1Bq*gpLHOhgZ;ZhhONF2Zgqsb`!V@+ zd(M1T3%Z0OXW$K2s*4*Mh+hl_ny8#DiF4Pfdm;oV*9SV;JF9p=@An|R?>6r zM^Bz}re{AV(j7n#3%_nZbLcp~O7Vpd(Rh@NR-1s-Q80

    s_+$3ljkNjl++LO< zrakL(AQs8ltCQlr7wyf+WnMUz@aRGLn=Ql1f6=-QZyPIJQFnrzUyZLN|M%ECN%a>r zE|{TN@WbMoc-~(oMmuLsCj#f;K{zzE(VN3iIRz6@_L!t8)t%=Jcgm~lq9Pypoa}L> z^>nc1C#5IfEQnBYiDeaMu3oA=8c}f9EaDyu5fjA$1`Gw2$-z4p2I<4lSMV?G*WS++ zhUhhy55*Ov)r2gGmB?iHw?*cc1=3M;Z24rHP8eex`>;QjYq}NWeo<^T=+T-5L(hVN z)GT{?9`>ow4fYcAsY{M~NMm-kjZ`;>D6m7&hFkI(AMzdFJ>7I&zMBPaiM4)o`_L+; zgi0E0(lk8oo?>SyUn%%&XVg}_kT888N+g$7lN(1g^$}SB(ALF2d5!h4?c3%Kj3-Jv za0o*tvEkQXfhX#JfT#U1-gf;l=O6M|{ec^k15qNrI5*Kp zPpwkrJAm7psv;!6ux)*--!sb+Ldve9f%xjU<$W8z2TX_{G;^V@m8z)$lc@G(Ldqlr_E&7CcS`xOYGO95gxdUc%B}S`}j3TWF5Z)Veyk zl3(yq&Y=FLyj?_{hWNJ7D{}7gL3k?3l@Vn-o%~7UL)h^;lkvGa@01-i`kAJIQsKM{ z+hjPw&<~}Y`iibI9jS9Cey&1^waih$P0ZR_wTbrovjgTVkl%N2?0^Rra2xjpQlCn8zo4z~{QA_Ofjh6ynqN_qUSXdrDQ!;MsJWBn|%s`0FaPCjd zXxTy?j}#C3f{J2_+!=(kAE*=L=A*GP-s+F-ZluLsaW5R$Tb@CN5vVlM^Q-?xTqMT7 zze3lapR_-J2BFBy7k-r|z z`}_9|r;amfDHwn|EpTSVyotdVJGy->2avmU4i3=6Fn(9kT1*&E3VUY611kSn1@Zu8 zPjS_6LdkxkjI8mNU^KQ88YcbI*%A&A0AFs|Ju=d35sv5t%csxxZco?1`v0C0DWFE{ zzcv`R3?s$|<_RuDCvNi>K;{sX?R@lVCG_goSJt9hm}*x3{7hkrC(aV}J2R+p3110( z2fomLC#Q#sEb!as+b|@4MQYs_&uauYHT5C=MzFNNb!A}d^Y*s2X)6$E_1ra zD;1}A{0FdUxt0b8Oz92JTf~%xR{-MYpZp95O^wc*ispKQpK;6nP3MirbKg^y7e2=H z!&_<-w@!)2mCxxG0v&SecMeUE2$L$&uR5NZ}{E*|@5wo4j`A>1m z<&s#uk9rq?BKto;!hn*2?NH!n8%?kOz5`CFvf&EG2)Q3x{H!5;el@G#h2{Z8CU$Bi zOtW8|=vgD9!-O_nlcu7rKD#9100Bkfb9Bl5 z3qLb}zgvZc9>jp2Ure!I{!sPa{NFa=M`*?uA9Qp3Wk*}-%9yP=)^Dp$3+1VcEk?n? z90+BhlL^?|YwnS)kO!>Xvv>)92{#O3Q3kAjA4*4=I)>dYB1HV-A}5bYzJSj4EV{

    eIi%S7nhCXtnUo# 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 z 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Π=7g3pdeto}Xz4K%Ao`Wv) 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%0An!YB@>X&= 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ª(Sz^7l;cHjF|D^blrf_OFD_ULN= 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

    K4-7J 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

    6l6k5}N`v!*f>87ovb(r`} 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 delta 694 zcmV;n0!jU(1;GW77k?lK1^@s6FYr0g0007rNklrF$rQRw6Q(&UpP1C2j9>6opbR!_oV&F*A}TNjuo{ro&XHZbj`bGin*RWBjLXX31aS57FaQh}+a*b->L+AQ$d^jtAuiLDS=~ieZme z$=?V7z_%j1WYREtdcqfYMVjvpsKJR;kw3L5J!N6i7pNpnw?CM|t3J2e-qCdXResDa06GaEFF)=$p`Kaiu>UdM-}dY(PAZ#Jz? z%?0xTfZI`aBp$S9rKRW@qg_fUJOTiuw&i6sv~ZO83UVa?D4d=TE&%|ytu)r5K{D|< z0?$Tg=6^%ov3aO*zlhc|&K$GAain(EABqhLSF-2uT86!Xj#Z0BU3k_Xawp7W)%kt^ z=&@!R3-to)mi?gz3E*IJe>$ba=d_9I2l8b9axei@p6k1qW)^BJqHa=NSguR@Srtva z-n?v)XN=T%7nVoVfN2_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - - - - -Class Index - - - - - - - - -
      -
      -
      Class Index
      -
      -
      -
      H | T
      - - - - - -
        H  
      -
        T  
      -
      half (glm::detail)   tquat (glm::detail)   
      -
      H | T
      -
      - - - - - - diff --git a/doc/api/closed.png b/doc/api/closed.png index b7d4bd9fef2272c74b94762c9e2496177017775e..98cc2c909da37a6df914fbf67780eebd99c597f5 100644 GIT binary patch delta 102 zcmV-s0Ga=OgaMEwU`t6vK~#7F?cHq+Kp_Z*(MM~U$pSaPEnp^d>2z}grjWq#{_^k< z0YK$zeE_O5fQ^L-P$j`%%l^MkvJEaeFhpymi^7`@cp?ebn<=3b5O~rx^#A|>07*qo IM6N<$f|rOX*#H0l delta 96 zcmZo+tec<`s7MjVWp=ECAagp<1j^;uU0fEn(IvIe#)78&qol`;+0I1v| A!2kdN diff --git a/doc/api/dir_1a190e7f93f4503d85aaef18e89b9041.html b/doc/api/dir_1a190e7f93f4503d85aaef18e89b9041.html new file mode 100644 index 00000000..174a0bc6 --- /dev/null +++ b/doc/api/dir_1a190e7f93f4503d85aaef18e89b9041.html @@ -0,0 +1,85 @@ + + + + + +gtc Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      gtc Directory Reference
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      +Files

      file  gtc/constants.hpp [code]
       
      file  gtc/epsilon.hpp [code]
       
      file  half_float.hpp [code]
       
      file  matrix_access.hpp [code]
       
      file  matrix_integer.hpp [code]
       
      file  matrix_inverse.hpp [code]
       
      file  matrix_transform.hpp [code]
       
      file  gtc/noise.hpp [code]
       
      file  gtc/quaternion.hpp [code]
       
      file  gtc/random.hpp [code]
       
      file  gtc/reciprocal.hpp [code]
       
      file  swizzle.hpp [code]
       
      file  type_precision.hpp [code]
       
      file  type_ptr.hpp [code]
       
      file  gtc/ulp.hpp [code]
       
      +
      + + + + diff --git a/doc/api/dir_4cc70906cceed54662c805106db410fc.html b/doc/api/dir_4cc70906cceed54662c805106db410fc.html new file mode 100644 index 00000000..88a1d55f --- /dev/null +++ b/doc/api/dir_4cc70906cceed54662c805106db410fc.html @@ -0,0 +1,59 @@ + + + + + +doc Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      doc Directory Reference
      +
      +
      + + + + + + +

      +Files

      file  man.doxy [code]
       
      file  pages.doxy [code]
       
      +
      + + + + diff --git a/doc/api/dir_61748fa02e1156ca28a06d1638c8a86e.html b/doc/api/dir_61748fa02e1156ca28a06d1638c8a86e.html new file mode 100644 index 00000000..a1e6a77f --- /dev/null +++ b/doc/api/dir_61748fa02e1156ca28a06d1638c8a86e.html @@ -0,0 +1,141 @@ + + + + + +core Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      core Directory Reference
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      +Files

      file  _detail.hpp [code]
       
      file  _fixes.hpp [code]
       
      file  _swizzle.hpp [code]
       
      file  _swizzle_func.hpp [code]
       
      file  _vectorize.hpp [code]
       
      file  func_common.hpp [code]
       
      file  func_exponential.hpp [code]
       
      file  func_geometric.hpp [code]
       
      file  func_integer.hpp [code]
       
      file  func_matrix.hpp [code]
       
      file  func_noise.hpp [code]
       
      file  func_packing.hpp [code]
       
      file  func_trigonometric.hpp [code]
       
      file  func_vector_relational.hpp [code]
       
      file  hint.hpp [code]
       
      file  intrinsic_common.hpp [code]
       
      file  intrinsic_exponential.hpp [code]
       
      file  intrinsic_geometric.hpp [code]
       
      file  intrinsic_matrix.hpp [code]
       
      file  intrinsic_trigonometric.hpp [code]
       
      file  intrinsic_vector_relational.hpp [code]
       
      file  setup.hpp [code]
       
      file  type.hpp [code]
       
      file  type_float.hpp [code]
       
      file  type_gentype.hpp [code]
       
      file  type_half.hpp [code]
       
      file  type_int.hpp [code]
       
      file  type_mat.hpp [code]
       
      file  type_mat2x2.hpp [code]
       
      file  type_mat2x3.hpp [code]
       
      file  type_mat2x4.hpp [code]
       
      file  type_mat3x2.hpp [code]
       
      file  type_mat3x3.hpp [code]
       
      file  type_mat3x4.hpp [code]
       
      file  type_mat4x2.hpp [code]
       
      file  type_mat4x3.hpp [code]
       
      file  type_mat4x4.hpp [code]
       
      file  type_size.hpp [code]
       
      file  type_vec.hpp [code]
       
      file  type_vec1.hpp [code]
       
      file  type_vec2.hpp [code]
       
      file  type_vec3.hpp [code]
       
      file  type_vec4.hpp [code]
       
      +
      + + + + diff --git a/doc/api/dir_934f46a345653ef2b3014a1b37a162c1.html b/doc/api/dir_934f46a345653ef2b3014a1b37a162c1.html new file mode 100644 index 00000000..4f114310 --- /dev/null +++ b/doc/api/dir_934f46a345653ef2b3014a1b37a162c1.html @@ -0,0 +1,57 @@ + + + + + +G: Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      G: Directory Reference
      +
      +
      + + + + +

      +Directories

      directory  Repository
       
      +
      + + + + diff --git a/doc/api/dir_a844bf6d5a07b8853f8463b41029861e.html b/doc/api/dir_a844bf6d5a07b8853f8463b41029861e.html new file mode 100644 index 00000000..4195bca4 --- /dev/null +++ b/doc/api/dir_a844bf6d5a07b8853f8463b41029861e.html @@ -0,0 +1,70 @@ + + + + + +glm Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      glm Directory Reference
      +
      +
      + + + + + + + + + + +

      +Directories

      directory  core
       
      directory  gtc
       
      directory  gtx
       
      directory  virtrev
       
      + + + + + +

      +Files

      file  ext.hpp [code]
       
      file  glm.hpp [code]
       
      +
      + + + + diff --git a/doc/api/dir_abb3ddac8d2c26e45fecc003279ba790.html b/doc/api/dir_abb3ddac8d2c26e45fecc003279ba790.html new file mode 100644 index 00000000..2e7055f1 --- /dev/null +++ b/doc/api/dir_abb3ddac8d2c26e45fecc003279ba790.html @@ -0,0 +1,177 @@ + + + + + +gtx Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      gtx Directory Reference
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      +Files

      file  associated_min_max.hpp [code]
       
      file  bit.hpp [code]
       
      file  closest_point.hpp [code]
       
      file  color_cast.hpp [code]
       
      file  color_space.hpp [code]
       
      file  color_space_YCoCg.hpp [code]
       
      file  compatibility.hpp [code]
       
      file  component_wise.hpp [code]
       
      file  gtx/constants.hpp [code]
       
      file  gtx/epsilon.hpp [code]
       
      file  euler_angles.hpp [code]
       
      file  extend.hpp [code]
       
      file  extented_min_max.hpp [code]
       
      file  fast_exponential.hpp [code]
       
      file  fast_square_root.hpp [code]
       
      file  fast_trigonometry.hpp [code]
       
      file  gradient_paint.hpp [code]
       
      file  handed_coordinate_space.hpp [code]
       
      file  inertia.hpp [code]
       
      file  int_10_10_10_2.hpp [code]
       
      file  integer.hpp [code]
       
      file  intersect.hpp [code]
       
      file  log_base.hpp [code]
       
      file  matrix_cross_product.hpp [code]
       
      file  matrix_interpolation.hpp [code]
       
      file  matrix_major_storage.hpp [code]
       
      file  matrix_operation.hpp [code]
       
      file  matrix_query.hpp [code]
       
      file  mixed_product.hpp [code]
       
      file  multiple.hpp [code]
       
      file  gtx/noise.hpp [code]
       
      file  norm.hpp [code]
       
      file  normal.hpp [code]
       
      file  normalize_dot.hpp [code]
       
      file  number_precision.hpp [code]
       
      file  ocl_type.hpp [code]
       
      file  optimum_pow.hpp [code]
       
      file  orthonormalize.hpp [code]
       
      file  perpendicular.hpp [code]
       
      file  polar_coordinates.hpp [code]
       
      file  projection.hpp [code]
       
      file  gtx/quaternion.hpp [code]
       
      file  gtx/random.hpp [code]
       
      file  raw_data.hpp [code]
       
      file  gtx/reciprocal.hpp [code]
       
      file  rotate_vector.hpp [code]
       
      file  simd_mat4.hpp [code]
       
      file  simd_vec4.hpp [code]
       
      file  spline.hpp [code]
       
      file  std_based_type.hpp [code]
       
      file  string_cast.hpp [code]
       
      file  transform.hpp [code]
       
      file  transform2.hpp [code]
       
      file  gtx/ulp.hpp [code]
       
      file  unsigned_int.hpp [code]
       
      file  vec1.hpp [code]
       
      file  vector_access.hpp [code]
       
      file  vector_angle.hpp [code]
       
      file  vector_query.hpp [code]
       
      file  verbose_operator.hpp [code]
       
      file  wrap.hpp [code]
       
      +
      + + + + diff --git a/doc/api/dir_bf513233250988b6ff3b72f8482c1597.html b/doc/api/dir_bf513233250988b6ff3b72f8482c1597.html new file mode 100644 index 00000000..cb216d9a --- /dev/null +++ b/doc/api/dir_bf513233250988b6ff3b72f8482c1597.html @@ -0,0 +1,57 @@ + + + + + +Repository Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      Repository Directory Reference
      +
      +
      + + + + +

      +Directories

      directory  glm
       
      +
      + + + + diff --git a/doc/api/dir_d0b7d2b076d3071c16656cd994e0cf09.html b/doc/api/dir_d0b7d2b076d3071c16656cd994e0cf09.html new file mode 100644 index 00000000..614dd003 --- /dev/null +++ b/doc/api/dir_d0b7d2b076d3071c16656cd994e0cf09.html @@ -0,0 +1,57 @@ + + + + + +virtrev Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      virtrev Directory Reference
      +
      +
      + + + + +

      +Files

      file  xstream.hpp [code]
       
      +
      + + + + diff --git a/doc/api/dir_e217bba5d90990da93f61f0ea8b942dc.html b/doc/api/dir_e217bba5d90990da93f61f0ea8b942dc.html new file mode 100644 index 00000000..5303076a --- /dev/null +++ b/doc/api/dir_e217bba5d90990da93f61f0ea8b942dc.html @@ -0,0 +1,59 @@ + + + + + +glm Directory Reference + + + + + + +
      +
      + + + + + + +
      +
      + + + + +
      +
      +
      +
      glm Directory Reference
      +
      +
      + + + + + + +

      +Directories

      directory  doc
       
      directory  glm
       
      +
      + + + + diff --git a/doc/api/doxygen.png b/doc/api/doxygen.png index 635ed52fce7057ac24df92ec7664088a881fa5d0..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 100644 GIT binary patch literal 3779 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 literal 3942 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 A+yDRo diff --git a/doc/api/dynsections.js b/doc/api/dynsections.js new file mode 100644 index 00000000..116542f1 --- /dev/null +++ b/doc/api/dynsections.js @@ -0,0 +1,78 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l - + File List + + - - - -
      - - +
      - - - - - - - - +
      - - + + @@ -46,142 +35,146 @@
    1. File List
    2. -
      +
      File List
      -
      +
      -
      Here is a list of all documented files with brief descriptions:
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
      Here is a list of all documented files with brief descriptions:
      +
      _detail.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      _fixes.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      _swizzle.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      _swizzle_func.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      _vectorize.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      associated_min_max.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      bit.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      closest_point.hpp [code]
      color_cast.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      color_space.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      color_space_YCoCg.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      compatibility.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      component_wise.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      constants.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      epsilon.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      euler_angles.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      ext.hpp [code]
      extend.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      extented_min_max.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      fast_exponential.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      fast_square_root.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      fast_trigonometry.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_common.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_exponential.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_geometric.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_integer.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_matrix.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_noise.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_packing.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_trigonometric.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      func_vector_relational.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      glm.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      gradient_paint.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      half_float.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      handed_coordinate_space.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      hint.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      inertia.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      int_10_10_10_2.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      integer.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      intersect.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      intrinsic_common.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      intrinsic_exponential.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      intrinsic_geometric.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      intrinsic_matrix.hpp [code]
      intrinsic_trigonometric.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      intrinsic_vector_relational.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      log_base.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      man.doxy [code]
      matrix_access.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      matrix_cross_product.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      matrix_integer.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      matrix_interpolation.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      matrix_inverse.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      matrix_major_storage.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      matrix_operation.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      matrix_query.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      matrix_transform.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      mixed_product.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      multiple.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      gtc/noise.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      gtx/noise.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      norm.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      normal.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      normalize_dot.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      number_precision.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      ocl_type.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      optimum_pow.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      orthonormalize.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      pages.doxy [code]
      perpendicular.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      polar_coordinates.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      projection.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      gtc/quaternion.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      gtx/quaternion.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      gtc/random.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      gtx/random.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      raw_data.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      reciprocal.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      rotate_vector.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      setup.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      simd_mat4.hpp [code]
      simd_vec4.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      spline.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      std_based_type.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      string_cast.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      swizzle.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      transform.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      transform2.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_float.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_gentype.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_half.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_int.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat2x2.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat2x3.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat2x4.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat3x2.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat3x3.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat3x4.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat4x2.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat4x3.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_mat4x4.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_precision.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_ptr.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_size.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_vec.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_vec1.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_vec2.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_vec3.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      type_vec4.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      ulp.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      unsigned_int.hpp [code]
      vec1.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      vector_access.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      vector_angle.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      vector_query.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      verbose_operator.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      wrap.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      xstream.hpp [code]OpenGL Mathematics (glm.g-truc.net)
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      o*_detail.hppOpenGL Mathematics (glm.g-truc.net)
      o*_fixes.hppOpenGL Mathematics (glm.g-truc.net)
      o*_swizzle.hppOpenGL Mathematics (glm.g-truc.net)
      o*_swizzle_func.hppOpenGL Mathematics (glm.g-truc.net)
      o*_vectorize.hppOpenGL Mathematics (glm.g-truc.net)
      o*associated_min_max.hppOpenGL Mathematics (glm.g-truc.net)
      o*bit.hppOpenGL Mathematics (glm.g-truc.net)
      o*closest_point.hpp
      o*color_cast.hppOpenGL Mathematics (glm.g-truc.net)
      o*color_space.hppOpenGL Mathematics (glm.g-truc.net)
      o*color_space_YCoCg.hppOpenGL Mathematics (glm.g-truc.net)
      o*compatibility.hppOpenGL Mathematics (glm.g-truc.net)
      o*component_wise.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtc/constants.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtx/constants.hpp
      o*gtc/epsilon.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtx/epsilon.hpp
      o*euler_angles.hppOpenGL Mathematics (glm.g-truc.net)
      o*ext.hpp
      o*extend.hppOpenGL Mathematics (glm.g-truc.net)
      o*extented_min_max.hppOpenGL Mathematics (glm.g-truc.net)
      o*fast_exponential.hppOpenGL Mathematics (glm.g-truc.net)
      o*fast_square_root.hppOpenGL Mathematics (glm.g-truc.net)
      o*fast_trigonometry.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_common.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_exponential.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_geometric.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_integer.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_matrix.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_noise.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_packing.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_trigonometric.hppOpenGL Mathematics (glm.g-truc.net)
      o*func_vector_relational.hppOpenGL Mathematics (glm.g-truc.net)
      o*glm.hppOpenGL Mathematics (glm.g-truc.net)
      o*gradient_paint.hppOpenGL Mathematics (glm.g-truc.net)
      o*half_float.hppOpenGL Mathematics (glm.g-truc.net)
      o*handed_coordinate_space.hppOpenGL Mathematics (glm.g-truc.net)
      o*hint.hppOpenGL Mathematics (glm.g-truc.net)
      o*inertia.hppOpenGL Mathematics (glm.g-truc.net)
      o*int_10_10_10_2.hppOpenGL Mathematics (glm.g-truc.net)
      o*integer.hppOpenGL Mathematics (glm.g-truc.net)
      o*intersect.hppOpenGL Mathematics (glm.g-truc.net)
      o*intrinsic_common.hppOpenGL Mathematics (glm.g-truc.net)
      o*intrinsic_exponential.hppOpenGL Mathematics (glm.g-truc.net)
      o*intrinsic_geometric.hppOpenGL Mathematics (glm.g-truc.net)
      o*intrinsic_matrix.hpp
      o*intrinsic_trigonometric.hppOpenGL Mathematics (glm.g-truc.net)
      o*intrinsic_vector_relational.hppOpenGL Mathematics (glm.g-truc.net)
      o*log_base.hppOpenGL Mathematics (glm.g-truc.net)
      o*man.doxy
      o*matrix_access.hppOpenGL Mathematics (glm.g-truc.net)
      o*matrix_cross_product.hppOpenGL Mathematics (glm.g-truc.net)
      o*matrix_integer.hppOpenGL Mathematics (glm.g-truc.net)
      o*matrix_interpolation.hppOpenGL Mathematics (glm.g-truc.net)
      o*matrix_inverse.hppOpenGL Mathematics (glm.g-truc.net)
      o*matrix_major_storage.hppOpenGL Mathematics (glm.g-truc.net)
      o*matrix_operation.hppOpenGL Mathematics (glm.g-truc.net)
      o*matrix_query.hppOpenGL Mathematics (glm.g-truc.net)
      o*matrix_transform.hppOpenGL Mathematics (glm.g-truc.net)
      o*mixed_product.hppOpenGL Mathematics (glm.g-truc.net)
      o*multiple.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtc/noise.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtx/noise.hpp
      o*norm.hppOpenGL Mathematics (glm.g-truc.net)
      o*normal.hppOpenGL Mathematics (glm.g-truc.net)
      o*normalize_dot.hppOpenGL Mathematics (glm.g-truc.net)
      o*number_precision.hppOpenGL Mathematics (glm.g-truc.net)
      o*ocl_type.hppOpenGL Mathematics (glm.g-truc.net)
      o*optimum_pow.hppOpenGL Mathematics (glm.g-truc.net)
      o*orthonormalize.hppOpenGL Mathematics (glm.g-truc.net)
      o*pages.doxy
      o*perpendicular.hppOpenGL Mathematics (glm.g-truc.net)
      o*polar_coordinates.hppOpenGL Mathematics (glm.g-truc.net)
      o*projection.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtc/quaternion.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtx/quaternion.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtc/random.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtx/random.hpp
      o*raw_data.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtc/reciprocal.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtx/reciprocal.hpp
      o*rotate_vector.hppOpenGL Mathematics (glm.g-truc.net)
      o*setup.hppOpenGL Mathematics (glm.g-truc.net)
      o*simd_mat4.hpp
      o*simd_vec4.hppOpenGL Mathematics (glm.g-truc.net)
      o*spline.hppOpenGL Mathematics (glm.g-truc.net)
      o*std_based_type.hppOpenGL Mathematics (glm.g-truc.net)
      o*string_cast.hppOpenGL Mathematics (glm.g-truc.net)
      o*swizzle.hppOpenGL Mathematics (glm.g-truc.net)
      o*transform.hppOpenGL Mathematics (glm.g-truc.net)
      o*transform2.hppOpenGL Mathematics (glm.g-truc.net)
      o*type.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_float.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_gentype.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_half.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_int.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat2x2.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat2x3.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat2x4.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat3x2.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat3x3.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat3x4.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat4x2.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat4x3.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_mat4x4.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_precision.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_ptr.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_size.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_vec.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_vec1.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_vec2.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_vec3.hppOpenGL Mathematics (glm.g-truc.net)
      o*type_vec4.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtc/ulp.hppOpenGL Mathematics (glm.g-truc.net)
      o*gtx/ulp.hpp
      o*unsigned_int.hpp
      o*vec1.hppOpenGL Mathematics (glm.g-truc.net)
      o*vector_access.hppOpenGL Mathematics (glm.g-truc.net)
      o*vector_angle.hppOpenGL Mathematics (glm.g-truc.net)
      o*vector_query.hppOpenGL Mathematics (glm.g-truc.net)
      o*verbose_operator.hppOpenGL Mathematics (glm.g-truc.net)
      o*wrap.hppOpenGL Mathematics (glm.g-truc.net)
      \*xstream.hppOpenGL Mathematics (glm.g-truc.net)
      -
      - - + + + - diff --git a/doc/api/ftv2blank.png b/doc/api/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/doc/api/ftv2cl.png b/doc/api/ftv2cl.png new file mode 100644 index 0000000000000000000000000000000000000000..132f6577bf7f085344904602815a260d29f55d9b GIT binary patch literal 453 zcmV;$0XqJPP)VBF;ev;toEj8_OB0EQg5eYilIj#JZG_m^33l3^k4mtzx!TVD?g)Y$ zrvwRDSqT!wLIM$dWCIa$vtxE|mzbTzu-y&$FvF6WA2a{Wr1g}`WdPT-0JzEZ0IxAv z-Z+ejZc&H;I5-pb_SUB}04j0^V)3t{`z<7asDl2Tw3w3sP%)0^8$bhEg)IOTBcRXv zFfq~3&gvJ$F-U7mpBW8z1GY~HK&7h4^YI~Orv~wLnC0PP_dAkv;nzX{9Q|8Gv=2ca z@v)c9T;D#h`TZ2X&&$ff2wedmot995de~-s3I)yauahg;7qn*?1n?F$e+PwP37}~; z1NKUk7reVK^7A;$QRW7qAx40HHUZ<|k3U%nz(Ec`#i+q9K!dgcROAlCS?`L= v>#=f?wF5ZND!1uAfQsk;KN^4&*8~0npJiJ%2dj9(00000NkvXXu0mjfWVFf_ literal 0 HcmV?d00001 diff --git a/doc/api/ftv2doc.png b/doc/api/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/doc/api/ftv2folderclosed.png b/doc/api/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/doc/api/ftv2lastnode.png b/doc/api/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/doc/api/ftv2link.png b/doc/api/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/doc/api/ftv2mlastnode.png b/doc/api/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/doc/api/ftv2mnode.png b/doc/api/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/doc/api/ftv2mo.png b/doc/api/ftv2mo.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfb80f76e65815989a9350ad79d8ce45380e2b1 GIT binary patch literal 403 zcmV;E0c`$>P)${!fXv7NWJ%@%u4(KapRY>T6_x;E zxE7kt!}Tiw8@d9Sd`rTGum>z#Q14vIm`wm1#-byD1muMi02@YNO5LRF0o!Y{`a!Ya z{^&p0Su|s705&2QxmqdexG+-zNKL3f@8gTQSJrKByfo+oNJ^-{|Mn||Q5SDwjQVsS zr1}7o5-QMs>gYIMD>GRw@$lT`z4r-_m{5U#cR{urD_)TOeY)(UD|qZ^&y`IVijqk~ xs(9-kWFr7E^!lgi8GsFK5kOY_{Xbgf0^etEU%fLevs?fG002ovPDHLkV1nB&vX1}& literal 0 HcmV?d00001 diff --git a/doc/api/ftv2node.png b/doc/api/ftv2node.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/doc/api/ftv2ns.png b/doc/api/ftv2ns.png new file mode 100644 index 0000000000000000000000000000000000000000..72e3d71c2892d6f00e259facebc88b45f6db2e35 GIT binary patch literal 388 zcmV-~0ek+5P)f+++#cT|!CkD&4pnIkeMEUEM*>`*9>+Juji$!h-mW%M^8s9957{3nvbrz^&=u<~TAUrFROkmt%^F~Ez+-c53Lv%iH3d38!Rv?K zrb&MYAhp;Gf<}wS;9ZZq2@;!uYG;=Z>~GKE^{HD4keu}lnyqhc>kWX^tQn|warJ~h zT+rtMkdz6aHoN%z(o|&wpu@@OpJnF_z{PA)6(FHw02iHslz^(N{4*+K9)QJHR87wT iTyp>aXaF{u2lxRou|^4tux6eB0000^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/doc/api/ftv2pnode.png b/doc/api/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/doc/api/ftv2splitbar.png b/doc/api/ftv2splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/doc/api/ftv2vertline.png b/doc/api/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/doc/api/functions.html b/doc/api/functions.html deleted file mode 100644 index b53579b3..00000000 --- a/doc/api/functions.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - -Class Members - - - - - - - -
      - - -
      - - - - - - - - - - - - - -
      -
      - - - - - -
      -
      -
      Here is a list of all documented class members with links to the class documentation for each member:
      -
      - - - - - - diff --git a/doc/api/functions_func.html b/doc/api/functions_func.html deleted file mode 100644 index 6126d97d..00000000 --- a/doc/api/functions_func.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - -Class Members - Functions - - - - - - - -
      - - -
      - - - - - - - - - - - - - -
      -
      - - - - - -
      -
      -
      - - - - - - diff --git a/doc/api/index.html b/doc/api/index.html index 839452ce..0291c3d7 100644 --- a/doc/api/index.html +++ b/doc/api/index.html @@ -2,50 +2,39 @@ - + OpenGL Mathematics + + - - - -
      - - +
      - - - - - - - - +
      - - + + -
      +
      OpenGL Mathematics
      -
      +

      OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification.

      GLM provides classes and functions designed and implemented with the same naming conventions and functionalities than GLSL so that when a programmer knows GLSL, he knows GLM as well which makes it really easy to use.

      @@ -56,22 +45,21 @@
    3. Clang 2.6 and higher
    4. CUDA 3.0 and higher
    5. GCC 3.4 and higher
    6. +
    7. Intel C++ Composer XE 2013 and higher
    8. LLVM 2.3 through GCC 4.2 front-end and higher
    9. Visual Studio 2005 and higher
    10. Any conform C++98 or C++11 compiler
    11. -
      Note:
      The Doxygen-generated documentation will often state that a type or function is defined in a namespace that is a child of the glm namespace. Please ignore this; All publicly available types and functions can be accessed as a direct children of the glm namespace.
      +
      Note
      The Doxygen-generated documentation will often state that a type or function is defined in a namespace that is a child of the glm namespace. Please ignore this; All publicly available types and functions can be accessed as a direct children of the glm namespace.

      The source code is licenced under the MIT licence.

      These pages are the API reference only. For more information about how to use GLM, please have a look at the manual.

      -

      Thanks for contributing to the project by submitting tickets for bug reports and feature requests. (SF.net account required). Any feedback is welcome at glm@g-truc.net.

      -
      - - +

      Thanks for contributing to the project by submitting tickets for bug reports and feature requests. (SF.net account required). Any feedback is welcome at glm@g.nosp@m.-tru.nosp@m.c.net.

      + + - diff --git a/doc/api/jquery.js b/doc/api/jquery.js index c052173a..63939e76 100644 --- a/doc/api/jquery.js +++ b/doc/api/jquery.js @@ -1,54 +1,8 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
      "]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
      ","
      "]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

      ";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
      ";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0) -{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
      ").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function() -{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
      ';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); -/* - * jQuery UI 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * ui.core.js - */ -(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('
      ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f
      ');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidthk.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)) -{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);; -/** - * jQuery.ScrollTo - Easy element scrolling using jQuery. - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com - * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php). - * Date: 2/8/2008 - * @author Ariel Flesler - * @version 1.3.2 - */ -;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); - +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
      a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
      "+""+"
      ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
      t
      ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
      ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")), +f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c) +{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); diff --git a/doc/api/logo-mini.png b/doc/api/logo.png similarity index 100% rename from doc/api/logo-mini.png rename to doc/api/logo.png diff --git a/doc/api/modules.html b/doc/api/modules.html index 98d42617..9620f3d9 100644 --- a/doc/api/modules.html +++ b/doc/api/modules.html @@ -2,157 +2,136 @@ - + Modules + + - - - -
      - - +
      - - - - - - - - +
      - - + + - +
      Modules
      -
      +
      -
      Here is a list of all modules:
      -
      - - +
      Here is a list of all modules:
      +
      [detail level 12]
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      oGTC Extensions (Stable)Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program
      |oGLM_GTC_constantsAllow to perform bit operations on integer values
      |oGLM_GTC_epsilonComparison functions for a user defined epsilon values
      |oGLM_GTC_half_floatDefines the half-precision floating-point type, along with various typedefs for vectors and matrices
      |oGLM_GTC_matrix_accessDefines functions to access rows or columns of a matrix easily
      |oGLM_GTC_matrix_integerDefines a number of matrices with integer types
      |oGLM_GTC_matrix_inverseDefines additional matrix inverting functions
      |oGLM_GTC_matrix_transformDefines functions that generate common transformation matrices
      |oGLM_GTC_noiseDefines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf <glm/gtc/noise.hpp> need to be included to use these functionalities
      |oGLM_GTC_quaternionDefines a templated quaternion type and several quaternion operations
      |oGLM_GTC_randomGenerate random number from various distribution methods
      |oGLM_GTC_reciprocalDefine secant, cosecant and cotangent functions
      |oGLM_GTC_swizzleProvide functions to emulate GLSL swizzle operator fonctionalities
      |oGLM_GTC_type_precisionDefines specific C++-based precision types
      |oGLM_GTC_type_ptrHandles the interaction between pointers and vector, matrix types
      |\GLM_GTC_ulpAllow the measurement of the accuracy of a function against a reference implementation
      oGTX Extensions (Experimental)Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program
      |oGLM_GTX_associated_min_maxMin and max functions that return associated values not the compared onces
      |oGLM_GTX_bitAllow to perform bit operations on integer values
      |oGLM_GTX_closest_pointFind the point on a straight line which is the closet of a point
      |oGLM_GTX_color_castConversion between two color types
      |oGLM_GTX_color_spaceRelated to RGB to HSV conversions and operations
      |oGLM_GTX_color_space_YCoCgRGB to YCoCg conversions and operations
      |oGLM_GTX_compatibilityProvide functions to increase the compatibility with Cg and HLSL languages
      |oGLM_GTX_component_wiseOperations between components of a type
      |oGLM_GTX_euler_anglesBuild matrices from Euler angles
      |oGLM_GTX_extendExtend a position from a source to a position at a defined length
      |oGLM_GTX_extented_min_maxMin and max functions for 3 to 4 parameters
      |oGLM_GTX_fast_exponentialFast but less accurate implementations of exponential based functions
      |oGLM_GTX_fast_square_rootFast but less accurate implementations of square root based functions
      |oGLM_GTX_fast_trigonometryFast but less accurate implementations of trigonometric functions
      |oGLM_GTX_gradient_paintFunctions that return the color of procedural gradient for specific coordinates
      |oGLM_GTX_handed_coordinate_spaceTo know if a set of three basis vectors defines a right or left-handed coordinate system
      |oGLM_GTX_inertiaCreate inertia matrices
      |oGLM_GTX_int_10_10_10_2Pack vector to 1010102 integers
      |oGLM_GTX_integerAdd support for integer for core functions
      |oGLM_GTX_intersectAdd intersection functions
      |oGLM_GTX_log_baseLogarithm for any base
      |oGLM_GTX_matrix_cross_productBuild cross product matrices
      |oGLM_GTX_matrix_interpolationAllows to directly interpolate two exiciting matrices
      |oGLM_GTX_matrix_major_storageBuild matrices with specific matrix order, row or column
      |oGLM_GTX_matrix_operationBuild diagonal matrices from vectors
      |oGLM_GTX_matrix_queryQuery to evaluate matrix properties
      |oGLM_GTX_mixed_producteMixed product of 3 vectors
      |oGLM_GTX_multipleFind the closest number of a number multiple of other number
      |oGLM_GTX_normVarious way to compute vector norms
      |oGLM_GTX_normalCompute the normal of a triangle
      |oGLM_GTX_normalize_dotDot product of vectors that need to be normalize with a single square root
      |oGLM_GTX_number_precisionDefined size types
      |oGLM_GTX_ocl_typeOpenCL types
      |oGLM_GTX_optimum_powInteger exponentiation of power functions
      |oGLM_GTX_orthonormalizeOrthonormalize matrices
      |oGLM_GTX_perpendicularPerpendicular of a vector from other one
      |oGLM_GTX_polar_coordinatesConversion from Euclidean space to polar space and revert
      |oGLM_GTX_projectionProjection of a vector to other one
      |oGLM_GTX_quaternionExtented quaternion types and functions
      |oGLM_GTX_raw_dataProjection of a vector to other one
      |oGLM_GTX_rotate_vectorFunction to directly rotate a vector
      |oGLM_GTX_simd_mat4SIMD implementation of mat4 type
      |oGLM_GTX_simd_vec4SIMD implementation of vec4 type
      |oGLM_GTX_splineSpline functions
      |oGLM_GTX_std_based_typeAdds vector types based on STL value types
      |oGLM_GTX_string_castSetup strings for GLM type values
      |oGLM_GTX_transformAdd transformation matrices
      |oGLM_GTX_transform2Add extra transformation matrices
      |oGLM_GTX_vec1Add vec1, ivec1, uvec1 and bvec1 types
      |oGLM_GTX_vector_accessFunction to set values to vectors
      |oGLM_GTX_vector_angleCompute angle between vectors
      |oGLM_GTX_vector_queryQuery informations of vector types
      |oGLM_GTX_verbose_operatorUse words to replace operators
      |\GLM_GTX_wrapWrapping mode of texture coordinates
      oVIRTREV ExtensionsExtensions develop and maintain by Mathieu [matrem] Roumillac (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660)
      |\GLM_VIRTREV_xstream: xml like outputStreaming vector and matrix in a xml way
      \GLM CoreThe core of GLM, which implements exactly and only the GLSL specification to the degree possible
       oCommon functionsThese all operate component-wise
       oExponential functionsThese all operate component-wise
       oGeometric functionsThese operate on vectors as vectors, not component-wise
       oInteger functionsThese all operate component-wise
       oMatrix functionsFor each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision
       oNoise functionsNoise functions are stochastic functions that can be used to increase visual complexity
       oFloating-Point Pack and Unpack FunctionsThese functions do not operate component-wise, rather as described in each case
       oAngle and Trigonometry FunctionsFunction parameters specified as angle are assumed to be in units of radians
       oVector Relational FunctionsRelational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results
       oTypesThe standard types defined by the specification
       oPrecision typesNon-GLSL types that are used to define precision-based types
       \Template typesThe generic template types used as the basis for the core types
      +
      + + - diff --git a/doc/api/nav_f.png b/doc/api/nav_f.png index 1b07a16207e67c95fe2ee17e7016e6d08ac7ac99..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 100644 GIT binary patch delta 124 zcmV-?0E7RZ0hs}iBz0g(L_t(|0qxyO4uBvGMbVbGTL*^tfkM%3YvRPhNE{fKaB|bU zE`pBpg6fW>8&Wn}AXZ5Qu@Xg)f;DQhglrV^nwx1!n5^FF=Snb)(Gk%vj{BRL9T9c- e@$=rlHgf|=7$DsN0QGqQ0000u1W`M6+rL23&uBa0+90uE%OD|+(2G{R zL&)v^AmWO}#(ZP3n7)~|7`7NQ=yTCV&_+h($07*qoM6N<$f|0vDeEFMGaQo;E4t|J$N1BX-KT4wgmvu@A6u&D20{R2$}&DVbwUM3!Wac4i{ Xv3!>HpqvZ$8Gyjk)z4*}Q$iB}sjeJQ delta 66 zcmYdFoS;pyTSQo;E4?nX`q10H6_y+#`jhHjhAEv}d?b4SFhXw`bg=6O+n|1%uR WXKDW<@M10l5O})!xvX_sd$oj(R;{eZG48+5s|MCC;002ovPDHLkV1lT^BSioJ diff --git a/doc/api/pages.html b/doc/api/pages.html index 66b1deaa..dbefb66f 100644 --- a/doc/api/pages.html +++ b/doc/api/pages.html @@ -2,65 +2,52 @@ - + Related Pages + + - - - -
      - - +
      - - - - - - - - +
      - - + + -
      +
      Related Pages
      -
      +
      -
      Here is a list of all related documentation pages:
      -
      - - +
      Here is a list of all related documentation pages:
      + + - diff --git a/doc/api/sync_off.png b/doc/api/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/doc/api/sync_on.png b/doc/api/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/doc/api/tab_a.png b/doc/api/tab_a.png index 2d99ef23fed78c7683f0b5aa803d937060d288c4..3b725c41c5a527a3a3e40097077d0e206a681247 100644 GIT binary patch delta 113 zcmV-%0FM8R0geHXBx+SjL_t(|0qvbj3V<*WLnm*fD2j+%#l7Gq+<5;Z*{QAP2nqR} z!S?f}A6KSjBMmcj2}v0s95XABy!b`qeq0Yk9=#tquiN10l6OtFzxMxqe_8ck>OlfD TS)Sv400000NkvXXu0mjf*h4XO delta 111 zcmV-#0FeKV0gM5VBxqAfL_t(|0qvc;34lNp1b64jp`3`AD&~SsnAm?w2Jg;BhW$(p zI~sYDvSRWp+$+LO5&al3JOi2`pmhuTb?;|lyBT%TdJ_>` w%g$7lQj_e!n4+jgvI}=i~1Nl00000Ne4wvM6N<$f(fWYnE(I) delta 150 zcmV;H0BQfK0kQ#*B!78HL_t(|0qxz}4ZUdP_Df=vx!f>I?0(t zKHnd0dsF*K?I*b&VNqV~72jSdG9$8vRNwkSVmXck;)J`Q|y00000NkvXXu0mjf D6ck2n delta 164 zcmV;V09*gD0l)!}B!7oVL_t(|0qxz}34&l4fZ>n-rMielilPI8Xqs6b(hUF1GLI8B zKx4E>cg^waA@9$ZOEHk@UWo{)9!PXglJ~@UN0_xl*Nz}-Ii`&g5f0}XKWXsd8aI03 zgcWvBVV|Cu{^QT^N{oHU#wpmkcUHTC^{!xHX_nTFrKOphS{;dqnv77h>G%f#Ln7el SP(6SE0000B!7QNL_t(|0qxy^34%ZXK+&T=Q4$n|q#~N4C8kM{mx^YVHd`CC zNWLn{S^f~#UuRg?v)<^0000< KMNUMnLSTXuTSx)` delta 161 zcmV;S0AByN0lfi`B!7fSL_t(|0qx!E34%}nK;cVgA|)siNkx32C8kNCHx(ag+H7sm zA`R1z8sytUyxt%3+ml=_WaUp<%%sIaa-E4UkH3j1pNP&QVK(BQ27>gCn+!N{j~(~e z#}4bzVMZx z&N9iCywde@uljkVU^L#HAo!^X+Zi-Ag44}36CIVm|PolI>pP(?&Q8a~bz zAW0K<6MH8skcx?wg&QRo(5wb}ZsKUgXyM2v3udAOsk^&+n7M1XT3Dz#Ik{7E3GzI^ zD4Mw1$vIj&0eJ3DEzBtaIE$yi2Lsi@(fonNJ+^-#_CN$A>Ez+)PRY#;Qm`?1)2HOV z$4AL2@NnSzeZ}=agp!Nz;U@P3Ta?_qzps8natl6O@%(P%`3=eQyN&l=Of^d0-^h4> zBjf$uo$vP*-|r55{11?Pzx(n3?#KTdC;#u80>5tx{O&IJ$KiKBPLAJ=oE*Qga&r7` z=H&e2KId;#oSYBj3@QJqo_p^8Lp^{YTrB|gJoE#pS-3fQxSCnG0cw_Ua&*5xa8f?d z0LgGsJ}?22;ilx|xEJH;Q;?3bsjY?CJ)E2aU{QeVZ_0mM@>6m?^Z_7MT%F9+E!_1% zzz_jxSa`et1_A#*Nd7*^-E$0*aCCHX2Q2klVfHnsuuOKfw zU?>3|PIf^qpj8rJ7ZAja@S-wSN!1Cmq+Nm+Q> zm|3XFf&ro$CZ=ux$nW9zTPbdo9RJkcJ>oz0Cu3vpZs7`&u{UwIkg_myGPeLdw{Wy_ zx26>2=KaSGcVhD5Mx$1L1x9-jr82bu-V0auQ7zV{0n}=&e zr<#?Oq6n8f-}-{%-Mpp>6mx*0DA8*Gp5yctXcV30K(9$#TmTL%fs_0y4IP<;jzJT~ zv`4}KnK|t-b}H=QVJ#|02D(gsGK-LQ4s4B5HXS7u9Cbnd`{ybQD(DH$lhoy}q$wo{ zaEZiTaN;nVeG#a>fM@JrWU;UnaJ2=)4{;qQ8elLqVz2TBsvW|Vs)9)JBv#9&gES2DwjNG24 z)R2uw%sDFZ4(4<*NriGImF^gD%^?>ix%TXFv zJtNy!`VlK1VM!R;z9A>J5j%|~arMREk3BaW<}_kI_UfX?3*Xk^y({m)s9Oozp?SpDuDpJw4)sddcd4 zHH8?EJ;|TBSr8g>^rLvUfwEE@D789k)HHb`%HZ4@l9IZgwHjWaGZZ>~i-vdioxS6@yIJ-N!Qa(g;kc^G1o4cg7i7O>H7mzgn zIOpOK0J@vITf0$m3JN}?pnpcK`>y}N>EEay!u$i9|Hc{++N|8}3CRHo+r~`7(aPR} zk^>~+W_F)0_<1>i==uAcjSIMtG;w}rVPj?eyGg>+>VYLnUM@}`Uwi+);N<7wexRrQ z8zz>P< zp90?}oc|E`zcUTje_4lllO1a@No0|R{Q^G8a~c{nue2ypBJzV7Z)X$08r5I^9%gD zZ5}fBKPA4;=zmK5r?Wh_akK*p4>NatN-kbLc3=c^^YXHD@B-{)kI3?≈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

      oT7+Wk_M<< zS|#F{k|^_&c8@<*?^8TfW;COyD!)`@i0FW0Lu+8GsEZhYBSX7gDjSODChd3y+z`l_ zN+w$+Q5jN2;mMjxC6_1t8!fhfW?&nGM}H^Wc1U6;T>fudbk+qw%P**i)CAT;Fd&pO z6qE+GLl7Vw84enW%jU>n&?gT@Q_WGxcFJG?k_Tg{R4HZGL5-H~BmQ&C|JF5A3g-c8 zht@&ljMhJC%CC=N@YD~+F*#G(=7Meq==aa0ck1tERaW~m{xA9)INjmNyh&7QR8iQn zMUu&$NmQm(QTVb&QptY^asu}+Y5v*6=~ibaQ3Hwy*}r7jWJB?%Kv6PAx7Bw35IJSO zvsr$(P9*~(9i!v17xEqgU4Gz$fhv}!CO8-L0`{zmNXy%vWU53oRUJj{+|CyDJcp@( zy^5iP?4%3^SMp#SRnh>JOJ+I%^p(m1x|g}my9L&Xqb3+Yg?}RLO_8+wzTgf}B)%{o zT;>~l#HFGt@^=!C-n4$vM}JX~ZIr=aO_qqI0#M2>$oxx>I321AifyxIZVPT)?qe!$ zP#D7fI(51?gq`o*QbA*_(S=}ZrqkW<1N8O7kVbR)ORgl!h6bsJ;9%l@UPMgo&xKdp zi;k?%#+49%Jg?+WW{aJ4g;f1z9K*sh*I(tYS&OJlO9bBwNUi-;LK2Q@c76aK@oBVo zNWyAa6hLgbA2@c-pDvbJQE;pIb#tigP^o(X!yxrpHkLbTjs~zwC6zsBm4XL)uocJM zX{hh%v}74TtHTF0sGrbKt#&N7 z$uxRIJ+RDeP_K4K_+(gJswK_%&|d?Po8$!47 zt)Hc?)6EIVH_l+3H%Pp6O20(JIo@J>H~!=pd~wM>s=Tw(TLucgN}=}54G0I3)Xa-V zA5}G-BU(K%UB|F;cEQ{b&+gW2UaDQYX>1VRcdswJ0C^T?6ha8~7JytgaRg6Nah-+3 zw(+eX(ZxViAe7S=)C3Mgo2JSSmPZWIWke-4BWnXKrP=_+>zS%TLHLsIrIIOtvV}Ph zrcXDr&youy`=mVG#15~=_WHuy-3}&)ghq~pJzXiM%J=!X4#Iav-H7YosHnpG_|UNgywFWk8X1f6LIfX+~E2x!Tx4)pC;u(}NZp1f1R=;g$>>DTpq*+vctl~ zgHP2VV!Ep`Sax+ZeYi%1Vcnkdf@a5`MXXN0PSKZGm~X7#u;=jb_;$bFn7Uu8S-Tcx zXeS*{S>SwitdYR8n+k!GM~#SHKyH`ZtgyE5oMk8GU|MZQn>9(}^Nc|@Mds5dnH^-o zMOv742b#8{26=%8(h0H5t?m;& z5`(p(-jSSIFsut|2A!r1(g*M=tRZ7ODwrxVH?k0+^F;mSIMtv$|nOu@Ick3cw=5qRWXn2cv7T71PTsmQ7&CI1tHjH8- z5o0`1Rc*c@ZBt`s(c=!elQneb+@og|?bHp7NcCKEIK6h7XR24}CCFG!d;LYd94}&$ zVR|2Gke;>a8?m??OaVJ>c*w!2WMd4eZCqaQfjX4GmZc|0dl1T|#)Qqml3n0+wY3yP z{ZIFd!rDp+s(u&|?vb*GIi!?BVqaF8Ch$F`-dl(5nb|_eCl{H=;9jFjp4l*CyI<%H zsva8h3rptufa1iF#>M6bBRQl!h$gKS+=F7UI%+HcP($K}cvC?op(l9$4xM}0H(1r9qmmu@R(b90Y1S#%9Lo#kNN!wgVvNSMKEd14zXM`#9kct{8H5+A;Efwt160XOj58LUwM)3taZDnE6hvmI7|qP*&>%wv}>k_bu#dymqIBvSTM+Z_ZsR5ffVi4{Av5BVr)KE5j~7pg}n4L1u$ zc1P~VDjGD`QPZriRZO>$U;Ck|9n-9-i)+V-(#M^Sc(Bu8Y|x3Rph51T(9QQPTl=D< zIEqxz8e&OC4kqj4_GmB{v=W;-6x3QLM%9EspE)LIQ3zi8HuQ=S9?*;xFf~$jroPX-mc z0eBZTaoQeF!_7Me?;3(UGaRWB9rsMPiv^Et3h6ertqlf}>oUl`v?JKB9oX|Jl^-Y` zM%53ws-!xeQFo2=uov{f=i;zO1urSl*w7z6g(6F9|J^ zGj4Qaji&2->% z`p}FpuTDzR0MtQ%v0rXlNn8<8@T+gI&6I-A0Vj8WBGp%bMG+zmk$L;TjW#c}y27O} zmDGhs@kl2`2mUSPAvbMj`GGhxMBr35;bz%{H&WdE2cHl8DsGo?gQ)z;YVi*^*-}eE zMbq00JM1Iy_Cgh^IKH*$TdR0%x|`RqN|m#Zb$t9mj{FoaAsrAyhC5aGk(`zsx%NZ% zo)ry*K#ww`*PZi;Wb`Tbr|t8R7FNgK{(QncKYuL!dRYtjd2jS~cl)dR=YcTW$M2u9sWdTzey=o-k=Yk*N;(xW;RT@OI{J;sg)2hePq<)R+zW2V z!_vvE7r13s-lIcW7?>VS|77OU6@lEQ%QvhtnTm%dT-xPRv#8Aq=Uf)vs*c=12m?^i z%rqBMYHm2-!>4LpYS!LFY+JRn?%q-v=CL%b(H+$!TBu^eartIC12LLVv@6q&lTt@F@c7pXAaMQ6Uf1@h z&8!6O*~DXultbL;z$>`?5RrTz^MCW&g?l8Z5s67J5shUki7-bI=9wfmC`10f1dZz} zK97>_>Jr;e_cCOj7sDUdL)Y`R`t8R*4i@@3WwL6NB^3mkwvZ3zcN`8R;r2N;Wh9+gjUrHkgL4ZEn z4ZbdsTesr`*&4-HJhTntgy}vUvr7Q)S0^M%yf`}bWs9OhS0+tT!%Idpp`3tR^U~sm zOCf;x-m_&HZJGJ2IpburW7sB(Aq#7s(F*4#!rCtL@nYUa@*ByagIyT&W%~rn@+8Px=NHI2dijFj9jWPQms?JZ!%fIg4C+C(hYQ-}3=ak`_=CPBh*taax z{Vb!5!=ZskMNFPqIIb5E|0|o2-#A|4H;@S%z7WTEMf(c7scXiS+n^^(iu`diBt%}` z+(BK49spd@oW$Zpm~AL(MB>s*#A2CBA*fP@wI+$LkCHp=q4Bsx5&{R~h<2n&r9e8M~kOyM-e$_d1p(8k5+Pz$}`xWvl+LURXbVCV1z)nZBMr4q5sWTI86 zhIo@rsbm4^C3uQA^ol4WD;>3X@-DH|z~N*fGuik$suAsEGo~>>dMcj0Tr4$p>(ZdM znkf_g-xG$DG0bG+>Pm*S)y$Ya_a#vcClmZr0wBE+PkxnNo+enk zT=FMp%i^ZL8QS}IKL28C>m8<Wi%{3XxL?w`lYj}b|`dr(iFj$sqKC%R6Bix1X1YA)aGdnkR4C53#* zj|UL4q1vWHa@O|0{Y+DZ6>a`5_zSje=?g4y$-rwZ%-?Fry(UgJaqW~WpnK||jn49m zzaL)GqSo+CiYm!vfERs-%HcIHvf~P3IT4OZn^Mh6w)YU~j(e9-{^qwAwo@`gpQQBb z1edGlHE+X*uPXxU{v|JB&GAM{FN?49`Qd)-0XO}I$6s!5pPB*6yAP*zOI5X6i!<}u zk0)PzBu+&+_@*Y_LRwH$%1i`()UU?K1Bk!0Pw#%4HVpOE?e1Z>CHeB;iTQPHJKb%h z&zZ9GC4Bke;p=!3{yCrX4PTTiUu1)Ukx&==DcQ7-LCb)_aeT;=cg~t2w*8mr53~D9 zWdrOSn>Ck~ZAv#Ohfj5S}on0y}Y;g=>fdNzy4TwJ+;Vr zp%R9@?J&Aj_v&P~%_H4>NhN*wOo)^=0K6WAVW&p-%?sOw_MDL*68MLR4tFwV@84fGEAQ322Q zq2KuHhC{Spas5feR>L|GEpSg*8Vzb8Z?5z2fF&LazHbep(mBF{=$%VDTC`v4glT>p zN60Stdb}9mxrz%_yp(PJd{Y)yP8UEj9*+QDH+kY<${l3&`!;dWr>uHge&`qP8(uvk z8Zc=5a+pgZmaP{+eT1qG@{FFh^f13^T^EY4G^&1kYJPogW?kz6x_^s&9)CCvUwk}V z@eAnOxNUNpOt<@zm~X)Bsx?E(+|yz6sQ;am_0hLCQxCqU+vBnEG4f}2Xr2enVOQb% z>^1if#%CNJH|{42B*}WYmX$g2&zF_L!av_?ZSrdBF9oPcKb?jL&>PHXZJe40*lbLk zvON7_xdQu|AC^N=YFrDYH<&{gxn+k0TYq^3knHR)@~rmR4)-~um5UDhA)XG z`F-d$TcP2XbN{}+}+*X-QA^dcekQ(hi=^6 zweiM==Y8j%Id|rqx%1(En5b3%`t6k&k$Y#XsECZ*xmK;tX8t_iXi`Xw!YEF$&yFWjC65Z)F$FLxG_K z&N_DWU){fSE!osvIpTCyx+rg>+SLwIx4k0C5_3FG$Vx(=*2Sg$zeHZs|Wv<&yrIoS7 zu8mRz6zh8^6>F*7*xRG7gOR&e$}>Ymlh~xqvLdS!tRa2akyx8I33L5SUBQf=vYi_JNd0e&}S7MzIa%t^{1j#F5kPd;{EFzf$3dwu=KQhQCHe{wA0OKyeL)oZiydOVJA5%zYj((_U3rC+NH9BlQP$;GB{~Cz)CuQ zZh*k!ttDRV;Tz)%^VL}vp2nG0tWRZyYC0y|UREQ?q*~a%69F84aFTKU(p~RLa?umN zcO%`T6VdG1938RwTJrz~3|aVhT6J8Gg`H{iTwTpf*b;VoH&2%kJ-XT)FXil#DZ&}W z2&~9GTwZ=LC2r;2@qIV-#dN95+I>cr8Ea2wcfIIZ6QOYxU^>6I9I@uOup==NljnQo zOigg1Z$i&>8XeCBGsdsf%aR#Al||Z!k-AmGg%M8%ODpD*vw@ZbB}l?yyw~zTEd2q{ z4|TAmS&0kG3|^aCEeDP-&F%+&Q@6O|Z&^od7&@97Xr?t=AtA+Izeywt_1yVQ%G&9*qX|5ONSTGZvYI2r5(rSy9zPS~< z^Wt&l)E4vPaY-#696m({S{s}-X7&T5hn_XOEu_yTcJuO+DS~ZNo3n;C!AV)aUjA0+ zZvtPl`Z&vwvX+um24}3Two)mqFe+6vDu-|=tB{MZ#YI{k9Bnh;>!=a;I*ErlX-|V^ z#!C#%f<1iQRIj0ER-KjbzaBaRflMLgLlT62Un@!NaT34wJgBR|!EoS5c?`8|mM)US zXHr;3X5nG6(BL@}U^y;l@Kb(!<5kWgn;}4;ma~*;GGe6ud#5fIxGHWt2WC;;i`07T z`=gobw!VQ@LC@S1oIT z{BmpI(eZ0Os%Jv^eNU&cKE$uj`y|HQ#;e zK_r)V&Yizz-aKwj{u!ae!`dLRZ2?4x|D$da`T*uzDn343!no_VjaiTvWCHWIG7|op zQ+n{`@gEkc__T|clS@|<*pITqsVn6~R5mFx3#-H@(ldFoi`vJt9>Jd*4lahpbo0C| z&&`d!$}D7~g;5u{iC!f~_7?7)sx@>13TtNzmVeS<4)+A~Gco9rjk;KA1eJ8?y<6;e zJT4x)Gg^iCFWTAg);^yBMPY!%R-Ivr;Y)XawB>R~7=_*a==G}}V`}=V-F>`5lGNoS z_T^-o#8Pj3xSx-->_3lmGm9JH=PKR(IbX9a##nr24aV(!iYMxUtMS^6s*I1XW8cp) z{6)LYJ_mSs{R(9U8Q%MphPP~Y>^bRjrAnq#F|2rutX_0=*L41Ht0)nVmH$>^rF(Mp z9kMPXD;qE4z(EK_X*n-Xs=14*nBc*R>D}YP9Z7LbU(KCIkZ|9nLhEIKZ1|SMNgp>) z8_#1M>`Ti=9+9L@L$HFJr00ww>Ks(<^QyTmKsYsJDTkwtwa@KOhrfX>wlf3;!i^ zj4u*C)}(5?QE47^?fDa;f@yM(c=(=LRS4hh5Z`SH-|Ye4?SXH*Yh-74LW!S0+3^fIx0Fw9UjO-^v8?ub7db}{&~z>@A&UM$LJpe zpA!)83pD@zBidC4a_^=gK1LwQ-yHVms?Tao_fptG^HQFR&zy$4Nk=Qw;$8B(PxX^i zg_b%@OrEs5PSF~khfdlV{0Ndrk3RZSK3<-ierxa2vCsOg)%&!MlX-7$Y;P+Q|Gf`^ z7=vErqF@v&^|-o{iwtDE{hcc(EN?cZKyVdO?Vq=Ht7pM@mk!2*w6ai{4nOX3{2t(I zLHxvTS%$@tH4#PyrbC3>zrKa9u?YM<8AT9WF)VAaJ@aqjLM(Qb58l1|vb>enUbr8i`I`Xt$0M2t2uZbHbn^8Y zeyqn_$!yurZ=YbURrY_D9Ep41%3c?sM7x?ui$juLCQf;1mTB)a>5{inc;SwfD$s2p z%uYg{FCZYsQ2jvFc6}_E@3EPG9x$)d)6bEYwTYoBQ4tFE6@QU^$h>G;Hg8e*lb=AS zU^E+{*r-4^(_BogmZ#xqbP$TWzOQBv$gl^j*#*{Y0L2~w&iBUq z?sQ9Pq%4{O3=w2nND|E%nHG!|>?rJ6q67^4fHkGKR!8D!fsu#QB3n9h zZ5K0bt3!*Wn)j8{{F=>`)9jkOmDBVZy_M6{e@W8;n>lqhQ_2+PxZ0IXtyb$_^R=%t zi*Ys=qo0Cq-?}1%O;@JD)4G*q+r_bFXWjZtvPPa-wNRzS)2f|e+r*rGF>WT}-1Iv2 zXYJuf>&EA1#klz8dUcN30XyADD^H`XoypqTXzO!QSL*K?f<2j=O~GJa$`|?v%ST+| zsG9;Dl>a0NAF4A({M1wx_JEbuvQ+bK>i%&yKa4#ImVZfis>K1$rF63slK;@+48R1jKq+G=BHf$BMw^skQP$i{}B4YG90_;oz{P(1xG&nUc1T9deMIBZ;fUj$637D ztMww&)ZY@#K8@?brezk1dh7~2C02_(H zm9&sEGkrN5_wv1nJ&SwF1-{?ox?DP$aOaA)sJ3$na^KxbcX-i{a%l9Y$#KKOf${+4*pvwNue#Eo$_zQq;eI~Y|txJY5rBuR4C z$nU@;3vy~r>P$kynYcLf@G(S+e}9^GwpSdkZ33Qz#{!ceDPX0MQ(~ab69WX$>Lnl^ zBtb;*%M#LYDFif`l1A~MV^kagh$0DtJIMk;CDxmwyeB0EP^|>mEt~<7$Ta%xDLRF@ z^mK}>Pq75VjpR2X_(8Hj4*;G5a}E{GG`jCGA_Y3p5q$h@HAsLrfGI_XI&+&&;X0M- zX}n4Au3F2tWM6tLH3^>LPY9Z48fPA6n*HZ{7#&Kig^YQM*zxF>nut&0W3fs26zI4+ zkulc*aSu{5{s#PB6{oU&`LXj`Z*FP_#q9!+NMJAoEHp9#0mlC?9e(hyXipT^GTZ6R zsnLHyOo93keNg{)I!J8G2k?PkLbap+&!7k8fx0agfDNt(rP)!A(hYY_3W^3}g2+HI z5Da(*JB0if9D(IQdLVD}1pEUUUko?`7Qod04Fh1vklaYy%mM!Z4x#~lKm*t?#D9Y2 z=YU+4f64!|&4Auu0FsmcA0g-f%*sIZ0~BSU#sIUjP;&r9Ij9xDtQ^!1Kv5p*1TZTO zc}?0M4aM|-LWrh(#z9DS;%Cdclmk_NE|mL! z2^o(eo(lhxYr6hAs6Mn;>Hii~gpCj+Wx?Uq$@}}EV9^O=9hmcDKj)F8qr}lzy#GtkU55%Ol0#8I>TY(p1V_ShY;?K4M9~qcei|rsd#`5hTB*x?I zBygdq_HU7hS?%AV5G&iiMI&~$e~UpJZ~qqi*)w84NSbkUKS-Vt?%=a$QilmB-h&bP znyg3${1xsrYm^)zQW}_8U;@$y6Z+Xz(2e-3tDpyQx2vER@lRJlA0k9|0SFPTyPzMD zw7cLZB5QZS0OI#+Zf@GPF?}8MWsPBVRnJn&=GXfMZN`&d|ymjl9Sq; zHMR``ga3B{CbAm0#*RT~@c#-5e}vLtUaMd0^gBZXG3S2-sDdj)<73*WhIO&7r|#4u zxtq4rk!j%ekHe{n*Rw*!%3Cy78GjmrDn|6B2CsRPcBS3M+ zI+|xoEeq}1exW)?y73FhE<@A|vY$+Jk#OK^x{+5as(zyquHJ3qhA z2gv3B_m4dav5?=x-<`+!89{#^SLt~E;*YnXr5SyGzt@8%r76c9eLV~K89gEY=bycO zUT?2``Ibh0FLmj4y?^fxChCa%ZvQl0_0DNc(fPmqxw*Ng8Qnvf5%j)yx_#T~o&Vt4 z^1ppuSz_v2)_Hn5JIWWbyA%+Ruz%TIXtF2rdwh+)(i70q{&?Ep@_%c(y+z7jSwTJ^ z;l>C*R>b?oKVV+m7=6yghY{+S6@QV-i*@Upcg803V8^g}|5>-t=?JXH=y#%t6YYmfcBFR&3f7=@?`o8mM;f34F-#&0XUxG1n}jBU9k+>gxHfiHt56cA z+~+!X2dXv(MTx1-hki>IdzLTLWD-t4aeL1AM5_{Bw&Ce~uBH$i+MC=xR##zH#JR&g zLw?ETO)F-N?O*FTyLn`;>bJ*5A@~fh6HEh1p_r5|5HAb0a9+Q+uyBX`Rpb}B$93o! z=XX9&p+_bzp1d8AA9DoD++dz2Vo4h|2WlpZb?&q(OGr?NCF^yYTpDeH% z%OG|QGJH^p2clJM>vG(kB-1*=8xpy4C(kWlrWQzbRVuLES=LnEcTOwFdhu$iI=jy+ zvv$!8(`wKCWp~TIx3r;-N1t5ICWcMVP4djqag)ZXp~~LVQg~=;$+Hot+h0D`3g5Tb zst(qfht@QAJSJPL_;wmm?TqIFTGE8@%Ta4}gWm8G(>$A>#<#PRvyhH=)>`*EkoYoz zfS&G1OO8Ip?S1)55&tE;WrURzagk{JK?Xlcu--BC}=U=gM94NZPTKCgH1BAtES zy?6g2T?x|5f&dSjIbzSH|2ADIm;&PO1vc(S8h!U0+DItHie2BnBREN;P2cCUq3-$i9Rx-STaQ4QVZ6L;<+4`&)2GJyoE=O?TeDj+ z+my~o846tev^gxoys=p3BvK)IY_?W^u!_z1C1eTObY^R;6eQ!_w?z0~!&bTEVI-U$~ z$8BS?ANdr@1b1bRrnFUBY&PfS!t?d3xpUJa_SU%qcW#jeT}dOWC6|*w4-iJkz8Qv8 z)C?6VJ#2`jY4M1Aw|?J@pw~@oKKzK2*V$>JJD*3O2`O6@wGlT6hHMqr-fc|pSA$u@ zJXfnH>kos2cO!N!c8@nlHzn7o*UFb7mf+@(e_PB-&W=u&Pg0M;jYSMu3?286 z_Dl9s_m+1?bn?#;vIMdO0!0Ev%&(Z097!jTB!ze$m4UFj|N1HWhd(7lcoy$pkU&()l44o1dRmHC zUKxlG3K0lg{ab*g19&0)_^pOufiWq8sW8t^ViIYE2wO@!7-^NKbc=O+dc)o1yX&@k zWyX@N`B`$=tY9^=0~&xO+y&t<^*GqZu}_FH+9JKYyEQNOigr z=rtYZ?hMCBpt5+K`eokDElo6x2Nq2GdDsMy=`38oVgId7)R&;FhZ$EJ#GD)MZl{zd zq(l*Z8tLhzC<(=Pb^H1{TQu`xCk)_I@^Mr+wOHXY{K9=i zjC~~QuDtkCaO7W5aP)h-rswVvb(Xki0?y*>4b$~ikl?Q*H+xSj>ve{{vJHEzj>s%5 zL`mUJ*OwGZKAjhMveKP71zZ-n+BMSBvHRc%OYy|~x=@8WZ|YseC-x3I#Qf5D&|X(; z5#|rY zceU>|G%jyG`s??;kz{kLj}({DH-bqXY{;)uP&M2VVZ>4d5kx{s?OzSw&330UZpq+R zUE^f@*_2w#wbajM=tX8~kDs&A!oOeCksptE1Fx6habIcDR({j@y)%R#=g+Lvm!)0! zG=D$caw7P6W=DSUYixL!$29dfumAWQvJP%Ny#TX|2`dK$-Ez%Nm+sAp=5i7*`(Cu%JUv+5f}u&54|C#y&i;N*B;>pQWKBK zmvnl+8zxOK2%_8f*l6PC;ZWCO9>{o}K0lF@>jqXbG@(NHN{AWSJJPW45z48ZL4)7M z4==vZ!otHw9OSbp+hOVYJQKsr#6D9}+P}BcJqGkn<)7{6 z-F}K0{na6ptP|Ve{VNw_Lt%Cw?&ws()oFfi(R6|RZThcvT<12==Wre2U{LbZneftk z2s+20Lrotqpc>xab=3AlQJ$i~t`*PjT?>(mtvwq%c65l^d3AkAJ$}^n7=DyX*R=Kkl*KIXo9Z%xf&yHP_5rF1bSlI%3?9FK4rs;;L<`H(W2XjQnbty&! z3GLo4oeDq1;N9)&y+1e+7DUs3z1_w0KV^3Q?{~B~IR0-b4t!PR>av-?cHh$Z_z3X# zuNnknkWlQC9L%C{TvVI}1|*Ym1i}rf3A4n}^?fz1g&FaNK`;wfEJ& zy!aO9s&fDEOYh}ZRItE8EET%a!T~eMJJXEV(KDlme;3k2w{=`in-=^>*IGByn_PEw z)q{bM=lfD`qwhw};KYp0)%E+TtN+CcXE0nhJ7%f?Z{dvCV+ptRj`Q+at<%fBgSRWo zRSa?4G{RVhL8%R$_es>R2QlZyOig@Rd-d%oMvNXz`?|JSTdbpqZR7(F<}sO(lfH0yXVI1%XWg z)lPVVM=S&*(Wtl(BUG40ad1@D8-^M@N&*0GRcJX!4gKm0D6dab5Kqoj0&-Z`gu#h( zWRt*KYq3R9ia@dt^=mal??xqs+4jJU2XG3P_vqDf;xe+~=2UGm5>aQ;2&iWp6?64F zMP-;eWK}N0GuH2h zxiudkRwDtvbczm70C|u_LqAm?C)N0lx`!H%c3#1bNNi+|Q-1qpoxaZZN}Mv@GB0&6 zr5fKme_wYkR%!2w7%aI&?7xe<|D3V=zmGc}9=6Yll>gpV{ilKq=VwL0|2YZrxi_qi zs`~0X&*L=n0EQWinFZt|2(G-KT%(>9}$398UF?q_&eIcV$6Z1*vsMqK>q%j};|3~7l6fv7Wne?0M3@^Yq@M=Q|Bo&Ubx zMx!L*?D>OqtMOVJ=n3>Tp@7f zTW4}q+t>}Ik9>Cc=$hLUwB8)gyj3Ig#Mi~et-@pR7S|m}KdBL&`@l$f%>NR6PcjfX zsvqo=zH*yhZIO}N8qPuy-w>02IIZC_o!6AVHM9Ie?cU2}FXFpFb<}qUZrnBUb8Gk6 zl@6=)LFOv(Ap-U`Pld~0e7Nz~6)qohd_(ziC?Xb*hvjRJFD4bDesoF5mR!Igr92L(==b_YkvxrgWqJ^f)nXf)oXZNQ5(qCI)R)tX^&S zG1E@SYk%}25wd;LJ7tI|_{FZ2 zMkEIGM!A^&oz{@cYa9rlICv`uO`YRs8L^tjSCFK+4f0B9>nl|6az7Zzs?4 zyq~RCpG=0WxW2G#nN5@FF579mC(k5!rul06&Y!R1s*#59SvIMbsY@w$x^kx8?gIXi zZ`^9SIM<0$M(Fp=E0)y8$lqKk0aUt*XYb`Jf3aPEYwxx4(}?D*6=c}wSQ`qox=tgCuwy%LB>Y^D}v zjS>6dL9lX}LU^%`FdWbQ&sDyGoT7)0gg0N;9`ZXM{YiHo_d5(3Ut&jC5Ik@+pe7-_z}W_$0=!syx13_eYv`~1 zTlz{{llheyQXqM;3uez4a$30S7ws@|g#GK>+6XnDCx^S(l)cq9m4hAyfb#I>UX3hkO181;z z`u1F)JDc*_oE znkT8kj_xx+Z_4_KKro(ZTjrUyH%)(>X)pb@>PgOrYHK2Ycjo5knT|e)cvk#ripD>4 zR~FtMTiLKL=gE<{W%LU`{1)@CzE?EwfYOKmv9ou8x*^U7`iK8C#YW%tGg49~?wgOd znd|fLZ}&M7M)12Z{De$wS88?xmCwP%~7vp_@#0+nXDb1m8^kS4S{NL*fMPX3zGPnx-`*QLG8oSJj-ET@fcXN@urmQ%{@V=mWF(3j-ovn21$QECl`9DVHq~K8bzwzqXAxCyB3*+vwQ8~+2ebUMH+R#Qsz<%@@6zTKlIzP|xZ_tkbFI)kgB450H3 zma^EPK|q!|J*2SzZSPe!2`f8Du{dwQwhI7?5~<$;u&+^lp$2Q`D{Geoh5V2YsumL1{xc#K4Sl z^o+){Mzjn7GU;0$*rlyKXsYPfd3!USO;iqY2Q@%@P~(clrhZ`y&eL*-JUo)MFX7`j zuKWH}>66M##g*%((7kBujucsk?2}-{a#Un|7uruHs$k#}h+#!lOg^v^~py2V{nT8ko z%DUv|6XGpkL7pBmWGO8h22iojTx$R&h#kkFsGzFq=q7hR+hcR*`J>% zO62_fq&!^@?D&i~WoT(d5!4Z^Bvd(EMKllWn2i0VD&eY_qhi!e01Bp~I4yrKH~hLg zo0W6TX8+tzG?OL|D&G@%;Vw25uP+;}XiPT5u0phZUy z?JDht!*lbn6kZ)RwI?dPK&2ZI(z!z8~y=) z$cVh}DcfMIQzc%JuWxfpWQl=vpN1m&@bEa@*seGhR~7IZEj2pjlb>NrInYM^O|pOY6YQkyiL9bPekO{dKXKB=8wIxu zKa{Iej6yLcN;D{klxfl=8#JPvOEjp5AZVr&je0R|i!nDwO9XS;V5olvQPvD8x!I%%xbQq5?25l~ZJtD8(u;&`UDD4SCQE zOR=a$q0tOWvS>vqDaWJ$HKIsq5K5>Mj6yI5O0H!RnTD8Y!lYRMQT@tDNk#=2p2|oG zz&?z(;$u3oS`6RfV+JuM8mHo88Zi`_#*)z_U>C+l@iDDfDF&``vCNzpLOzD2aQ6GUD2y>>a;cp(Ql%&;n%$C!WKuPRbPRbKqvD9PpCqBW2-z4)${Hp0l7?wN$;FB> z#A%R}0g{F3->E`rLrJ02gF>P0lYu{?uxR3>995&plwVb%@{6CsF@&UVf-$yaZgMfU zq;Fy|!b_gCqC}MmQg#C{{L^>sm0y2E)fGQQW9UoYnA7wo>^jrDlMngP2qy2U&T}4@oHdP!GW>zluaXmUt*cxtDlIM75Q8$V73Kc!)+Vm3YWSsh4<&MWvT`NJU|n zc!)$Dm3YWUnU^e64Y4WnGYqLHpQr9h(c~rUI?@m&8^vS9OE+jonbEjO-9%vUl`NAC zxzT)AW|u-uG0Mh3k-160&@Ndf9STVWdL}>>2x!J;%bqa22-1VqUzgj>ZETY#SmS_lD)3k+IaLmyHQw#TZ3NQ=zA!eO` zrU01=8~6h(bOzGBj>3J^f=~cr#B?F;ZR8>9)E5fOz-h`XQTA*Lthq@=WfBXR1H6dS z$WrtL)CDv-vMlKfD{8J#3sxl#B}^rXIZZ%v1OxyRZ~!m`lmO5pDZj>2;YqNkm4{f! zjtbzhXIZF@3c#=@m2>Yif@6lR8;gVjpaEp%Hry?@=m#oYh5*sXFvY2UKydl9FpwVz z4tR_Ft7PsQ=~R&}2G&S@|geog-${s+LY*T!`^2ZKC3ZJ-3$}wE(Te6c7>Ra%!1d#aq z4Q9cW=*>aF74;*-92X$G;@oc_im2NU%p&%ryO zIscfA_9f*Qoz+kFP68MoAy`aHtayn6xC-B$hUmeL%7*evKPF`DmAk{5%LdphrY=S5 zk?mCh>b~~K-l6^QOgx5W6;!w*nEOm)5s_DzrJ!<21MC4PD6gOc;*)P!fC7Mcv2oMHj#Xu98BSmuTks*qijMmY#wNamnPmSkt20Y{-a;Im-~h}kUq z#7_6HHDp>cQ%j0n3xKNcwJ@{NR=q(MJaeqT5`atumda9e`Ev&VQMA@;7UJ}rppqxw zf@n?$*c5rF*tG&^vM^z*ct!%kRB9@)=a$Enr&-|5sXBFriF1AiBag0}uKHXoZR9j? zM;?d|U7n5rbON#he^~z zlN#Pla3(CL-tWdy#c`^I#SF>87bg2YH&n0#@B{h)4GS&0x1JTpzrgcU3I|8Rgc2B8 zA(4+G@`wk)gb<__ypu?9loO}kQ;dJ%X%z7-H@iv@P-3s02S zTGzZILhG<2+iiwpt{Tleu7IV$CB=7In>vjnZ@n--_`hPu*wyCVd2Q1-{N}kAo{PK_ zO(?ecBK``H3gGXpJ?(<<{NVg{JWID3rite9rVU3*6KFGb1-Q%5FJvJ3lndb%x8?7` z=wG2)Gu6F_IP3oKo9OMWSm~Xu80j5(e)RxrCvHb+$8H~4A8_V+V%(N*?tt{^@~l1L zJf50ugJ=`pis`lcuFnOm!#C(6YDaFzYKLjZdlFcELw?gW#k=bG#oq56YMEx9d_pvH zQ2N4;U2&3!xWGRH%|GMpXCS)W&43Sa25Aj>)>{1~W69}O>v1)yrE1Ae^JPxU-zCIS z&ftf^ecF$})WCy4OzkvSq92@%nd4&bB!Q;dX)rD_xiabWKl=2?+vpEMWjyOjbPQ!K zWO`(NOeBGTpk0P&2%EV=PJRY~NN%!|3*k4%@2-vC9;rdjBcXs-CBHP!Q-R z10uxHWDYSmK4eZZ7ag|1>asbZcw9`%|sUPc0!AT!Z}qbEgRgSIq;@gH$$aeG`$oJ@5B>Y!Wt zvAlgbzU@H(M7|i#sY;;G@-guwWA-2`qhs1WP-*HQv27EtE7YQzrB8M7OCGa)!+ouTA%KgL^n02$qt#G?ow#3qB!|fjGDq1 zJ!y7BdERJN9%wEyQC7lawc=PtvNJv(sD1QNy=$Xv_X%;Z+)xDX*p7!*i*$f-6LX_1 zgH^*Wf?Ef2fUFEK>(Mm8>0#5rWdbQcM%y|DB=un2uo)k|BS@nF3I{R%i+E>cE&FnZTJKn80QrXTWD5UINSm$^y#*dO*n_bkH8i z7(}$KWWY6xbPhoT?gqgZa3Kt50TBe^+&0`MF`%o5_V~a4PGH;d+Y#H*+acQt+rKO$ zts|^MtRt;Mt;4N@>7eMq>LBVs>U?=6dLnedbf9p6u7__YXh*VuVuWS{XN2K|z-|cJ z!RKBS8u@#q@j-BwZ~W$5?H_kP)9}vo-#eqh&cO-1!A6Kc4X_UXTk$`}793eU(s&`T z&NseruJ(;WE+fxvS~F}x=45Mw zwPp&9@yjl5;PbKPZf;E80njTd=VA}@1tw2zkfc%I{A(y{(-A>}-~{HRIa#ek0neaocZEKHC0?>WpEnmJGct zHg+3}URzQu)TRqItl2-UG#ILaKX$!OoWEvv*brsUOwTzT71&_avL&K#^^fQQPxe}{ z>O(=KtsxAi6W5w>J={6yrbkxKB{n>Qbj?@Yb!OJftJkg_W}3lCKeYUy>*H!hl6m5D z>uAPIIs$Y@8GovDW$6B7d>dLXxu{Ik9cCPH?hVp?Zu0sK-%)k_O!y*jIKXkPA ze!FYtHX*fm#_=L&!`Ai1Sv*A-al$qWtt7tTXj%S&d2N_z&PX%9TnS*JV`jyo6M<75 z7>@0N!!l&=>D|28@4lmLy!;!pK7XrlsL_EyYzk2^*{ksAo0q1yGI?zfN^!h5pu?Ku zBVLLIDJG5Uh`z*K#MUn&t)aFNlChQ)l*Mf2XK&?gR9$NYoA2=@OA!$Eaa*hj4<%#Ic1J|9;JZ8jiK`@Pu zHvHMII8D2*#1k+#xqP~zp~FOBRM)iX8Q9_AWP9Bp``&S;B9&wWFnDTQ3i_IHFH~{5dMTKVpsFoDBQNIM)xs!Ao#^%I7E7exhtr%K7 zOA@>8Yx~a6L2PsvEtR7Nm+iYN*)!u}>H+}H(mvlG`zwm5R*cShontmot=R#5^ty;; z%{DF+k%CD&jHgwm1V4AJ`GDGG?v3ne{dOBuoz1>214c*2zEg&YbL(y%;kZBPL*aks zQ>%9B>eQ?*0CnGVJv*tVId2_xeQ-~t0mzhs-18 z8KaSpA?byLguJ#vIXPK)66?aS#bir<_3>obs56y?>Le56(($pev)}V7N-LErnHb25 zKEUK1IY`)s)&y9j+p_$}^NH}z z;(k@Y$dD7S|1~P+P%evi8ae%bNL^HkXL~5eP&M>Hxkmerj$@{dFk$3*4($)5+MFKo zJm++5*hRDNA41e0+KPD7Mc4I9>3XGh@0eTxI<=PPFwmMukALDr(Nk_h%f$x#6sr^J z$wfK5VD|==S=F$RU7N-0f?Jcp&}G}E-KMqLWMt;ncLv%>{cENKBK7-CP`c|SBY2ON=sZwV(Y!5A|g*_@(3gK@uK3%2bm?)I8KJ} zabK=n$lc{^z;UB<=q83@Y5p;C3U9M#D+O3v!w~7YVEp|BVf-&ui~=!F+g%G;FdZW6 z({5qYc$llZC#&m`xmP2dTI`u73oFy=eBC)g=uyl?`n=X2K7ZlCo=B=Fe~qUU#X707}H?H?rI$v?%Ew%5Nmj=!QSMq!B5PFp6gBVrN5B zXfgWHCMqX{;%!<4JWup;ZEJ0*OTCkg7C6ut;}Du&p#fqvk0O1=`Ymm)bSGZszj``% zrq}DF^XzJ0JHyx2xokUM#apz3vta(S1D(>=3TL+Ny>e_1EB&DbR~Ge@(c8x*rAfQA zYxmOLu4iw#m4?yY-Cb4IsF{t1l9i3B$zo5%T1}|e&qG{ZJcJCIPI0o4j%5Ov8P4!X zbyW5ThsD`wa5B>I=TU|QHvu||z41dt<^UQEXXMT@d6>DZk;gE3m~nDDY~P~YKc}_k9EesibdtB;~pttQl;o<4`)yL`LuUubj{&q+0-&wHO zUsUZnKaK@V?+Ru*&#Lf`&bu8ZSw`x=C`5i7A91-LQ0x_0bf?bk-AM7Qlunf=Qo0{(>%{eh42++BA0Dx-dj z<=VT9BeR4Ye|z;IBO@fjY}3_S%Q9&B+kky>j&EGx#paDlPNF^jNv#(62vSW%9(eFl z^Vablhnd6)QeYY$Yk(?c0v3B8OqmNse z5D(257L%DpcShljk$p6mW=IhB&F+cjN^<6U_Q_23lq#F8;m1F=lWK!lXQI9ApZ(bbB z!n%Ke=p;nLYKsNWAhL(g+nEcUi+FT@64!muX$K191e4Z1D2Al!rKNYz;h6L$u6>07 z-!_Vf-PB9;>I`|Eqv9|ySUr}>)F?IIy(tLavd1e3q6Wek;m_dbLil*iF{Q^{Dxiq%lO)1YQAE#v@AO z^CDuKa>$h>`Z!zcZi@7;8LDs7GV$atA?nC0W4FdD%dV08b;D%56BgCGMIc0fd;xu} zH?H2d6~8q-ME`-G3{<_b4F$-D&fOfFsD@t@I`$B&D0_S>U2|NUtvd~pmAU4QWn&fY zcw-sX3eg59*?52NqATZ$o91w07ows1%JM`j;V%AZp6^5{vEl&&BnkEOyU}i(8zQ^@ z>`@NdMyqIYhtLyz$3iAS3{MCZ9VHsdv#?t0LQG^{nP7L{F?$iu@QY&WR*vKQm5P@> z>)1RZK`m}-!8h0kD(`F@-|*A%G=LCpe&sULSbbUfTEQ?z-D?$Hwwi3+HOX z(GB63w>p~MBYPvQa1hb_6_96X7Obaq6UIvUhxbCcG*;RLBT3CG%S>_i?o4{ zkv8*ohot7ZhX2WS{cY+cwKJX=(uk&_?uck*V=gC~#McS-jFV$>Bat#_b z51zzD4r(77^2`^x19+2uvI&tQ+NY7&RBh?;+3YY6tyZb)$j4Qf`}i2$;u0Ya21}j% zS~Fsa^c^IBKuunjkToJ^iKMbc`;A7W>K~L*r298LYj3Zb=cdP7+@mwi3&JUTG=A7o z06T8nnR5F4!R-Kto1KbFJ!hA%nwA)w$~|YN<0_;r)h*(vW7pIACUTUOR{-9zfmq0%OZt^+8)!5k`GG~fzv%qgN=dj?428KzsSd?f3 z-hqA>tA1IQ`|}kEs3wJOIUU7@_zhBw$~)8_=kyeHlk>mRDrCOeyRe8hUq^1|qIKo0 zU#ApG8rnV?8S9ossz>3aXU`d`oh)kVMlOO!W(ww4xwg7{Bmt?1aTI*Isa7*`HPUiU zq};AW#@=4;;*Pjy2R+b?dgg``RG;i6L!Et zPf9>Cgg0c_G{HwZ!Z*(_$-^DRK|h3sV9PWdJKCqXC6W=Yaku~BT162pMXFtSYE|KK z)$y_N?rdjyn%{V)7EcwPPc-b0)I^DcE+QJ}wkxksvQ_3YYa&+f8?+H&VgLwW1%ehL zAk>R~ps9!(bZa2+f!)%!(d)FusJ0QHwI3va7!a3ykzpQbCt)DL-gd!$(Oa#YgSq*{ znbK3O8og?vP9TK9JNzHq4z{iN%49Ec020zNJE zy*)SlD2n&LJDw8~YO`8Fd4H*>VcKXi80$IW+;Di$E2Mbri!gGvz|{}?do*aYEH@H_ z;7R(AX&zuSj??T%Qh$Y_&q0hF2_4)s;?QC~{=QOx*g|Bi11Bypf{E}Yr}S^TB|ruB zP72J>e8e}fqn}6gk*TTiKI%|6t=Xo(7KK|CfA0Duf9u1|& z)5Kb)p|l#?p~6ze?_jEEAiJrvLZPVVtQga->@tLopg*gj4vsN3J|3tEn4-dE#Ps!W6;B-6LaxR2=_&ln&-^0tnMT8V zXN`XACee#fM(;04R-9#6qGuJ1mx6sGt4{V(v;DDiO-5|GP+j>tD!>pOu^(w|I6+XstVGeF}Tj|UoYL^&o}Qk=%gud)pWjU z2)0cXUE&K@hq-MsUTd`>Ru@!+1G69|?BZWkkLYak2gH>0#ui{q7RJ05S7vUgWaU8zDvbSAI36CBft7Ti#NKtqFUe`^Wro) z!wq`H4UucSF*v&s7uiPt3#`a+|B_*&gRP~&_NI@4eGk3y?Ck_>83K53@ z;^5%m_SRhj7GDw-d1*!cPn1QYrr<%TWH#+S(|c7`2w8-&RG;{#9KlSS0r{^LWGO%g zk05QnGjRq+Uz>h4i9TYuL9yE7n*1nFM@*Oj%ZM7LMK8$7YM>1lzAezKrVo)b(Ga{K zB-NZG3zSfmJ1OXgnlth}NF_!#iKQSB7_wj-q<@I0Y9ufvt75v|KpQ=RI=t`iKyn-OnLBD>91u}+g z%H_rr3cy0p2^m7RZ33Yy7~+K%aLS2yJ$W=Z%kkON6PKSZ=IZ{=T=Y!BJYUNFBwniu zJV~0i6-1U2l>L@4VN?pFP64gQMr;YJ0~4A29TBiv;Gf|{yHAD8UsipvKLVSKAdo&* zn`Yw?;r~*dvTy8bH(Nv&dHs{AmZcIYG9l&ONnj5+Mmq;r01v&s1d4y-8&Mv?by5sj~^>=`ki z+h|ou%*MRyrjix6U>TgR7sIfU<&8sqRn;!-$Ifg+e3P1LSF5eMldU*Nn__X{Twwa% zM~0!^&u-K)rWyb737Ozao3RK=Iw(>&y4=7wS~^ujK3v}4j0{;Lm0!D94kDAS!{DGJhQNQoz=%WxbY2>>=OOKl`r9bqSUq zTEDcIMU2LfOKIk#4!FsNrJ+WGUk2Ufj#C#H;xhcxX@Qw0`_HKYXJxW+y~fog=D-&c z64{8k5=I;4LbnR7eC>`_UqCIb?c=Nd(w{A`yzW2 zamYBJ-i~yaVFxXf#&{cLp+&N^Nf|ICR`g7ZE0s$MWJ5o5d#?85^6-kmh3mmaEGJN# zcQZH8yw``FS%#8f^(rZeJDD}69e3quKKHqI%`TuQ-oc{`rUbINSF@!ph(Wx)66>rdf#bN_J+}+<>aWasz@ECI-c_zM+3R`_n)}A z?ez2{*PcsY#M0s0XtrXU&p=Z!(%(8&!FRr=DMvw)g51VfV{Y>Y!2abijoF!@vy<_o zNanR~&XYa&pMJ^_SFm{J>6i4+Wq3g8trWdQF1)I&&H;@uopMyiC0LI#FeJ~u=2B56Yjc!i|E;qkP%uCxnxZ)LZ2 z4CctV2wzrhkvnho02!4xqDxxgN?lMixjN89@=~jiUfe%!oI`=klLcWUhr;$)CPk_c zTSx{Q&;1jm@%~x*`qID^C!I@_*k~w%>h z z(IKZ%wF$)rHTbnGP7?;s*^+$~ReCy?F$@^dxXLMWfOYkHC zDc*!mnzAg@*iX>AW!yMw>2xJlD1KODX)qhd5#0PL^=Bu{V1=%)6DdGOm0pk|{{)e8 zBmboHhZXsfB5XM@h z!wbLOTVN5qsWqE)&2L;q0WY(b(Mb^~C%D-wvx}kH1hauzP?G^u_Q-Y2zwu!)ar#JZ zI1jC0S!cH(FxbnS?$TbL*Icdi6=QnOFEJOfHPvQ5&D-lHT!&C*>f3CX7mvSE4kCu& z4$8NSOb1w-eIzILRf!4Qjn$54qd{=iaR+Ps$vHA~>=*VeQ`2i5AS~_C{#oH!*>3bS zv5`cX`q)HcW!ltrxVUhzY%@AfB!Ct^pnbPFCbrfi;%%H-oMvVK#t)>liO^Y_-8z(P zAa}$Kao;E&CM_Cz4H0Q)q3=VJXl-hqUqlY>TJ7$tpn3>T4RO zigM&{LA))3bKVgmitT?%I1e^2nbJ;WPdzM|l^!gK@Kx^;W}25#m2BQScBSL<=-c7dyG8f_CqEQ%A_H5K0EU<;I5+o zo^*_2rw(EZ8*w`}SywXif!_(>WL&^VwlRs%$V-ze=P7f7u&L!WG=?egrqd6fSXOwV z`N`M`H+n_HAcPv&(hkg^!p=T4XRZl4n6K0fSCmm<#Q6ec&hzPcOIU|L%@I~yH!u>q zP?jnMi@tj+57^94FcgL|PbX)H3Z$DiLN}K1?xQb1d!neN*`lxrQv;*x&sS4p@sb2p zxH~x|`+jbdIuuJy+-fZ{3u2-8fbE}E4iTR9^OZqpURni`=_435=c(=XBf`e&p^>Xo zclK(rctyLTZs}if@&vvbYLSiYMpm9FuwEXE01Fevs|;SME6)WshEkV@O7IOBz=(Yo z$V>Dp3khO@`>F0Z<{}?k$M~z(Qs8GqBGieDZ5Z^Nurq4;+|sO8s79(#$|z&qlomW$ zvc7(#GBhqQfjU=24UePGpbKY7w&3N#jZgl8GBWkf)WFK+cggODd^!9RafM_~17h$c z^`bi3qRY$Tfx1}9FsvEoL&4#$!iwIR`j8L2$sDpFu(36B9eNPCX*-f*p_ealRR z(6O|bs#v2IRXVvKU0KjOS1*jCHP}X-9aXZmyW;i~_XQMN6P-d2^E9--RcN;5x%H6* z8zx*(d+1FaJR3F^o=YE+)8edML4 zBY!p%@}wTr*8+nRP8Am!7T)`&6Q1<k0d0Xg z%#U2%fUyebV$e0GVvNNtP8Hb5_JORWaZa@3aa@H-1RU!j3Zc9F9QOs&EZDYA(H>&J zHG-H?xq^93!YpG)xq%Qv^7ZmF{h1XIgHdxx-xqcZP2K>RvRUl5=C&q%9g#i25GO)j zoX3lsFX~#7pC3Xo6b1*0VV2>F0=Pr^%?wqnGHXrv)oroD%zY3vO~$mWgjHqi1#NV!XWFTfFj}z<41tVlRapr{zLW$)=U_7-h4z z(PMLG-z(+Ps%PB9bEVZ{x})GMn7_pJ_*>XqodA4hcD!RL6oc-|QtHq&LOg7Rum+Ld z>DMh&&zlFAHOU0;f@Kh}K%&T4*kP2$R>Eq!2WL7k_eXHnq<7LJ&)efr(xf_hf$o)1 zozPqq8HD@@c&He%Rc{nUdX&W2gGh(%nKh18T@Zq;_pJf_#SD0a4Jp5n@2|&b0oZ?2 zsy2)ZyZI-sZaXbKLx>kuv_IYg9usdqM9;s9AH!&>2LeGNCJJMSjZxGsq#lw^fA5F6 zmHlN(7*~DJ@}qdxO7*Oh?p~%6G=)Z6tad;cTmHS>zr7RY4&e$pBz=Dm-)N#XB1z*b zxkBTjKgrE7D&i64T-95PC`cq#>t(OnRNC1J-F$(Qjq8K!%x^yeIaLE3u4#}TanHtgQeq%<>CoS*HcgytPrwBcq{~r za*c2yyB%nOn5bKfNi#IzA!2&RlN*mNSk#x>hZdz|;Q%JvqN1y8P!kT{%zmV!r9WFt z2qjR(+Q}JWm^7TxA5wl&%Qg>j(MjYfRIbFxRgdFl@&^3{o#g=JB|1w2aR)L0@(z)M zlSc(TLNEqqjD&g>w$40BNf8-ra%0s`tQtGi!5EmP!z1mej?DTf9CH{9xnUCJPK)HQSz;7AJx(!Q;P;|NQ#f@1 zU+PmtaV@$jUDM$m9nq?($?^3*SU5WA3AwqMGRHA;aSF}__{-~9Xui6NO5C}KME?0PVyN+dK2hAP<5A(6#5~z)S6K=QzQB$dDbTa z^SVBk2Qv!En=qHk>Ht#j(=Y5r zcpTc7#iu||`;ui0@y_Jop)zW^PmIc(giXa_cDjEA)a*iPZID5tRKOh$M)ZA9UGDLV z>xH&%izUR7wQ;DHYmIHd;2|^#gXV4HyG|OLxU$}rIEG=Rpc;o0iAUt8#-(naj^ zQP?$zlXs<;upsIZFmUviGA${3ds1jxwU~=BKy7-Gmp52d=+Gg;%}6HfmT^OX8X&c> z5#=&5OEB~`wlwL~Nq<2=wGb!&TRJ){3%Ecxc3C$Ct8it3+DeHLm`W|Z{n3N;`Co|? zZU#hm(vM+bGh+*Cd`9`tZG*J(9XBdCq*!hPrNmy(AeGDyIrT6Q*gAB6HDKYv3usK$ z!y$D^v=fImA)aYe{_15c7F5AXi@N+5+MiT-(Si_iLFCThw2~Am&bOGDYI)Oo&5HV2 z0?Qy`0q=R_x}fGST9sPfOn|e3eS#vGGl2)KvxhBc z;9Bto)!UPqEfS)jbAu<|e9|lo?aG7&LG3tb=kgJe`GPn;;txY(j3~-~s)~L@RMQs| z@jZChQ6zC4Et)2R>>+KcZ_Z#V=n{}GWrc{XM0EBaNYNIaGIDUNpWR18h&nV0s+HNxLs<0F^$)0b;ApqLHg2C9*!Jt_C*+n@ik`ZsWAw?Q8hRD>7* zPU=2OdNbQsZ9wZ=$(%QkOrESYZOF2*1nNW3j7kM7X~lUA0@&LWbRQwYILL&_X4w9B}H2HoQ5Sap{6kE00Fsx7OBe&t~tc$DW0En|b6`T~qp1wn8in zl1I)yTVIoWwpsD7Zpud0p007p>}K_KnSSft<9>4uxT@lXZ8f|*h?8Ln#xfGcm|i!@ zQ>>_1L`x~J%OWuD!cvaNr{m z>?4{V$Uowq5UjlBdpsEInY{rG%%1w^qHz>?MNb+Jq%S4R5gpHGf?C`6<70wxAAn1@ zVpE4Ay_Rn9^4~2{3lAK6_^Z5OJB+6pe|70rUVs1d~0R4^}P15 zp^p?y{tU0y|9+ixUE4DH{EY)763m-!^7jq88VQdK1or((PcMI06m(1UlF)K+XV%|B zp5o(}<%2do^33C8FJ##MYi%#Kk`}0P$xcnUuFg#f8xnoF3Rq>1X$EJuH@>@dys)m5 z8Ic)7dVx;wHIRK4a4?Af(R>G3LXs}wS#MDJyLTC-QRWdG+#3S!gi(G}4PY1~OeQsG z1f4wJA3(F~+e_T%20W+?f`}V;m#Gi~gee^rBK8~BdQaineDhxL^9y`oX>0E=r41zk zGc;N>cW>4_xowDHP3vluq>@Ktg z;|>(e>K-8@z(kM^(37MFTDL0P3>vxn3s4V&4>A~EbQ|wpop%2kYB$tW}JyutB(xnS1aYc0_*D2iV}1P>=w7ioP%}w^DvuJ`tk@HJQjWd84Lt5Mom{@*44`hnB*8IULhh!I%@!sN0TJQm#y zUP+o@m4x$vj|;krHxVe2l9^cg3Dlx%J3@fDQlndOSVTSx#7fCqDL^onEm}AP)Bu%vOB?IPI)-A27M^pTJfI7AnVKL=M<{KO^D@#;n6J4s{9C zGqVXg#*x-wzgTo9pV)A%7cjljsO5$O4el|)JkcACMa4HkZzK6>bQNL}aQy8)ZF&7M zGdrI5h_ycifBGS3v>%}($HROR4f9u;YQRqu^x?qTeQ?IgQ)Iq`W0+0hufn8zr)^#uISr=0D})tVr; z>m7VS9Uk*tKzH!Mt!MN&V3F4EvbQIp`~K9e*W)ClWDnx&sB0F@O25f^aG^I2=8$NR zs4ZkhRzE*tR*G1@7g`#+-T==rTD_wShQ*<;W5Byn6gd zkX|cMm#`AJn9ezNu)2o@V;=@zypb#U&S0zFn)-_KsebJCW8}b>~;r^ODHeYDm=?wmj(5(REks6FF^4<@QOICiJGQJUzxHJLAiU6DzRS9^O^}g|eR&cX$A6 zA^Zx0=`aF)G}6;kzG?Fc9|OAYvQlpW@#0Q)>-!ywhhf1K*q85_n;o6Vd#m?refSXn z$24!I7A9})@;MyW_B54CmhDZSGWDZvC12~_za`m9u0XBG(B7*xE0pqhxUy#}q@*iN z2YEe^Wf)ujpe17LIAOSs8&ItK4#`(3-7~2cXHxABB6PvFbR!AD%}vnMvR_KY*OJMQ zKR)e7iK3Rstx#;nDi4;5@jXd1-ScV!l?HAXAhzu5NLHx5ZPB)>g)h9(VMfgDeF}vy zL3g4LLDA;7asWnpJn=}L#?zxMb;p@2kM_d7uGP1dfEPHl4smhl?WRJO)0p`@?n6Ph z-(?O|gFt2HTIGXDHdS5~uqisPg1=Hp8f=$SXxt5`&y68@k4C7~!C#KFj9=TiL|Upw zQrWasAy3471E0&x_@`ktb5>(v=OE0Be~rVRzm}Ak zsEo)F2{43CCHy1qSkA{7h|o8}&}YK%9YC4c(xMFX!uy`bckjlN*=l7>2M*pTxS>3O z-lSuJ3xzU+z@iXy>4x(343_GkM?~n!4+968P?5!DFS2%Cj zsV#p$V88EH__$ik9?D~XB1YA_f6Qfs+UcwtXuDrWYU6*LfXMbwhvWS7Kfd^Gbfeo< zR5|(PH=ns=ZIuNk{DT;R=(v{viuecAzF#FcOblsM)K#+qX02hYq%%{%$XHEk!2lpj zIUk{wuT}jd)I4NlWizj|5B7eq)~rUWIwvKHsQ9XG^0jk6eOR(e@Y&pZ^7@@i?sb^S z%xpgGu`|PYlAWHtc1xbt;+8g2C*(SqoR~P|G<=^W!)JjzGq%fV9KADziujKDTCKy# z8${`V;Y2pq0DKT55dhTG*T$}3@QaqA=ZQLwpH*&BDwVrRy9V~$*Y{*&U>Lx~T6<6D}?hY8mAxnunW zyyAO=cuXx)^n3d8@7Qo7-Iy~+=fJ*1ov&jxE8nzHJ^8BpKL252-QPf%D@rLII?Z{9 zJ?F&~0DI~fx15@}n5C3hgKn35qp;*Cc4F4QsMZfL3g~HqeHwxtlaZlcfKb7Awy3jU z>rm=^1NhvGA(-Kb>w4YycLZU&95QhSY|$K+NVMspwys$AJR`vkCet--{=PIuL!udD*3$IV>k8*zZ|8rT zq`8IUe^R$5>`zJ`(X&)fS2ZbW8V{4$k2G(vS7&p%XiB=e`nJ%LS~)9aFgrL;7d@=4 zwD=nCxv*cs@!QGgbC+Bop|k|)ld|&KD#@Zc# z`+93TTjx0KKDR<{iF$Ui8}afc(Gc87rL$w6KmUfh%p8U1SpwmTcv((EPuSqP7beiN5-%}oOh)|>S zY|6+UAAv#sAsYeB(R{vme*am-9e$7>_h9^|sQ) zSANha-u*TEy#Ssn{M8~zNjHw8E`e7ilYQ#UMW%N(>t_+F$$qgqnLex=Sw4(s_-YhQ zes;YJ`>_~`;FsrTV0qWCkvvR(8@|7$NV)O8!+$q6=WY&M(~hV16~)PFrL{bWr8#{y zRygyIF}r&2`DQr0-CX`*2mDAbl9`&9)#@@0G@htenQa64(i~onsryqhJj=m%vMu{q zM5IbjU1&R)#}1xXh>XIBw+x~RCc4a-usck#M@Zo7g@NGo{s;!^uxnJl%h3#A_AbMC zzge5{Qfz_#*)YeE@~`kjPx*NQV*JqQsQk?75GQ}XG&xJ@$Zmgfp+<^;%|(qMQMnXA z<;G_>nFdmsyFeZbuRhOvA|3IdoF_S;H)NL1GUpzqbJ<1W>SynJlffy8?&%c2#CSB{ zXNtkDr<&%rl&VfwHaR7e%dp+lmvYDuE5*s}JD;#WyOr2QJxoBius+E==WsSXwmX4CVSCK$EZ1YAd^r#gu4oJhq4NT zP;W9wCw?d5>(Q`a(PeG;B8~ZFhD$ELpb<4cWqR`U)tx2x$wqN?#PU=y<#6}qlBg_) z8|iT2Y2-H}cPK1ptzU$)J~xcyG3s>g$E?Ti>`w56Wh1veQ~FJFP|+4ZFtk9J?rB)z zP}}~Ua=*J})*;LOU>mneJ?T2JCge1qmKAlmX_6RB@Oh|RUT!8{u;t9;;G8AO8OP+i zxjGp8jhJhKk@9B|)YQUPjw*&aB}rzMrA9>H9`Un6fo><7Se#LN()UV=mf}!(vdjM; zj{MkBJG>s5a4^*t-M}76{qT6Qicr*^S>-DX6h>uP6ky4pVO-`SMt>)jV}cbrQd zWKmM0FwHX|Pf1cr9aUfciBj(?P`8a2sC|U|JP2^!mgp?Tx{ohw%#zdKziH0 z?nTyXLGHsGeFMWXSAgW)QJsqOQ z7`Kf#%|;G4nUl&!C#x=;_IPmaKr9v?gWj60bBoFvs{GchlXjY@D!gzXb9mo$ed1WG zDZMnxNN!=}P#=lh@4n*jo_;~6_Yc@mkQ6qxQ6YX>LL#X?36`Ctp=e{y$Kjaf_oXUw zuBXjP5W0B5)upet0r7n-7Cy#BljW7-JJ^v z4?r3#m1>7DTqkhLdU;1KUdT;;%e$scm&Opv8W-o=DFuLs_srnN5KJn(kpA(CO3(BU z7WR{j%VRa6%|~XQ{8rMUFyUv;F9tUS6VGobW47W6Ncv z#ZB^=nj`YcIX{z}5%5qib1Xfb?hE+JH-(-r={L!?zQU4eY0pjk*SclbyZIHLgBuH1 z(q=^bd9Fk0>-j@*-QbF_WBdO!E2EIHqY@A~j+y-D_$c5wG`QJ>GWgm$c2Hj_qb; zR>U8Tac}{ywByH+jU`EZ_MMy595(+YU))Nr!?I_E@=x?F@jUNPmEdjjVWpo%QIHBV zAqD$P8%6(HUCGt^X~{Fg8K{{2+f8ZOg>yxA`~JFk)9P;j&Nt0ZJiu;zl@g`&LB_-R z9PV3<%h}f=4vK&dbF_0b6Gb8h;%|=FZn{-EcJ|{_DFMsUd`zRK3UK+h|(^KsDlqMIU7vKNb&}2GP+)bcTVymec zo^?iCySCwV(3P(~8zENjj~T!(K&s`w|A`iW;%UNXM`ly_h*zX-A&Zf`Blc>m$v@f) zx+QMq*`%G{y^asaeG+CP_|P|nG2BxGO8l<-NDg)uyFnhjG!h_+-G z(r%_|K~(F8ORlC7`9u)#YW|$%yYg*8bo$AxQk^Vhb=YI@<4AJIxKU@v`Su3680t$? zs;L(97AvI9kTO0Op|cb7HX-=o)!4YuKYuqcMRE5>wwD;4l75Wsa|}c*8|rp4EC6- zBGl`Y0RFmAyrX1wR0?nc>f`Z$-fR>QEaF^*HZ;*IOV(7P`FO!;N7Aaq?4(?RTv@e} zULnoIe+20fM{P(iz3@iUNj_c??|SB}UR0&!10`zwLjR`0JAMa~iz8IXHuot8FX4xL?v6!DB?=Z+X%zxv8jlfb5L{{*EZ}r;?0Cik~pojZMExuze zmajI&r?h+4OstMfI$d4O>%2v7l-1`|LH-b-uSkCl+={ zw#&_}=1;@!czAf{b=MO#fsdW}4cA0BpR@p|eKF7;f`FgjVH6^ga77Qe-tng@lDk3& zgt*ePNN<2u&)NpDS@`+0CARdZLVBlmBriKFzS<;Rhr}Yi(B1o_5hJ<3p`Zr@V^ZHZ zLpUct!2pWcV6+Czgn5euZOB=oAW?!b+=NV3!vDgQlddD=9VOKgCG%nyJ0J&RAp9VS z+(-gd?=sZP;yn*-{a}{t>Q_^`iYF2&eZh@T%~`?S4@lu)3U7pty%^*RZ;qhQgE3xb zlQR&s%BTJ;*NK#cvcSS<8#ocLARJVKEsuMnmE#uE)}3<#&||89BryPIUkQdL{y#Y1 zd)WwFKFYu!tU-^;{SJI0tZ14|v&)~`4n%)$P^+s5DgpF{9LJ{swq_l#kN{}qJUvbG zx2GOSd7b5B%aIC;ov+M#anVpkc;I+z&g{(Bd7lpAG zdw}7rbgS^be1FOIuiBO}N4vUHHAnnVDFL8T#r=&?h0w)lvUOm=EnoBZCOo}fsB4_- z+#CL6x$EjHaudSHpzEpvSo9sC%IC&;c=m`1g#s4ZYA$$9m5| zbd%?4t|uyF)e2EJfy}a9#m>Ud(@`x{;{`m`fdc3o1>Vy@sIrJEHm?#tZAA; zmi`;sRlMLs@nPzH38{I|ly68GK%QuIha63T#X=hb&A@CDR|VB+;$6Vv9gGUNlKHIG zoQtv^2uDHIP_-p|75`h&iuRn(!w2}^0gXc#o=__UFP8IyP0iv5n_0vPY&7W$a!Ygq zeAv$s3bqjP-<#My5cR&J*yDL+P2^G57DS#{{zp~$)r@LK<|wn=n>pF8&%YOC&*0@aDY6S6T6 zhm9a$KP&V)u-WcE=(7N~Tm`d=7205EaqE{W*KP7med5{ylitr`y;S|SqR@k2hKmUj?2tQ`U^3!M$E7r{| zB29cotb;pb3T|l2-13i2udhePyF&7fGw~YuO6VyHy_?|EnhEi?QR#(zkd#4m2=VnG z&>C7O9YOYI z&h^7bbt)9oQ+cXId^WsIa$XqNbHKA@%aArp<07Qq-bh+NUQ|aOz)j-sSWW6)nCs%N z!gUqMDK!4eebZ7JMEC#c!At?oxf-N9=p$1=xNB<}8BWC*xK4f@HsH@xu$UrFjl!ym zBHWkXf2iLEfkn7ed6YWUD<5rL{!f?hYjNBP{f}y`TA!NA#OUdNkQ&*i&gq4n0i0=N zFffxxy8bxpIQ}z((?D)YCJn=G>IC|a>HcOBh7oL(pk~Q}yI-0FhXW7@Wj2}TPZimy z^aMFmSDzJhwS8b3h)2pMmyizheNLf3C8pP?mtedbk7F`Rp+m>< zn238+dqS9m=e09d9#j_Fo>n=+Ccb94!lxh@QKM2MCYULqh{bsYU2scM7UPQttKK+# zu760k;I%pAY+NtF^gwA`*N*NoID5j0>S8L2N*~&=W4uctyr{04`tl*RGcLRejqb|k z#9I^F?xzMHAE_^oNf+bGiFU1GyMy|06ki=BZ{T!@?L)3vg`4)&JE=Nx`EQX-XzD!e zxy@wKJ*_!&k@eX1zldv7s?4#7_+z5hC@>9Lm`227yRhnk57o7y(O^yDattfrQP$lK zG1Ev5L`hS1<1J6MP#YwzyMtPS;>>)$q%O>NFhw)kWiSOIfupV$_1F$?l@=grq$;aC zo3}3@jlBI_j3eN(d@yO8_{aiU%@Qb9vHI;;QVS=Przb-%kgE9RKT%qR6pD6Dl+tB4 zj3PGUYD9+<$agMy%Mt{cb=&e@KVj?Qs$#Hx7mX%ZD%x|FLCeMHG0!gEwadkM1&Njc z8f*TnkBb$0r4P(pgTQM>#IFVS|4OSj=(M2&{Gq>H_U9`+lO78`DQG2Q3qd~fnHRJb z$DY6kY7y&orAZ-Z@z3LnTEd?ey0`t0gs>5Wy_jPyD@(Dp!h{p&?u9)j@E1Ox6F=wu zy7m9EU?1vti>|Fuoda-h#9AG?70CjN)e4_}4yJjPdE}*bv50kPX!B3je$DB?NOvvz zR?qnoMz20Dsyj}Yp9qYZchO;`u{N$r8KZ(l-Lm1ZPWLZ6#d`KK`nuS4g?wIERNBVw z{3f$`m>W%2v&rMT*g4tMUip+}cDHXj^=Sl_25Jy&>CF=Ja@OES$3p)T;;vvd*-7DX zR$A}PxxComeSQF(bgTH8nxOjDqgW)SKqIs+Q66{vVm|>>{^XeyZe%U_zLE$L{nH^< zrU*5}`iGNPdRE__SiBGTs|*VIXlqrm>*&}vNDT~9_f$d-0z2BI1czA<3t`X-I9&P7 zO?Ld<^!__XVPS7QdxY8#ub0GRK~B!Z&8pH)FFIG}6Ajk1Vu~n?4{%W)1U7a>NE=Kh zS?md=aKjQS7k7!{>F*Z3N3Og=hsL$Q*x8Ra6Z{P3{8p+1=9YYZVnNN%;ucF`jc=#r zc<9%B7w^07c(&?ih`{qGTNu3O&#`YeeMp1ij70N}G!Z^akB4@%D2S{Mac5&if)~}Jtrxn_C-?W;&l?16I8dRg zBP%dM|3>H6v13EBqE$RYy4MMALo+{n{zi89_pRFtz=^2TY7yMM4!~Is zZXhbw^VZ4fo>U`%YA;3y0J5zrwJeyn-x$N3dBEFDy!QW1ug3;>4$RF0z9a28gMw&8l1@6q*bY6hjkP z8gqbl7O$1@V#3;}To|-rm)Simi!BKRVJG|cFka9(@T9KTxY3tRPUER&}4h95OhpqdKYSwKTG zily~j3fXmPTS*yLmOTa-CJE@e)_Z#>PvH@TEOTq}m`bgU~9}CDo_ud3lu$x+fC*S`@OkfyVrJ>Kx^pJIn zvoC{LUW8mm_6CHk8zjm%K$iCi6fuT@liUy6{{pjA9N$5tRe9flXEhKwgn(A@`_yV* zFi?g244$z-LQ56Kej)Btu8i#rSPrjLRHwv>BM_j*d_(rpkVDi57z;BT;;mCyKb@xl ze+VG_$tZ}HRWz`JUwku7=klw&Rff-&*H@57ef_xTN)rj*mN+O0xDb3T*@btlK@f-1 zQLIxjTVm0X%!sO_7{0%?OZ@7ZphPQvOD*G^=G|f9EcEwNM+GqWP<=ktAj#2OG3&wtnU325Y6E5DKxYNgc*t++Do-=d3kM`lKH$|{l`HI5Rr++B;g^qBm z+%-1n(MXxonm&93ugtb%Nwu$A^6H&w0d>u$JK&bi@8jXe*Jy1-djS+(XU#8-K}dMZ>QnYQx+_S~y1yHJ6Q}QUV%L|rZ3p(BTj0BV->2dKVeKuT;_9-k(I^rigy0Y$ zcyNMikpxR{cXuh=Dcqgl!2<+$FWlYT3MkwQ*8=M2>%O;Nzjy!lZvXx67^`N@nqwc^ zd+j||jdRXgw%+Iv-DlU_?GK)$FV1Nc--Atk;6}DANY}5StvC=>U$};CIr6oNErK5G z;twaaMPPx2Ucr#tA5d)(*xCS3!%fJec|WOM?P@ovuoLIc$jdSLaz_#EqLtNwPgE)g>4z( z=<=*!0Gz-!6CGCF?uiA~MTHf2c)kSJ`@rYgA53i9up!6D*Ww)yZnoYpA+l8#qUdcT8sW5Q(p;ZK)~3=!I%p+VNQA{u&`CqT+E z^7>k`!;>0}+}?r;v3Yi#+Wyc4eKfT7M)_--F+aF&`@=EREAbi?S%|9lEDqX$W9XXv z376rgCS785=#2|n#=b1+49r2{7^5l*+(1**{kc|uXmVGF9OIa(skT=lZ2nE z_yBHSJX&|tpn;uM;X7KKdRJN0us8_@@Y7hx*tVfT$evx(wm-bK6%t4TecN~kGwcu~ zgRs1M>J`sGk1BM?Rs+<;7C{3(M!If+KB9ozp22MVntF>|DZu#s+_ygPTxjci$OF_% z5bRA1d1~be^?C-$d~w|c^?CsrJ7Mhp>7mG1&bs9f4}^Nrfy zUwyjj11D>Lz_oqaUI+>gfC_$FnIP=L4Etuw^8A__%4}YabnU*m*xvFI;^G6hwrxX( zc)x*R`oe8Go;pLF6W~x#K`D_{D{0@NH9{{r{3kVT}6V``@ub- zkMF=jZ(uAw@KordZ&iC*0VA6!RE^!7=Q`d7V-4^YlJ5s9^zg!hShhb6{L`^WZQIBo zppFM~TLc3*Q-8|?U9-p34{l(4?ZaR8{&U^IjWm=wljT+rJhbx(U~-hlW6c)1@#cmm zdE1WGKorS9G_mk4B=v7+?gtlyK7Rb`1iW8d=RnI&xv<9gS%d1sJXWZ;&#czjR+x?# zLu#Rq)V6J;kfwG|ZZLuX;*9}|_J_0o&2wKoc`iM*juO40Xl-^FQSKLTLULzLeAvfd zK?%wfMJ0Hp5~W}rR38vA*c%(-;tNlQK5E(`(7VtCA3zc<^o zDx|T2x{AC&GPfeo>Fbq#8Ncm_sbK~`T~ zN2?LmSF)T8KwAkQg3uKd*prs&1Gi~^ptBX~&89)N{Jd4EGNom!`y8fk`!wmC|HH{% zLLbq=ZO>t3Co`RcFQLTUU<_1zoA;{cCcZqBTz+uXj=$y@F~s{htPT0vwBy0a);s!| zp36%vxg8$AcmK00K2wRlN5ME!Eia(w%~LF0={A3oOcfMx5A1Ic`Toz(F_ z1s!ti}b{X+HjdBa;F=TK$5Iqjd+eCJvAnD}1eOz9NtSH&qiae7P>6o zVsoz23`ZZdKl3&%ruK#C!L<2dT3%@ z&!?Qn5~F-lu1I7e5AK0{da(L)$))}((CoN(bgFWmCiR6@PZ>7z?N{<}V?~$i6t$cc z@q)el=s|7AZmHm%cPY{Zz-Lt#f_QQ9E-sh{XyK8XA20!RxMUUzM3cQ6wFSPf#rO|R=PU`_(Idk`eg>&JyI;i>{d$QZ>)NuBxTz*@u9QW0qJ zHOaq3!JBjfc#LV9B2vuVJWtQ_OF?L~KHnR2scZCis8)jNpV>Hw_P}`9t5dDG@)Z+~ z`V6!_Dv)gB<*AK+;T$4FwvgMTxwUIBlQ-E!zU&0}V(^?T3^%zP*DW;fXO zBwwbQL{}P@g$Jdy+NMBay1v`w+v!PCUgn%vjPwGpYWba~b8&IB48$EPZJu&5wc#)MQuWQ8wELduWop(DlGSj(BQb(j zU|1)!JW~2nKC=7zOT_Ctcr9!rzCwTJ&X4!&Pf#LTRbT|XZP1s#Ms4`2?;H^2&=d7I z2%vTS)cLpBgI%%jYq4|7N;lq|91M*sHy z=JPZ*9wp11Bcd3q+gjvZ6V}&5u~(Iuy01bhpAt9t^?x0DAQy=yccu)QH%7PP0W*2M zP&8Bp*HIohI(0bXkNUjRIl2!`{_<4BnlOacoj>xWCenH+$!YgcT{Q`hf4E_e0dHk^^2~4vUc!s;qJAB|k$Lkb z5}o<^PgDyr;cEPm;!S}|R#iPyzl`(keCn6BS!lGvcZR6pdrbDT*1cT3e`NbE=GnlG ze0iA!^GEh=Hoz6&A*~A^gYnJJM2Fr(4nT0>C6haN4?=NJbAc~l!wpJxVq(qH@~7`23L#L+krBF=8WM*6&N*|}>yE$sp! z32A5-SB7AKMqwt$s6RGipQSKCCJ(eymu$56X{-00R`HgfgFa?K%#d(d*%~Wof^gI#2JmW4N=&XoiEy zXd1$JTgV|wzfQG0b+*9Wa7}WS;n;xfn?ktsmBFGoR{B`-A6{drFft9!{B-_SZC^01 z%}{J_jh$!KV3itUI9E)qdCW-B!X~6-;aGRA2E|l?g4K=Ayt?$KRiCVHwzE@q+nFpQ z&+W3w@&r+Oh^)j%H{q@yGSUup?o&1nW?U}G1q%MYG4UTO8#lfUpum2vK@@8C_L6jp zKArJn=hCkvw#Ej3mL4B4nE+P$Y$d_j-ouSRF{QL+s!>JS%29WdL2N`=Q9v1ehsevQ z%d7LD_}-kT7-S`i-sHE@+ zg+9>mBF>6Vwl0@AMuLou?$1&=M!H*j3Yc4k$m!#Z{RDRGLU1YPhABm9_q{ERgw?g5p%P9eXoeBtp9Q z-Z(Wu*st|>w7l7p38XTH$}p@k7~MsznKF-e=F6tdd5myOk&cCVHz4V}YD)|aOKRT# zL{*`RYZh#bh#j?G44BFY@h(KgjeJ%daX*4$riwwIOT`bMwT$$WIg9vI(D}OvfQ6(O z*)+go_Uap@mYT|VmbS_Wb+GKj)%+>|XVD-_ZcCk+3{4wvEw+*s3*Bn7H1_$x*awg( z+yY_D;Ye-Hyj7>h<7l2z965%_>=rI`jUg%}thVWr!JH!cz&g2n&^M@`xqY{}Q6^{GLN z`FuG3#ei=aV+t!su6}EHT6N?Q?-M>Cn}9-#?g>C%Q;cy`WQPlyic0Z zGrh<5X3Y4B7ogWiq5}HU8`rnh0fQDtpWRbe9L#MLJh^K*gXrnzXtu*Gx3o3=KPgaI zmc8wW(Ce)OEZxONv5>HcSBf7+FU~E_X!~2hbR;y6S;$MNOFtVOF`LweCmQm=m<>$i z&vkJz(^eHOBwko%S750nINrQzaX6fuU{1BIMJ+8%BFL_7l>g=?aTkcVC*5M$W9R;{ z2gZxE{=un0R(M#aWK%S^)ef$DLCLm+t?0=}cU(%EX?R`dP-1!7U);BHi)C)EZe6@> zjnQ%zAnj0Gfp88?Lse~FhFJv+a-I@$$!tdv{+rR1*CK{xlT~%ylNAdOE_vbHY^!ub`Hs&VIIR4XaD(O5aMQ}#Dy}40h`B-do zWw6z)`xuq(QHZ2LH9u+U^6C6xRG&$G*a#ihT3xc#Q-%n%(H}?t4#>jIT-Yi$b$t0( z>l5mMrY-^kO;&6Iv_rF2XeOIR`73;0_d0hccaxW?l4RF}&r^1fWCqUQ9vfBMe-e8q zgQo2k0J@2~mqJ~+gT?ziwB;PL%No;m@~Cf>#ZB=3wXdc*vCcn_6f(gye*9=l>MpEzFqb4n#mQ8IZrMv^4e28Z2?@9(30qrR2_x3Xv{fQmtF(SrvC-`6 ze&8+V`Vf1BwRgpcX?+`Hl|l&_7}Gbh50pFz#mh-+6d2Oo<=ppTac*EyBN#p_9-ig9 ztm8&$l;#+BrbR)Xjp#PD%u@K%Tvb#A18Qq48yhz?H?@r5GQn_0(ig{Dvfv9?$jH+p z#i{i!_R7jVdDmPCO+(B3FpQ4s4*w251>C~e8d^0{2#I482lvLU->;GN0er3Y5Yp=3 zY#EL6VelnMxTt@>JdHJ8Lbg_}1o?Gj&a#(r4c2Xkp0NBiPH}BfzZJf9@Jf+IFLjW` z!|+Ko-rz#-kx}d@7lfJEr^$a?X31*Vibk%c%;~86I|7!j5$y(Pf zWiyP+Se7&aLnGt+Za8c|rml?KOY*j?u;5$Wo9jFZUYokQA|a(^24~#}>Q$Bj?!)Q; zDel3Aa-IxD)+8*MFKx zIY>)uJmni9sLUFwaU^(FTvQYbq*%zv%+##~jL;|mA-$1ugp=M?Msn3=KW3{_Jocop zokH+h6)?<=of-FUJb3s2EQWg;c`0~|uCu$p)&M-@$1d^i-!kg*guPu`)Dd;{e z@b}e}RTEd^)ol0{7>VPqZ<;o#xfyQv3S-%ZlkYcUiv(8?Zsp`zxALHTLaEF2$Ru4* z<$Ja*h7JSj>Bo`@g|Gr58no)U;z|>LwNH!~QA*+#8b!1-OVFQVh{DQ_pb4>R-c7Td z$Nf>dy3{<>^O9V&ozN%;ycNW60xp~0>{|mi-bE5co54KZ0bNL}w~!w0fD~&ar8HD_ z;zv67=&xU1&R;f0I|ayDY?^mDod&HID0W5*QR@AnUrOunyWKQ?Vl zCFD2gf2SH!mc3Nc8I0B=X#o#gY|W~(DLiVjXxiz3}Q!2TDzpm&z>o<*aNJmYQaqVZxYzi{Et;R&#|%8x~EXR+*|xBo<8!r*lyVi{gh= zP5wjAGHo0J`VKbhQIl{4##IKDiHIL;Jb(h>&ox3nx*Zd+S>r%g6J*lD=KHyARkygi&G z;TwRY&Fh23M_1Ohndz$=k5rH1ach!^N7pm4*7TY^0EO&hlUSL0c%i+Nn?da!^;Dlh z>g~>UX1K)=#ZY)Q&0d95i;45fT3S}ihDXHCMhi^onkg@J`5K(b%_NB;4E*}a(Wp5ME^8~$)m zUUWB?0Q{;F+^R3sG%(jpy$F*!liy(*NKQ=pPCS(%^Cu)`vPqW)g9-z715CY$jZqq< zF5E~Zxu%))mBIKE$L3V0#hitiGSX4H zK9ejRy(wOo5I$Yw6RE+0&Kg>$%Op ztoF9bn;kAq+Snj=jQ5x35zCMHcbPFl-0x^%j-&IX!p^7#evZwZ>%uY;q&7|`?JZ^bH$zOPmJ_hngonMMs!>;JT*LY4OZu`kA9u6 zhww^tD~vlV(N;9%Dxu?@oq@8{U5(9pz*15Mz;+cAF1j4vi+dY}hbO37Q(Rze9-X_YdpA4Tn2Vp(kmRJp<+va{ zWWuskSz_(hwq=;K+T?L?rkY5mO{%`8T?y=IVkl*3VZbl*Ff`s8+*a0B6|Au6D;nR| zFAi5ZKHKq>EO9@Wbe#q)-Xzt~5Q-Zh{B@`){X8UBQ(euYEmvhD61^4*u%iX66yWn~ zVquYpAAFM_nA?MzE zQ6SrTG}fwt7ZuI>=ectxwAqG`oNjPL=%bjMXmK=1=92r4xKKKgPgY0A#Bi)|6^Py4 zvCoBd$!1q)rS)JU6)6gnm`REF#K%i2WURG=?s6H-=3;MRA+{3f?||u8N3ikh&SZGs zzEbgJDZL=zu3J3e0+!BHO8IkwerrBYLemJfYBf}P8qOU-u12PnR8QM}8OE+0yb{tkEdG;%)KasQD%KDy0#b`%v`=DgL}0hiIA8 zA;Jj0MXb~v0yzJ#*PMgw_F|OfLy^>+8|r_y#p0D4_&2#6@N-@I7jP!BU10K@$Mj*j z0#14LX-FKo-DffY9KuMgRG!&D}A=GQK{t!w9YNKSVy9zX!!xPSnE=&%$a$PFNq<2=yG`E z`Dc-SWfsgL<@zn1@1=spg_ph3_UX2@5@5;ZBJS`vE$Zi?3^jxXMO=zT7S#dbsZ5hK z$TRNS{#$PrEk=OSrIA)yC8<^B@lJ}fh5MEY40`+=4St!j7gPx5vvR67TBoOSo1_gi zwHkqo)T+^m2coH}ANwR8uKW3iJ-#6dZ`orEt>60(XNEs+vs^|G=esT@)RHL`3u$hq z4B7V>H(!6kFj%E!==Pb>SNu21X4sH@%hp!K3zbg# zPuq9zU2$eR3@b>v+Qn|LfPOCB((9P-jN4v2PN-u4{+dBhw)|Fc?JfA}ZF`)ClxnRZ z^|DRIIlIJSo*~Y(t;XbSPKqTh#4UYSE=>6LCQh1i?^TcA(F|mm5L8Qmnlu#Am)%jX*g&G3V_^Kij zcS)@>(uq)y_~5_*e2H-*sP(SP>Omy2R0u+Qx9Gu&jo1E7?Twe(%lUqlH>qo{UF9K0 zpoHUcC`Vdg`Pv7qXF#*e*VSuYYK&DMzM;D~;;0uLWhfoU4Yjb$G)|B*VLibaFuIKsFy70$ylh4>;kCqL#n&Hl?B_B&(3epz?FQD&*AjY;(+;oxFW*?o(s#XeA{fu>w5W)4!2 zDc*=VtUIpRhBKEU+v5%-s=dmYePKcJt+ZawlEvbXa&95PlDueD@ka1y4mX??Ax#w% zvqdOh5-fr$@a6#eSq+m|kFx*rhPwmVUFp!DejXDUD$IjI) zHpWqCFFe=T&HNnPTWZwyWO|jdrZA z349FCeeLL}tI*gwwmp+mr>RFF<)`)Fu$1nx`g&@h4H*^)zxX+V%)a*Z4DY1n9bP2@ z1*bzHO7-Mu2ZT{#i1^%&Sx0-ryai$x=y{wv!JdC1l>3O!)0X~_H1D18Ft>o9gi;a% zs@DF3nS;ioPyg{#^X1%!V6k@bI+jcKCAu5p#sDb8!|x-GH1cCcCvS`$s6gM%DBc?U zMc++70L`T9;bw@66rW_K-xx1?%K139SaW@qD#~kQLL`c2e2`(7EbQ^y22dm-*LZe{ z?Z7EH7Od z{PHPWi%83-HzM6jNPG6>{}YPHONctNu^5Ruvaw3kqH!tJDoGh;4SU>Y45Lwq>plp} z*0EnbhE`s?Z2L#ll6`*jdGQlG<6Bqs_zAe`_)XL%OPFI{t7YMu;pa%Z$u6Ef{j>{K z8FvC&!H780-XEA7e}exeugP$;sazS99ExU^=8dULnHKL=_w7~d-vNICi1WsRo@nos z;~fy&vn~{{B$8>BJ+^N1In>U9_2Gi&;X?6l&+cw7e>*w5-YxN75L3RBC#B~vTa2un z>YCrvKfGXdb|>H$j7TT#mBBR35B?{4H(dInhvv=z+p{vI6+drGd1|L<&p|rEj^NK)+ypbR$3rM0k@ftXw+G-+ef*?z{oy1r55bHv>24%5|TgfHnbqdk}37? zpUmqLa7FP#39NXA*GVzo|2>mNl{|?dYUr|et7zTAx<=aZGeX{@ubCLZ9hMQX=)x)~ zWx5F)WUS1;MWg6S`feNM;ElbiFQ8j+yd5?=Ob6=!oPMwqih6eKy%|<&;CHLT2~YW` z@Uw(C)=9X^`ui-#KqI+2H`PIq(emHKjln1_-b@C5`z;SA<0=|e`b=cZ4$Q1~f34oH zh$l=M@3xW;8WbL{hA;OexK$e)CPxyi%N!kYQyG@E_O}0$3{~GoY4Z|D!>}Ia5AuOp zdD|%XoBJ#FM^a#tyiO9^d|NgbhkqE~CL+JKKLNb8KU$eA7I-#cCtrFwL0sE9j(OMh z42*}=>GbpET-QhNbEGa8s2ITu;k71K^q?*j0@NHm4p;rBN~GLfYT(zs9i^h4 zUd63(^#{_OFy5nQ`0uQ}o=0NobiR4r{HiU0@oK(~Y8guWT6ElB%>ulaeKFLxHY z7h0QP9o{CW-b-ZZ<(Ay@r?;p^+w$kkKx>{i&#rv6T0lY{d@z&0O6{0$={)@2Vi~5Q zUlW{1JMKcRz%0^h(=p_IMz+uS!`$6aL45aBdKQ||m%J4-&lefbfqI@gLgvd^nU$^R z{A;QwZ|)P%w>;RFY90e0{M{ojS+@@6qjw|g7}n_f{eUOCra-~pv=@HGSx*T`n~?5y z#etr_b$U5W^CwMK@A|lZa%%~h6L(xIJwz=3;a(ik^QEfr!#IRKqXoBP4E%gS@)37@ zF5|80Gxw#5rKlC>i@Kb8l9nUwEMiCG&3ei&Wh8D)}_Z2;Sc2c9^S}H!x0FByDeWcCcYXL{D~twqaIw@ijbbtS3onI8GNdWb6? zMMhwV>HnTC^so;eoFLsJtpu>$Fx|ghnQg0Te(CKa)Y)`Gi_)G+j?(nEgB{{q4?Vw; z1IJAUuovdoQakyLj=yI6s0c1ey(ljcniZa}P%SG5zRK z@XHhO4>;Bb`mmAe^aN9WOQs#bEK9+6w^s|U8P#5+wF1>@!iVflb!<&_8P7A+OP+qa znN&WKj0zJ_>^gr%3@2uL8y`F?{E0+(_ga(2G0=LPqzp%9N%`mNg>g-=)!Y}dU9>p| z>vyZ%&vHs4CuTw#JFU1;la|r(zQ17TZ<|Q+PCEW4FQ5FID|MP5|9!UoeTP4%qSBl< zYbf)VU;cd-tr0yifV?v%klJfme;S&+xjI;g7GLi;TtyMq`{aQy7}Q~OW%Dw_;Ybn8 zEL&c&`V={X?q0(^`;%oGBy%{%nw&FSj-uNojMQEicgWsiKvEyev#;=4>lKdK|5{*l z@>*LIg%(lv~^1+Q#2W5a@uyBHt94$Q;; zw{j@q(9ePq*7}ZUIhq8^ox6Bq^{kD76HNc-lC$)5bQ4X75g5Z>|IKE{(Vd+m=0+F! zU7u^g;Gg?~V`ZDS)#IMD?#CR-Q3}r_2Rg=J&Xa;xvSm_OD|YLbSeazM)W+i|Bay+V%Id1sSOC zi_NAlXneA0e9>u{6hBB}r<0E@cx^If-zT=!1(=q_wbcZ;l!Xg!sE#*|PBo5FYLiUP zkpBbLl3xfY`k1~sk$Rp%*UtXhHSgIN4)os^)qcN4o7VT`W0VViyOR)ymIF$&QQJIJRa}YJ&9`*!3Ig*3wm4v zTHVQXTcXQX`iL6TDDf>f4I;HlV!}D?D}yjCZz}$0K#X~|zvsW~Uv}OMZD(RWvNv_Y z6_qGIXN{i2L&V4+=gpy_ua!lmbm@IM&aEZcCLr(;cURZze~Z@7!t|+Unp~9NI3I)b~t#K;ve+a`qR1-;>K2$sZbTXw;_FTN^|Fm?Ho6@ z*D@d|vTBum%r)VXy4xguu}ouxNeLoY=;|jGyJD>hjuDJF)c^OTq|cTqkEpX{ot;hC zpCv6W3JC(lj5oPsy`S4~Y($zgPe?7u(pl!0glDYBx7CQt+6}HQhPS*d>J}bxEg)nX z8m~hCABAq0@jnEshdtaN>DSr(j|<^Q)w|CTzmY}8|GbiJ>|PmmjIl8p-^@R=!fRa$ zKfYRTYPqpyd7>&kX37!&qj0fdUPOi|8jfj*7&HH%AQU)l^9KJ8CcgTx+ep^Jm!(K+ z@8t)8PnZhb9g1f@>{jclNr#^vyni6e6TgVdd%xHdeL0nv+0T8H)?!9KLHW%PjyaL^ z9!n96$$&0?mov|))7m|vn0rt6S6%-q_XNV+T?~;Qep~uv2NK{nRey_GOcb}h`h$5- zp5e4>xxU-(5N0L&kJ!Dd0tK(@z3ZzmJvzoIMBzn4$RAoMhRd;uE%vFYJ3?$(cY{WA z^3n%=wc!Pd8m%|Qm;N+=i%lr_l4tkIQ!{>R6|U$lqRVzFRw#QTKdjg#U(hEJGX8v} zQsGPT0s0CbOirlq`{kc+M1Q()$Fcann(n?J{E4camFh)AoY5PUU%6%ubo~dNV}1B- z`TrI;4U0v?$;r0cU&=jmSo`|xDd6|GA;;-_p@xFlMWKc+3B~&4ms=s_Ev{z9+gGu! zU*Za>5k;ibDP?Eoq-(u%b0rVM&vu1Ukp5&k+Set+wV;spyvzCOjf21 z*W5>H)%2XLV6$6t4X=U zq7HG+n@>K`FaGC12AYF?v-=9b=NtVG`V|v(LipRo&v$}UBL5u?h<`YTD~uz9KXONAqhac1 zH4?Gf4I*#GXL|^75bB+h-EHgj*M)YloIvqiPtXKza7ph|oX=>RZ|HRHaae**3{d_F zxYl}Tn&$)XQ%?-Ab%34W(youNC=m3a1cd$*L6N)xTyR_hK64G#m#y@$C}Iu zUa%y-4A{StcL`|}o+inLy>kjK;1^jY-+%irOMITwdpR;>PIm=U;^~0>3;BE&J~0zl z*(bY5nm(6Wr^yE|(22Pmp9=meTv^SxCi_#&Pe9fgY=;8y6SgB@K1oJ971jzM`-=SI zKwkrM%Kg`DR}E?2C2MK0xuDelPFmX)uYqMdC6Oc@f~nqwW&i&47w{AzbSZpb2>+b} zDE3w+@V>mIC0wv^KIh*BKk7G$pVYGTLjRNe;J^_TmjCbJ6!DQLj8VxbivkT-y`cY_ zC?0*4Tuk79FGbDXtV|%@xUp#_%okBD#T%u*T}(35odt_*ypNRRV4nCtBObl6?1^cW zn-SEejJ$>egp#9b_WxBXqJwu*Y56jAtp3$B*9^14^~A<7D1VuQXiwOFe;mOqb^%k} zm6y)TW@1=W$UY*8sVo0JBx3r&nIokTnZHitaLZEaB)q$|&;k&o-~uV{JYT(g6&U??fX7Rqexrn$xxc0;=us3b zdwEhw+UPRb5(i6nJpKcsUFP3g`Ef1tFG-^*XS}p)Z?r;-SqW8xN97~ykHP|C%#ORW z&4BB;Bs<0TXSJ+Ml>)<(z!_8YAi_|qtj}}~G(y(yg3OHHGYI$|@0JF4L_kz+f_FAJ zN#6Mt3`_4-D&{|2r$?)bwp)@Xsr63j_SsvuuHC7a{U~AG+b*dabmDBx{v2u@!&lHp zGKq>|2-=kt%Mwf$<9y5dK!(pn6OE}Em)VKRL-+J#H3o4Nf>dGwO<4GW)d5J%+kYr z4f^yeU(eU?^_!bALizLHSx z9o>v$$^##;B! z^AXj~)Yi)~8^MjIdLh01vzEk>x{8-(=wuW!LaDw{aVAbX>hPtz`(&neC^aN{IlmZ3;;>}&y zVy>Mivh&^cscO~?#R=@*sx_$(e-1sOE;A}%4x^0(HUUSDR=K9)S4FIwj}Nfbq;!dYhvFzmtKmwTG?d&rDJ@iYcueKfM6N&(aUHbSkrhk1p%|O3G#i!}3 z>h+o@3l1KN6^Hg$@ZNrQ1`v^%3O3TVK_6J69${yv&JNAG#8v6_BeCqx7L8Mv?97_n&skC010n>?AS<1I!1AqO0{g%>YZw zPMC+GEfumn3H2Ernq$yX(}L1DYD{!h8qBkm4j!sInKQY$E?aP#%d04KM54gpdGxwr z23e$`z$3qhz!p(qs&{5N5H+nE#aJ^tp%9tR()=4 z?R*WMy&kbCmz`3B~4H ztSbK`sU7Mmw}Fd8$795Ywq6V{7Pq)zbv;yN_~f>!#TgU!v{1qvGSxGLcJJhV{q%el zZ6E_?hO2=UIGecO0XwqmF0S-x%tbP)Yh_!$Q*KblhYqJANbQ19K&C1F8eyj9VJ*Ig zb!eaDY4%)_TPx(i25i$Zx6+x}JnMsN=2%WsB2qn8e!3tq>t6nBA=O0|zc$}=E|{9) z+VQFE*90hNS5UBN!qS6v2)X*$kIbZLoJ42ztcy`-II$hMT5~)cK=_+Xm^3;dcfo2N zb_$0&r~_yjq>8s(YVXUq2oq;j8dU;+RCQCS8z@-S?ideT3TiMi!a;~0J=??@S|gPWayU<0sg1tnS$MLvW~1-pe0sR(FVu zSH3~16r)@&-T>;Do7HC>9`MVM^E=0J!(@knKzOg zZni#n@dmRvpVwk|SiRI;YOim+RpD-1Y%k|JDK@r{kCJ6lT*Esp>{A9O(Dzw9eh&6_ zJdeiU>(9N1iZ*8pYm#QfRmsLaVghnmE33|<%LG)5K;o{-(L4`=hnSO=Hs!n&p-wC-y z>P7OK^;Ofv6m37cxkGPguvV$oQ$;-DLTuh0VPv;_Ttxc|h($nOYwD{Eaz5GMZk1*? zE63NTgf=<$ZMEKYpXfNoeqtC?7s8Wg7oC>Ex}@iq#pYa^cVcdut+Y%xqpLa)b50-2 zJ6~{Y4I#jKO$q!Q$&?rBgLU<*cSGFuR!RpDmo#P+ZrkQ9A#mfY+?W3wVwe(RVr zmRdhy0Vw5~w4f}1QX&Q1h&}gr6~#08?tq&kORnc!L^BfwQGj!|W0d3c0f%~ChjjK< zJnOZ}E}4qy>e4F!K?XGSAm?Q|u-KGDX7QOuh)TK4YQ>5|n_ zLHRTMM>%7I)yq-xB*o62#jDk^@N#DaVA)njRx|s=d1qLT;#)!nM{X#9s$!k(eJ{=8%D2ggPT<{8W_@eqpqsk z0HFQq{E@2~w>eqcx_QrfPpisurmM;xK;3*7p5?WA)7YZt>@sk9v!yZ7-4L1NVwCKueIUbRDsmg!zvx7_ZJv7Tu+7{#r6Gx#NU zod}Nec=nMjfa)llctaw4FEI0=oX~LC40pK*bKay*rt+Y^le)>PX~T-a+w_84Ovrfk z!1GL9#gY}jqz;i(Py>BQ_(zNIEIwsqcB>K2Tx+6eS$E#NS;pP4r_Zz|1$0^f|9 z3?R{u;$gXA#h6YY?SOtLZKm6`u$Q^?UY0EWM%FBSvQ>=-T{iKI1Y)&@wesW*xoaMZ zVdtx)G>{+zcZ5l_f5FPP%fyLHG4w%-rA|xdW#L;qepuzk*_f?+!Sc5wyr#p-E>ik> zxrV?&CMD}Ed$a`2PY{D#(l_;T^?{8{(^gs5;RQtTPW8oJ&B4JKK}p#G^kD7$8YYQ- zu|&}9j=HI1foUb7iHP_616hLvd$rsTDs;gv4-pjwrh7Ae(FLxe31tP77{!iVcb8Z* zWd-776RO?rXIL{UT;#rq&dQJIbtYVHX`jLu#whxi=L-h*- zFD+b3Op@S@E~P}(&>Y5_T{9KJoJCBk>zE$^QVE&yBgNd!9}_UPh-6y66~5boNl&f@ z*;~^x$}MajJLd~pl%BI4y2@x*KDr3kmU~6@%##+3iPnq+St01fOBo?n_p{@D+)=b* zfbH3HS~3DbryNUcmF(B0wtTe2wpGt*i9-MewYV1~e~yXn%5I@X)$F%_>5gnQ=V7Z6O`qn$%15DoFacO2 zUsfp540DpK6cjX+9h0+^>zgh$q(?ZG2Fs*6iG4&ZXG1%0u zhv3$0Sf$RaR4r;wtgUzkTc=-vXG!PoHpj~{^${*;>3^#E6Lh^}-a34v#i*aMh3l4H z)XeP*=pNqr$yhcVAeYwlo(nu0v^W8#VCTf0i*1$bYDKk*rRf$&@fP_?O`i2fcgafp zqKkBsGLg;}HHtauL`TzR`C|Oki*yq*fzI?bidpGzjwXCZ8%7D|csKY=A?p#mra+vCWJw$&pLn$c2Y(-*soD>1oyUv5wKyKqzy6S8(XJVJ5P3(BL2=T;#?~Ef1X_K(+wo7S?2|Uf&&tJKmIL8yd+vph=>&#WiP}Zz zhXcskz=bMV?un3HE1wIi-0;v&_X5N_guqbYwf!mV3?CaQYccM?Tv9lNkBWK*kdhxW zN0umBeg|S&Ao40C{p4z=(_ZUUcS5M+=t>`ag?590P!6kZ$O}9NDfn+W+V48sAw+uX|S# zUcnf%n{glcK1`TzI|a|!F~dxpn0kFZyE0!Ni|$%+;^~cW*dula!u5mmK7r=EflPOi zxARWKkpC;}V(*eRl6iD<=+WsxXqThrVWh6;fo3~Q*NVYnk7qkV(2C}^W4j(0>V0Lv zi+Wi13a)C^A5jjd6v12T0#;j5NNrvT)hur!(I`-$Aa7chyf!|a^5DmQ=(|k zIrl6-6WDv>L=x!j+1tGanfCZ~#M|pcxXrbEon@somFcKU$XfGSVq%m3SH#E}`f^aG z74J!(-Z#?29bZ0=&~8WGycf1JTAbB@EF*q^dcTf|myY7!q!Y(x2n32L$iNy7Za*CI zb`Z?N(4V(1ubze#;93wiN!jPDgkuEfIUDMmrcMp50Nj)dsuk?y%T9rtGZdg(nm6R5 zo0>NZ=9u4d{=n=$W7!(;Fc5kj$JaIHg9-gQTN!W?xkGWmA)B;+WdU^Yx#ua5>v(ddwJAjRCyfr zC#lkbUju}Z0`P2uZ8YU`@Q3RF)$Gc#iZ*ib^$nG`H!M-^;K<0`&5gG=FA>r7$cRMZ z#?C3Df3E!Y5!&+$gfBnIt5~Dgz4SZm@{Z>_F2}a`dQfH^=d1laFMCLZ#=RwGSBBV? z;j9NOcdXb^-7zm_HdgXyz)5~+gPbO)3-EcBX@u+Q$A@^Jf~ zsRI*I>>dnn_|^{9#0VJe;MEQ5>2+u=_05?1)8NhQ%3yf4UN4S;)b5|1`aw1O=A*s- z`@v^>hux7@PVGvwH>q2%9Y>$PY6$}NUAzkv6v4&DMk>kH5syFF&pg%A$JHd#_lFt3 z_RccQq4?0gR9l(7*nzj%#ypmH@~$;FqE`1Nx56emuoZ8crA1iT(-Fd=?MK4g4h4-T z&t4`^jv8P9j1X?WA_V`;sq-l8a>xIcjI$}1Kf+hIe=Isq1eH%Jiu+RecqCW<>0hu;-nEy%Swq{C;5>&(6ljw8rN{Rcyd*JJO}= zH~J8NJdkf;`T8^VuMd#G8YCBu%Pl;sLv)Hao`qopE&Auk%I+Qb=8@lbb4yRowJy)x z+Hz05sG+ae%D>G54Qdu2HEsSeK9q<9JDgw=yWUUjAXtXwN6Xu5wU#ns>d9Oj+9@ye z#UYU_%fjo%gRR4C8g7V>6FsnFw>jL= zo$@!V{{7UNYl-~L$QAKk4!gp=(IM@&I&T=}|KFRsVM43(|7IFS#5=Cop>P&Pk;3=? zem5zwR`FE<{v~}Qt4^A%FZgU1d?6D4S%7O4NA)S9)d3tz(mW685*C71m;pt127x3H z{9mAPcb7?bmkXF!wxA+~!U7EX{{|+JF(mv;B7D(z&GCo#Mq07auF>AnQ}w^o51ANb zMR|t*SF!fY_-~RCFUwMIAffRGL9W}x zz@9r;WC6JGCiudZ`bYHQ|BY$Rq12L3s-h6jHeIE6{^z0d8=9#(56kBm>1q7j$>gz( z`As|Br+R{44UkJ)A)m5H@#i$rUDYq*jz88!r?6e?*$4l(I`z*Xs(NRm{Vr^~GO zRR3iscUclrgG&+^g47Zj#5>6J6hAiEr#aH+GYdXc+VZJWWvZFBKHKJ0%bX>mfYD?5 z%N!NFsS+Bh^cCYKs%@3jsj3I{<=TMcKjn`9LCUq4Ceoi4MslCz|6f6M54$iLv;Vw} z2w_Xgvi_0uj?)Ppm&0mqRn~$CQI_9OmU44(jLFh`oc|3B~0`A;zcS+VI1Tv$~eJ|q%3 zu~I>>G0KWLGg)*p8%|56;(kV3#Y7E zoUG5>o40~nZA)1}o(QLGXdIgdx(p#?qD0@mBICbc_JA07XrwbD)(Jkn)K~$P2P;`@ zG5x?n8v5`F`Ipeo%4+9Fa!&GQF8|zjMr~UNEbxoBu(l)tGQO&%4;SmY*}%KBM`=gU zO?JI3*s}sg;^!Uqo$6nr?inX;S8OG ztm(rhA*-O_aC!`=TGtT`J$X?JX|&Z?#<`9Fh;x%DMz*XassKCr&qn@3*0 zp!9=CU9RzGv5bg&H}eV$zYm}@%v&D;QoTfE)WNz92%kbWok#a{0;+C(NU-WmjYfRWV2 zoBvnf>Srv0-lH9Nw@-oAfEmqHucBcqWKgaFI+y*Yjs%v>y2?&yCGg{a~e;>ykFJ;$= z$%iD**4NH$2=tuQ^yQpij_CX_WI-2)(kM_v&zo3cF-%lr>GMXr2FBGe?^0uUKy%*6VAV70|bUnSt@fHUjqStbmel@-<%SnAB_{_tKp9* zG6!~zr&<7^n5quh{10Q-5?*fw^1c!m+B@@4ulGs&Y zJqK4FRkqK#(~pC}bn2H@M*5pX%5-<(+;`3A>A_n@mO6fJDyGu!S7;YGy!5;&+NdU~ zCwp1jPXJ9@LRoUP3^ui3fzmnE%kKHFr}#sXPBM3!6}c?8hFSgJvIyNRd{63b0@aWq zMGPg$e_qN$2=%2ywkv#{$QS;~!qU#vz9^XDJ%cs&1l1!o4&b(fvaL8RbM_AA5jjY* z7~wNY@uFnqal*KZ*n#kt3Xy!Z6p#IzE6`udl#c^IP7tDDlIL%TLk67q65Epa!Lhqm z20BBl&)nVqc81i|eNAa0C(m5I{(8G=U*qV#7?fswU-sIvESJ`V+JTpsB>dBJfVqy-I{;6 z1*zP2WoM5)4PYhkbP@K0CadyvP%H09C!fSsS8j4?bD5e+n~)b$Te-RdOb4*2t-881 zr*#N1)#Umyz6SON%+VF&k$Xnw zO9zN*zfA|bBuC!x>h_}24n?}dFzjJ;Ml9FD(+u>Fo9@@bR@6axREmMpnGdzs)>=xa zXGsNo7MFij>FCma8s7Pu!tMplB)m4BO&aK&5>DK&b1BDqobys0{p6A#_fUfCY(|zZ zK%6$LTh1MUQwQ^sU-c^A+-td}h{dY~vom5_3Ti3~c;c?Z@i`s=!0RIq80dI%oX7lg zEs(6{|7{TIU}*l+4;O8q|Gwz!oVOAn?ZnR{`Odj;(pCb^)zy5g&C7s6XB0Zq{c3zb zIdv_c?k9%c;MTq~mM&kS%Mn`MZ~}viG|Ec6hLVbBT+-@c{IEa~>BD!0(WsH3XBhgv z1LP~5n;ew?Fl~@6hETSFAEuYR*{yJHdxYze>8(glMwo=X*1X@$CU~PHuJL#yxC{&? zdxC@~)vjwe(ad(fjy*M;bgex(&4{tQttm6${Epw#%Wy-Z9eQ?Swf+mw;Xfvx|Mj>G zys3QbwCgr9?zS!PmiKNtAWBayLKjZJ7WH>6Bdk~tmA{3B)! zZ4ImIt66Di?c#m{x6?f?_i~1uodp>Os&yJ;Ed?SAe_S!nOc9Oh{pCTW-^Xqbk5$x4(0Gv46guLQ2VBz|)A zxsezk-&De8&-x#%`&Gy;7a<1i8E~xoo;o1M(&zB&mip)0R_Pn+GiAj2r75Ew2P$T~xTT4FaKE^VUw*XkH3kcyyc=;#Zo+Rl7}pnY)3s$Bc% z`%=FkzQIUvq7?(T%1;J^ARK#7ueLtQa!$GR)Vf}myi_;r9Em><1%Z?P@0s8)9MHFR zi2Gakqdi=4eop^O$D;LU#cG_I6LEnlPoTnM!F5kTRdE^qXeL)2M?)YCw)|I>`8XyD zp<->sbjLOxZId?AZSiti1|geA%U-hn#X#v`FZiAL1=HO$)y+yy$?eylfn4UWcw2}3(Qu;MH+$I zPy>7r91xcVt-tMKdl3Th5IMkXe-sI&$_Gy6KxOkGaC_o9-?JX?Tg>##=XsR~ZOO5G z`t1m{Pm0K%-Jt&+1iLQ;awOI)&`P%O+?<2Yk~;}5V@U>=3^jP6Pp2q}G)H9=n0V$9 z&|~SumD9Lj@I^(pRp-~dN@aw9$L=at}zB&1vD2+~!tFW^@#CM(5} zLOwJK+aVUJEHp|l+gaYef3m&kI*VLhN^ZgRwCuPMb6S_ZVlX?h@9zzS_yOVrwF9g_ zDFPW7$Vehx4_Jz|m zzatJ-fE`~$&g{VDkzxr-(Ep0j1|etzX}1GCJ+G|4$C9VKagIW_kkTr*Ukx7S8k=pt&v%->`@+3d8Yu0%$mo{UqAS8G*v;xC$B%9(`zD3yV^Zv?$96j+*3A1I}pBO0}&8skn zTL-ibY@d_bzt}_COZX#Z|885)&xo`YjJ#Y>zVE-XdA@+&C=ocusVojR*p7s8=6~M# z-uSGvurho<$#BZ1{1>(f)`%Wda|$I_LQ|9SZ$vMZC2m+rg)vrZwLM>HS=KiW0$a38 zj)9^9f4TI?THbd;5Suli5j`bOlo>z#xZH>n5tK>EUR&bLIxZ7Fuidxl3@U(f)=s;} z=nb2rwNQ-l{z?G;*r)@)(un_|O~{?E;!EBevZF0i8zAkI>^R`HJs{C*yM@9R8Wdx` z3>29G3mXlLc?pae0KPfN@>yE&W=E$46SSXC#692^iG#O>tDBDvQtkQeZi9U$I~cd6 z0)N0RGtLg~HdvuOFoDZ(Nr~>X>TxF9-mMQo@XAfx&lOaMZyU;=#pM*G2=`f%bWE#(XG7bf#F>u@@;L-~;1;x8+>_W*LfW zq_~&fTM451?5Pg`sq*GyJR@klmoPtJ=q=d_l&^uxbw$1^!@8CcFbpwAErPmBDJF-T z8-!ed;$0hVSFfroR^YLsUdLOYN0uM}%e>Bv-qNw}D9iT2)wXKwUg*1ob`w|!x6j~* zRw1~433>A#kkvcET(4%Hv>cR~`Do6io|RAj*6tKnU!>u`Qk@dW@+#i#Pu~jHzD0iQ z*^&2^zcfRvIbiu!+z~k=GETc9y&acnR0qVGvm8?k)CJjdhlHl`HqMbr zN!Q}mH+aS5n?^`n+*l@QOkTHl4eyiF+?7#$l@ zl1b#i^Q1%-b(DR;X!^mteTHqxDCbOE%sN867l9)YvIL_c+XLkGUcq+jw|$7Bn1B@L zq$T8{DiI6l$~;Yj9O@`vS1QDeTf`)9bk+~8>HLU-L6JP8t}tYYYLQZ}u7kcUnZ;$Q z@6vJK(H>4xG$YZ|DV1C1G?VJ^s=Q?Uem{Nq3STyJ9UhREK^&s(x3C>#k(bf$ z{7uO6L)OA%hwO~*!>!1+5xIj@(Hiy>LB(Sy_+>+6TX_S+gvx25A{&CpxZ}sXwE4OXZV> zOG*Pt^8wAV0@GZ!_?KS9R2Sj>8O1(8WROi*o0Vhaj=XmfFJTMH{W2%_ioT#Jd#SL-Av+csvIPF|L!t>M>G^oH2R-aU?GF8W}R4KrnYxut_CP6ORUY6;bp8lC>OM<;)zCv`w&yrqbRRI-@UobK&7?TTu&M_l7=uPufrcn~U)Y2bd5dg5TE+XzEoGbb+>(l!6o5Gx< zy}G1~pUFh$i!xHhITE*gGSzgEfq(XX_k(U|3;Pe2vuV#qNESPFJ2$gZR~`^k0A zzLe>xq30@aVHCLXgS!_P&XO)WtdZFj(}3ue+BI@o&#;OLh~+qFubt=U(rhkMcU@Nz}D8s({Pe)seR??~Djv@^JHSKCb18S=W#Ij`yD z=te7okaa1!L0%u z>RN+LBAWB*{?gNM#SW!{lVmj&{D5H{(h@;$%DJuDHMJj6jO z3YoMO9c@tbGA!MY94TCWkb;-iG;(zvBRA5nl>#$zk@sg|WOk=NCo#IfJghoXXH&91 z+n!BTWL2bxnN{8cYtI<2jnDX16Mw_u9n8}75-Kp`A+jl1zNwyeNB|}Xj0C9Mi_rRh zB&bcC!+=PO^gf;n=?iDQYXyem58usSOII6h_stlx`7YW&+keB`N#9PNVH*A%34dS1 zf53mh+l*KsZn^_<_r`qn==mhu=r z7Z#7Kv(vtRe5KdzrfUT-kyaYcJq*LTdV!izjXe!LSn?~8=gGT2y_&kjqgs~NtcIi? zp}Y#*SEm}?!onX3I|Mtae>&d8Br&UYQe=(-cC|eGJJo4ZZA`T4#C7RwPw$7{p0UlpL#}%}4<(quc}aExD+p--%+blT@` zTjo|f93urtXb>m66wD7=7;fycI?1)zx=guF)wOd~WdQ(4M_?t-nh4F;7s=$8_>=@Ia+F}!8Ng~7| z^`N-(^V0ANTzk6zbhq37N?82UpJ;<+od)b|L+dME8oK_r4tbdD9gj=~!$XoGS@y1&AWw%}Kk?*#zVT+4d zhtmbk2E#hT`Qs&+oBu}N$M{FziUu?z`T=``5SMiFev}Jn|0pf=M?a)wt)F%**9GwG+K2o^RG_ zm#t3kN!*k4f@;%fGx1TyF6k-js{~@eQ$F8-*J`Hz^u6wlZk@or?t^aA=U&%gmx15D z?A>Oa*~oPowwJDqw~VZpqRd5F`(r{{Ad|$oURWq`4_aHQYDY|lB6W7Y$fP2UB_5la z#&r!1iXl?$GorHW|FHtxde-^6Q|&gFWv{7SkemIAL|ag294t~DZ5 zY1T)&2h28mF&}rCOC5Wy#jg<(Xbb45hU_uw^J)5u-J)R=>^u0T|E8|%$5k1};@L9+ zWNPsgAaFtOIiksEXMP}6huTflr-ZprXshgN_tL9Si|&}Vn1vs83Dq}GYQ?AB~oz zd&ceY<9rpJ!_yP0n}A9sJU*R_XYTxh<$Z1eAXWLU&(Np?GFwmX^l7o@J`Av>npT|f z(qeHr!>dJYY69uFH@2WW%yG7IQ)ycx=zAUZI=H)u}X_UeyfCtHUi8`kjDu)2~ksWePsw_u7Xvyu*~?-F)7cq4zz;yTQ4| z1vp^3uR4^b-Rh0mV*e|GL{GrGP@cRW(U{A##3?wc<)gzL(Vt*YNqHY+U>4D5;49(9 zr`~5Zt1l7NAyM>tQz@y%Ps&N8H({R`RG`oLYfBOVp-`-ax5{#bm8#w1m^@#R3UI{V z(5}p{qR3LLPG4^01O^v;>y8!R$0BkS=wvo$Eg9-$!QaGM0b6x~rzv(cTho}lrc7?+ z40krV38|5T; z{?R5miO?@aId-0A4q$%*YdDB>M1`}=jv4w#EwW=&6X*Ax0Xk>Sl_5(f>S)K#UaJ~2 zhv;Yf-za+9xns}_`S6#+4O+Msvra2pln2VjUOC6)2wZCtcMI!%#pFms_z_(F4>|po156Y4@X#YNzr>m1fiO9~$;G7mbXf_T#ZQdV zlOO`CA-UGq^Sn{*485u(1F9tUi{FDjQvnKTfZhG=deyjczoIQ-ovIS&s5S3)98UqC?AOl91M@C@^Jn22c$HOyRW<XEmn(7S;n& z<5nsv6l8dS?VAO|U(&+Bb3rB7B!aQ{Wy37iLC!WrkD3v4n2cG}B^u)Wu}mgYLq^kf zC7)GU*An$rk;lB@dJ1txHkOF;bj3l&h)a>`?pvY4myYw;I8a9r2QCFfVY!z`*w#G_KRO~5fvq+^D2 zu}S4A^dMECP0Z4kRWo)I4_(FtpKK45KY^kycJB=9x`JambDMVJb-2fLM;!5 zDQ|4PHO5gKWjReaWfbD(KP1?6uY;PZC(59R2XWL#yM?!Zh zEylVRRvCcvGAMNBi#-KdE+_rbCtYY9ZJYGXS$epsSq<7ksnauQyU4SQvZQ+%1Q?<# zQfRl&7C^KTYOhZutb3;`L8shVHu@0q1SOSoC@Ya}=W(Tg5FPS^6;~-sTqFYA@MA<` zz=1PZXaHo!9`(Hj3_7?^2#@la|DEN8MO%Qv9&hGa`nd-R3Rd$QK6-CovfzYjubRQq z6+vKN|F%9tU|={DvnUCCKION}_6{T3{=pF}MT4 zqT`&@1OP1A}o2Y`7^@uOO50*c8uMIw9MbBFNks z?H0-dyqaTtO0tY;iupLje1^_=h7RX=DN@^`qmy8nXP-dQucQ-gnZF*X8utW0(3ynj z1Zv#>8xBNa1Hv%Zt-%Z9En>1rd^hrmct6ol>&OAxwN;@L{2a`eE0=hTQ1#LN-M87& zBkTnyp9MUI5mIfVT%%fs)w~?WQnRt;U!MIEU1g5c?{=dczs&8%IpTHq@)$YOwBi4` zBG8_Insg1qMBKJTB2Ph5HU$oFW0{eu;>iSX;d)h`)Z1U~_ zhW_LUhVU_ic=$g-0tN?aPzu}C<}1Qkad}WX+jVtyHC%U#SV;#yhX2S7s4tJl-gtr9wj5O(~Cn( zaDp9_w`N2&sf)vN6&WR`lwQy!>)P{+c!w>$l_8&b*}6nZSN$!c^2(zco)A}R(y#+G zs?(SQ1t&dQXR3@%-RcoX6P|IpG+XB0T7t3;LAQTf@;|HqRr7!3)n34}0F~M`oP!)?}y(#0&#i8r7z^HBGZ>cW>?f>NLIh1Go#+)ER4|tO+Dq5 zGOu|COVK%()5s$ zR_yK?%uW|s^os~yuP83_J;mu7uX)7^)(xwjzHg=JI+OIAZo1b!MtmU4F}WziD+_+l zJ7OYM|E=8`_WrTD%L0NGKdFl_iow$PY>}gXu7ksb@Z=BtFNZVj$ z4ORKwot$wN-D$G+^Nq2`=2iL$9@1NdUnb7o@=N$@z+8yRrhld7zPfFd zKS}lwv1+~T{K^unv-3v{RZ|;~^n8tPTEHc^JsVOQv` zopzSaZFI80DP>!v)mKIvRerL=aH%f82MK&KHjRz)?H!+kosyGm<>C{-Atk+^KC3yM z6`OBt!@N$C2g|70zg2004o*tO5pGXhY-n59KheOXRge`Dv(MZaY&?oVraC}tZ zFC$vU3yM!Wg17n)CkZc|i;#)B4qBMnITux-L;94r5%Zb=%;-RYH#fYGn?2=^qo|{L zM3>Zdsp&7og<1_0W)Dfp~cG3^s;qq!d@BDC|ZP29}p-g5=ynO?j%CvJT`3dxf zJ)t~P9p!%apq{x5{Ej4glP@eMTtNR>c7;E3vm82$Ad(U^jIa3)a1$=sui7rE)4d#k z4@`s#L!GT$-mc_IrkZCj-A}jJ?>KH(V?8<=OC6Ubw_#GDaXl@DOFWP?m?}WjF4Z>vCcwB`Jr-I>*_{d+GquACx?rj0NjIh+>nJ z-2_j^cueTf{7{{BsruISZ~wCr#2k@9ITz5*Aa$u&>0{N=X@ zqGil69e9obyrxaMHRxh&JI4`nv%2=jqOWxtf2+hkMytKM$o(+7ZigN+ zB2HZm+RJa7fMpVfsw@ECqwsqz1W&zo$p$s2Nf)f^w)Ks$Pb=uJP2nS-rupjaBA;HG z)UGP8TC-FDJjprK^)I`JRwBQP9E;u- zr7IeqBt-bsXov&LJ3ni+{p>8({g1oaUMmhM#GyYmPLsU1zP&d|(6QJuF9yl9Z*0k~ zp%cu9EMHdf79H?PIEPlHHCKCiVdRCG>n4{Vtp>Ls zeah2iXuGRRtN8fZe=ViB@bf`Aw#@3CXAd0ukqOwc$ht`6&4@F%hCk8CJw*FZ_Bxo` z^l<9^osGk5N<>8u4bz9{#$|M|<^(tcK#kZ0qprg&M8xu))T8p$Q@j#Zdn@s4Sy|v) z-F`Qmhw^-S5J@iSW`@bvyLhw1e%AK3J+S&{i1{2_UMaF#)ecji^*ItaD;?*@@btvO z&~l-yk5hb}NRc-iuF(b;Lk= zL8d={wK;5`S=ryguqZQ#=$VS=>&;EG1B76a=Ibqg>4`%+cQT)C>iT9VdDKthfojSz zt{b<$Xsv6JukrovEN~i{6U)n)zjZucak;rz;geHinX*){Gs?CNtCQmxS1-YvY_Gj! zjoBEu{GA%5)1JCY%$`AB$7KC|a$)JjJf>Mr!l}uHJENp(eirMTra1`n`mhs{?y$<; zO0)cnbIci@HxK^uqIp^DFy%%45?!sAVDa;@RbezBi> zH*JBHJ94Cq_?f~`$mflsC;Ik0?ag#>Q{;_9u>I%7k$X_>M%7upwZDM$yWF6%e>0=R zxOy6?kpVq1Zn(G%E}T% zp>dHTrLwBKuAypm$$Lpm%g3n2O4{yR&gLX~10xJh#mEN?#$WTC(B>+d5BZs{HXUK< zadU<7tBJ7u1-|{mmtS<%m4Lm0znojx>_zj{*mTx~uMOj6=6`{*e?avY!1)LK(*^kj zv@G3Pat$k*TsWp0T{vtl&TM(}syZCXzI5bk!C;SRtr{%I+#b!BrdG-s4d;yLo ztW~RLi?w{b9ziYVJ)3hGFNz+?FO+H-Y1>)Qd^}t;kGb*O_2uBF?ng8t!MVQUU1-FU zAaEL#&FHrt?y~!gCKr&{o9mpArTI=(QmvdC>v+n8@XWHdi|Yr_(%v&_9Ae{Nve;?d zW-#xt^6qTz7}i^GU4H%}r*)*nulQGIujU`V{vUq+i$}L{i|#pDKe*qSZ`@!5rm)Q5 zjD8kX)!eu>J+J|Dn!AV1IHx(MuhXZn&EP+Kzskz)5m}yDy_4GbMEg~K`AvWM@h`uu zq)#7l>2d#gL7JjAWBZ(ZS=1Qe;5^Hg>0VvEJl|Vgqs9{`t*XBfiGgMIRo61vgZzgn zud0W^ti+H($!Q)TFNem1$P5qK#_4MiyU_omFRjSnZhNgAkIT#8{=1Z@lhZxj9Mu}j znqmrG7w5f#lg3@Pw#%IG9Q*u-CX^lG=JzRtO`>y#DY&8#-0;Y+%i>Vhd`Vutw6r$J zwx*fsuApUwhGb=Bv&&>tCCiJ}&Ey@L_Pb{d&8ex0{U(}bL;WVPd7d25uCviGWNT9* zE83XN{%6j0jkfHfQG>*$WD?ej#|D7#1xdGlZvrX;72GZCqschYmnv404JISWwhWVsekQHLG@Hi zrr05c`WN9=_DJx<9LNcqh&ayg1JLY@R%(im~Q5)X9?H^g23=38$lV0HC+S%hgX`4*W`Zo(8YpxG3teDB zHD!V~Z3Tbw>AN}UKM7AjZ`EBL3qSI`#nT%KfKD>7n@{;4R@w7mrP<=i#ImGKArz0` z$jCFM`L^}lJHZ#{+A(&0WjE3(AKBWwQq` zIQP!WZ=Z7QF-vPW0)bZe5g{2y0s(_69EU75LrfBcEltTZJgsT=%fR%P0d`3Gm$LZb zRMjo1TZJ_ZYg$#Y{bO7-&djQoTWOcojXt7&FHNg|HQAPMtu7n3NS0iyI+nWHA6dM* z%yNBz6BDaFp=7ZziL3WPl|i%s8UWaR9ct}JEvif)<`3SGu3Ey{?{$RwHRC~2$1E_@ z`ezeC=`$KI4UAA$;OJK1)Vpp~dU;z-)g@aszW%;F?K!?B?TBZhzb5A(U8K{XDu$#| zioHZyLVSdtifz+mXS#~Crm0=*&bkN4PuNd44H8}cx(FC(s4M!8ONnJr(x9EeR-m52 zDi5}U5l}=MH5A>!?!!QWI%~UaRi4*j2g7vJEZfpy!}vD6&(0M}Aatn<>61 zydoz%&2bf{@+a^c*0WMa*FzU>N%xqI8Oj<`8OrvLO3#t8>%JD;OQggkpUBIQ>cj(~ zB|51;(q-eSe=e{5r~~YTvO)%at4`JRQoPORYobSB- z2_8uj4oM{ZK}<}91B!wm))B-Y05CB3z~mcMZ;VV5&R?=n(4FB`1Kw#SH!Ykw;O|=R zT9pwsduR479M=dlSJ%;%D#pEryy~DV?{S~V?a_P6<1Kd=D^EJzfqc_`gMLBjZns26 zXSUsVZ@{Ea^anm~26154)xcMZVepk#Y2UcyKt{v@pcT*x06+DthwYa{BzC|DBorsy z>**Us;Sacb*?NZWU0~sULSFjJGb1|RazT95odW8(a2M!--*2UeTdI2~&3j*Qs zMXyRx>A!RRt4uuIC2D7}R+L|*e8^%RqJTJ2HFIhPXEGl$_|nF(<`67(N_{d4jA-Z+ z5RfcF{|W18`(&&m^vNmH!ujaaV0;+SDo`f|$s;Q@0kqR8W=0HgXw<|MQJ`ExLUNVb zacEw+`w$ewTE=jhFutdz7WE>Reb@@*6OQzQzt@ypP9`hp zb$@WIl9q{vDUvUTlgt73bv1mIb38B{$!v6~E ze)PGXYt(MgSZmL97J5WcbYXSsgP-YK}5Py!@{JVSzSJ?!#b#_qr`` z-{*%74jf49p|DD0*T~Eo%0WXPrQTgd2mnh5C=jEgfBUGvHF?adm(&<6rq)yJ?jNR! zOddKX8Op<6A&pREs@E>kurP&@iku7S)?hN~{8|BwQmr$TDVYoJmOU}_h|sAsl4;rP z#V*+$T+$sHauiJQDfPl&INg>m)w>aa#z;1y0VNwH1PDuElafk7kQR(1$F!<=5F{Ur z!%o0M4JiVsD)P1z07etI2eMgrwaif-n@UUhpL7RW*gbL@p}>}8JEN(GaZhU>EssoD zWp+xu6{7%c4bV{+w9IO6`4_?pRdyNyLBEQ63?tvtcVw+C)y?2b1>eDlr0j7y>yNs6 zI4!^ObA#aV>7=gGckLH0>TMlLcdS?G17a_g7x@F^;dd#niQ8m7nx5fN(s300gS1;b z74amrG&I(z7kR3ZJR-^xro*VOe~Bl6E7F5sW$O25{4EL%IN2v*L$=yfgGE5H2BJFG zM7{END#esc=A?iQ2wUCp2&L|f0I%eFUK1`a$^$DZJ&}XxBvotAaSo;KK1)dX0LjQO4kHg%*^|Jnp zI}#he^7taj6?~_$sCr8LZ@qMj-*d#rug1X2C;~H;S*Zq(6IYcpXk{_6HRC)XB|l66 zKWTvxhpLl)dGzYb>*xq$hqT?O<_Q;H;90Ls0QguRnqNGQbXtB97_2Cu=b zeTp9#U5qHiU!;hPiF>Sl&gzQk?c*I-edc$?bW3tk&-j*i1$K{edrEq#z2W@%Jy@^~ zAsc|{6YrIjOHB4ve)hgVTS{PDT2f9@oDAV!Pi9?DYF$r!eJhEPj0Dd`=yM1r_7^Z$ zauoUl3+*HI2Rb==zFv|7gb%X;R3<3JHR~$|4959Q5JN8#dLofK^KV$+JkFifATy?( zYw)3c2wgG?#@wvlihYQ~MCelRj~aurZQuiKc9=k7m>(?4*QY%kVV^k2pCs(cPc$1$ z0FiY)FFo=^(R3M$q%l^1=5*XKm7d;6gGb64A-oE{*29=}xb z{rG16ik*epLB@M1eWD_^edPuP!o&O!QT(`3{K!#0jZZ?H!Ku@_W4;zDWpd?Y^dw|z z4)A4aC^DAOCgsU3Ye;pM(aK8D%H+wpYe?yr(NfJ&QhqZQq8 z7zUmlbz^P?+rk2pOmeI7PNt)#-nscPB`QleRQR`gD>mH2rkH);Y^bm{R zaX)d*m1dmCP@FLI2A1>a!(OPqAFg`y=^@3SS87jj1SD7d52D^WD6S`H7f!+t3l`iV z0fI|#hXBFd-Q8tzSO~#wA-EIVA-KD{+iuv!7kAgo``+)?_s6N3>gk?3HFHLu)ARI1 zB$s?*n%>U5*K&En5*t;INHG2)k~8XcZnz?^;>NFf!SrWac;(jGWQSp341ZvZ^FHuG zB5gzaNt=jGr!|Y-=cB3{qUwc0{~ZB%w_D{}I!wx^b&sT>cnUKF7KbUtzrC zQyNk}XL=%G{1wL(5yuo6XT0HcZ}_SF^A;o3R{G~H**!GcYFgTysz9Ar`id_c)n7RR zVn^=yH`iAOdTX$emvNAlXGN<5Nf=S?e5ls-p6eg1*-K>bVMR}s{U_csT!5`W?-8{MZ1V_4()|7&OTW`s0`W#7T}zxK>;m9Cr8{*~iPkzRGUpyR&a@*(LE3o>}Ol*_7Y zjqmpRiSJ3O*5HlQZ@{suKenUhgXEX7%GR3#kRdREeZhuhBV;)P{@QhKqm;^M;Gs z4#gXFz<0;!XeVXui2r{)c$O-d>x?1OWi-y5p$VkpqZ=BdOxyS>8-N_TT=lPk>O<pvxy*6ihN$`SqA)H5N@9j|S#Z@Y#*$XCNIBBK}l_gFKp zVQ^X6>B|p3IVAUC{s^3C)9MU?jDb-VxH)v`Leos!K30kFGOA{EC8v^ve@Z@PAIX&P z$)>!u6fsLu$ff|>E;-@-=_rI;4D7hnbp0C|@y+St0mVoGRwN)b6wyRpJI3nfb%XdCNvWyxj9RrC`u z?3C*y$Yn80nMM)ub=|iZqMd{+XNAA(x?`yjta*>+lPXWq1$9iOCX~>?>)2?fWnXYI zlO5!4YJHM4N~oI)g8S1k3BL$UxLf!gs z!(!~K5XwiVM<_*SeBXk%p-k~LkR$tP)clNYT*Zf+b%))JVLqvb$#~d%L%Em!QK0x@tybwTeUEw7KIWCzm!9;S(^f6uo%IDx)+o;cOtq;V z$BkAwfiqofst|o@d${ySEufD=+morC{la=|T7~ds8`YBXNw&7mcr~snd|g3qBr)kX zovj*(@znH?eTVO$FMUD8_6tTz?V1=bFw z%5QR=LjU5Q?-<0sVVPilC?x9*r_baHpZkxp&|!{j3~!=Dp_gimmPJ8UQC7lm8*R5l zK_>lYlngQRpQPS!H4gQJ{?7N(2ZT0_iWufCMemVkE2 z(0V2&$I6_)-SBUfEhRYI&|9#OcK(6e(dEBmyoc1;>b$id z?fp9S1d3AflH=dU#WP7n!*`!v$L&@9t9R#WX>ZEDXG%hJ04(6FyZbp2(yir{e-S*C zj;b9ZH{}>PMa8a1-yyLt_kNAu?IE5Xm4P3Rhjd;&J3?1z)M3%}``X5)A ztF0-)y?)C$-Mecxk29G0?ZIHc!p zBWtrYLz{2;da2nF$kJ+q_&Qw!R+$uqF}XUj44R)_zdDaUEKB8{TApvsz!{lDKp?+B zCW(qC_+cmi=B1s)b*Xm2Vl43GZ*VU52@L0e0L*(h?;i=E^Gjeg7PjKY#;Ou^hNHypC1IGgAdG7TspCj=pIKM$Ob5 zf~&N+Yuu6&wEi7p30jFQ3)mg;h67WYQ}|!^N8idoBHytrwI?mP5FUoX zbR@6{VIQY!SW4w;fc^#N6qb_%{I^0p2TDb;!F%IjQ@1{U20O?L=7QYRj$y;}_FVJwIothD)8{GsOK7oqEDEuGn4_2M|C_;9xVQ@0u5i@30o%IgK@o`0I)JK+L_7Uq02sAE%6 z_Og1cPJp&7PhYQTDU()%2`k_NXhuB8xN9DB6ED9?IF`GvM zgMGzq*5$^*Ify}rLvD{&F|e6>BF?1Sw2*ublA1W%WT3uDdF@aaF1)F=1fea~-8v4z zOKQQn@o4|tmM=fZf`yU%SgokxljeFcB~G zeWqvE`L@I#%f3ri%yHtBetKU2vDHVR5hL}e+g9C@^V$K+fC5l6Rsr}K^8kd5WdNz( zp2Z9f-Ed*2=c&1x}`#`QFeCBw{=82QQ0q4}&MeL9jUiba2QCo4M9zPlUYg=xW z`iBb_uz8Zh;^P&^5^VmD#CEWCMVIG~$u+j}3sZJ7!hU&Gz3*pSJ>GcE8~-lW95;z( z0XXJ%87YPz(#O0_en4}*?Vle)0Hm=z?}P#OY&4|uvnw4Tm4cjNmm7ilIUq)9D-Yo}wnHg1R5)uS^WYPTgL|uuW*0 z9f+ZuSJY)dV?iJ9pDp7t3&u(0Wms8$GgS+WtHNt(J>qlJ`WJOaXUDTrTcuO7bJi=K zfUdes5#wQd*4Q+H>!$yd)Af9-dh2QJYlOX_7N;JFZ0QD_UF({OHM~R}*w$bx zM`v_ALO6Xsp88)e{*~mGS-e9-L_??`dK7MMEM$_UQ)Rv!s`$l<u zk;r!D`h=px6bx=>OQN9T-D-md2U8c5cS@g;(@Ak3p9qV1m+@EJZm&DecR@M%+8Vv^ zZZ}L$CHH(H`EnCGz4ELL+SWgADQe^FQhLOqS!S@d(IQC?kfZFR zRkze_B%c8%H!gpz%RI|FahxtT zTfjEN!UMHSaE5{D-iN$jdJ>Q=aMMa7mr{A2p(E|`$Hu~{{zj500Y=PaFkd55#cNq! z=cYcTz;|E1YDbD?q`&kLT<(>Vr(pDp|5C%08bS>r3t>$~)!8cH_E>3`E%u@-Y8`AP zZbT?M+P*i5-&*>{!d>Fu<9I>3tXa>6 zY{Dr!()}_tWkl8!(WX*wbGmFH(SY#3m{YN%eQDMmRWcJ6x7l+B#M{zs1|_Iu)3pHtTkpX#L}< zEpE>~AP2NTNJqX|w`r2yRthpMvGL{v?ULQfEnNP4;{#TGJ@Lq`!P^zT9dfB^9q2@a zBc-4eWsa{wf~hwT`T!G}Cx+*Aj_ZZ3L!E?|3+-4Y_&ph#uRe{2juHANO()mZka9Qh;B#!6XV#gG9FntgH#@cRd&H|t0dgY0&cZ+2`9kq%D zbaV8V)2%{m&0QKY3Dg?8Ga6TOu@Su6nUnv$?EYs7-rHvrE{uP!DdN8^BFwr}b|yP# zI>)(do};VNUi&LtdXi44QKzgH6wa2R?6>>hZrZdDNgkolWo;C02BrckN%IR4I+ves&9qRZS2xa^T@$-_XfU$D%E zAT14kM6W>RDYt`91+mm_P6;DG%q_DYkv#_)Yt2qHc|9pe_&(`^ecabwD%$`S>pGRJ zCz$Bc$V#Ptg31_KpvhyQLkO|`fsm*RYtx_0xgNy37I}o!Q`fu2Ap6?EY+fX%{6N2T zC5w{S`$qP}*vB26aK-bIA+jd-K&c7y@hj`WrzW!31s%SV?}EE`mm95{O5sAGEYrq# z`XpXHP2w6^O*nxJLWD~XD^VcDm#CGfsSmG}D|Y&=-8@Z8T06P8hkNum)EG=pvE|EJ zTe*~wPq(_q$WPHCxAm@ZwiR^7{3ToYF8(hme$udmX7N#`Rgx!9zT%eQRmN=^A&D~NjA781uWWfy4%*%9sf z5qT>+@96hTx5(Y}=ErxbIr}Tm;TZm0;5yt!0~eV*P%I1z?i4*qsq$y_u^;3nsfR18n7*fcA9>0ZC)_?%&N0!Hj z461Nuubm5haE(Xq;{2TaLU4>Qe0HM;3_-HN-z3x zN(xYE34|B;ERA)^&x+f7z!q&H8>>&H8vY41pL#ZofwwJZNe(}-#VzR*`X$>0FK#P_ zdwO#g?3*8)?UoW&QaBsA=PaJG#Dr9tI?KA}d6YE^*)>$3X-Q5lEkZL&C)<|vDLwRf zy-D+p&R?W758sX=lQcSAPDQiUTlt+&G@o3N6fkX_W_!dflNr7dkQ))Tb+CN0XFZk* zjM&@(RS9hHQ&W{_O@}~{&qy)_8N}1=4_wl z@To??DQj{w6SQ*{;dmd4Fx!8e4(%_m5+3$r_N^42_M`I6@0{@y@NMfH5Wy+8W4q0X z)@ai9Vf!&{x@{R#d2SSK6hT?k3H9UjZSCy!qvM+ssWB$)wAx%;Mi=uQ2HhtVDt^T(l=6qz6$Sokg)mPmt)KS{XWrYLznyua#(CC79^ znP#c06Gp;kJ9^rTtOR<#3Ja*7>l!~Hs?)2!Z4WzgU50fv!+5uGPCfoc+OE<}a!(o) z&HLxKjy7aKGL+MmF4ML8TeRlfQc4w<7@2hil>~E&Y$#`xENsEd$9OzOnH9hg#Tfz{ zN^>lm?y6^=%p{fEGpg~VgF-@`lR-GIjOtk>X;WVpcPZvap3O zH#-ZwYJt6dWzuRje<_QM6gx+iHXOPJ+^@PR3+uR2MuzHrnA0b%S&l5N%xdZ-kL(=~ zqwA87fCT2+sHF&4m=M7igl|WLr(}ZlG}{;1FC$211JHFCm|=m$;>uDo9d)~TXdVK z-O~O`zr^{8u=+Yjv`qwBuB5M+rCHVQNsmO!m+Aqz%k; zUYf%0=FfB7gxvdqweMU53?Ti|ceYiDxjWX42>wZNcF#}d0lI?pFTyE21FvJwHm_KI z#t3AC9z}kBFI+=r%;t#Z#7uQDmbxkI1R?Yvf1_fH+XSef(1y@|o4tCvzKYqU?4u^C z579)48~G1c{9Ca%b44<0Z^)<0cSFo6s1?%RdWkMkBF3GlQx4EM;P&iB?|tm;To=hSB>N zQ~N1GfJQ$w>&Mhb39qS3{%KMGARw)NiH{Fnl*KaSclWBv4b8la&dMIz;3wy=Ax68u z{63VB)$9f$9p26w;kT}wxCc&!4@EBF9P(^&9U^-P**s+*i#opAZk~>p<%jZV<6Shz z(m5=eeoczTX)HU5A}KA)^slr^B2i5|=xCci5ciOc1<#b9sCbn<+6gQm9DKPh^%WPc z$^oFe;Z=;2*?J5PJVd_tXlzqjD{ZRKCm+PMA1PO`*djFDdi_GPuRNC<62vT^Otk+G z;f|*KTZe_WtV~!gQGhtSiNuINs^6*K$#jTLl_kuWG=Qb@j&_AS3`PWs61zjUV-*1k zth`ZbPD3zq1v|&jkoze|1n&}yBw`X&4<3z!C#9l^qMSh(oS590__xI2#Nm-2{MD`k z%*$#ugnl}Q;*$&$4@Xk@BOi%vd2bO)vUlNge#l+*PJ75@!swk~kDdu&7i|!A|K`r; z&g{Bv0Ab?d){@GBIX+k+Mk<(jmG@iQ5r$GL`vJ+nDSii}+I7 zR`rF5$UFDe?0n3?(+k#fZg%zUNL?BU`je4O3hd9Lgs8sCVnSc^*(XwiZ3p7V}%&iEp6L-1t!jGv7%-qoo zYI1VXNc)gED)wYEI1YPoKHO_?x$snWd|2Sw|hw%i-!z(AN6sv5pLZA zL+2O&xtc=b$e&kiYN;rF0TOtKa-nuC^(m27{sL@vz&X7yW_Le~`t&TTaAfTp8}$m$ z6!W=60(plIngZ1Q#}8_K2VVa)3e)+TKAPXBeoZ*3jyZ>I#-} zS@Oc&GKs|vyIQ?+kj8MS=7D#D-eR7Trgi*;nx&>{ft_A<4J(yyb+yLw+3ROJCk|v= z+@~-{f&gRF&A?2cpzO)7WO(n`X;?B0foVECIq>7#)frkM=vqean7S#oM98#^P?%o1 zDmzfLjL?|^QM5!pXuW)^?D$XX1*P&ybyiXhNk0(1$p}-Q5>-F&LzBqIrWYCqAeX~4 zr^O)>JHgGf?#eB^5V=si&adgn_3sf|PhG|Nb3}>BX+99AJ^yy#y=!Lw%+y2@2Vd#Cue5m1R-c%j55(^5&5aFi9Q|SQ2kmKXSr|k{n_u9&4nnZ1Y)xj>|23-^o(J!C`MC7a2?z zN2ytEwv}{Vi<+m-8+@1q)-l{;-VlHKPr`M;ATK(Q;-6GHNoMgx#3cGP^xbRKL{zK9 zvYFH3C()`A_FTK?%kQN6Pg(f`8r-7AjI%mqGQ+#&h#~pj|Lr7rH|tS!7f!^ns1OVi zRN(Xe>}J~1PD)u(Yka^}!R@YIqEi^V&|&(^(Ilsft6#xmv(6Exm>qyXboj7>)X3fx z6xUO%lL@{WUH2T@T_Ld4cW5VRAs(C3k(P4iNfNH@wA)5Xdaj*bQc6RXS(|m(*BN=%#y8Q8+cOp$#}&aO zQlEI%-ItRxle+9CUJ!~m77G!V*t~zn&d!ArkPxul(flAR@)DOe?LZ;IW&IHx^paYnG?V5i@XMi#dd;`qFm zCBXK(gjE4uvfW$AM?Z};mr(DMu{W9y45zPd;B02|E&&qMMx{!oM`FAbzH}EQa(2HM z;t{Eq#7iqxejLf3r+L1(=PX*PkE=;v6I=60Q!0qFwP+X#&UAN(aPB~LJipQJSw4~H z6W8C=Uqpy3;L8LVp|{ky0!@9*2Ld43GS;`KwS}Q(AMXR)TL}>InYdp=jjJLF zO<;;QK!S%tg>&Au_yHA!Vi)$Mwf&jm%CMfdEIcc>@6sZFud@FJi(@r! z0JxBU+oDRl>-z?}TR(gb29O%P1q|?;3s;q9XL6&lj6PAO9N%V}4c<@uJviDKVV>mm z1FK~EbIG4Hg4KkMPrC6(BisMYn(tpm*mk@EpgpxG7H#3Tdwc0uJA3z6izCqOMw@9e z>`tL!oK68cUfNysNZnoZ=$$EsA4b=Y#QM z4xg1BQg)(|?Qgy(y={Dy(HNQPL-$IRE>oow*EY&qy)Z80Gh7mVhk>lx(yb151YzY4 z)MtR0@NGNlL&weZ;X_ZW4$|{wn*xaEyAuJ^{8?lxG2CeNo)B)3-oeB)yxFy>=TtB~ z%F-qILYSUz;1O-ynrP3-uQibR?~`hxBUv=ZG1d7tLDS*LzirPIby`dp(i{FdQL;eT%2{4!iMmGpkN zI*EHL_z3s+R@u`?nTA;It1G%dCZl*|YdmA5fkLvhuR4Cmtwqn)jy3ZgWh}oNi{`3> zjHU$dV4RhGInvewgcqWAJ$YXiw)<=0YByhldN_YKK|>wj!#HE`JBmxYIHBX!6l?qL z2frA=!_EkxX!m7!YxiLRN2q?rXysqL-ja}TV}2`pV+OpUm7%ekKOQ_XjXF8Hpp{dy z>r+Plugk~OPWv)pp=;N&3?U1_?P+>ocNf1*VzNSA`u*JSBRa(MvTXr1=XN)?Y<}{% z4B%irsjt2kVcGzi6jV!fane5c=zb(`2-ku7e|EGJNupTr=gMC8rxI?sclY(aY;|`9 zc(pa$tNGGQJ6|SW5e=|Yyk5KGQx+6oc{hdc{c(5XVmpq&R8)?|RG!|eryT3$e~ln0 zv6hsdcXPMU6YHb^6qwJ=+Gq;IUQ>%kf|RG@mWl}_$@f!4^e2UoEpF%;rAvxa0hxO- zS8~<3NMBY{R`f#eAl-kS@SoA-np@nrVDGn$@_f-cB%wIYt<8P<`&Bts7farUofrf2 zow05;v{0(B=26o48r#iS??k8%G!*(3Y6-=MEHflB0@x26>{5ftz=({KojYol>_<= ztnRFQsxs~@ayO&Z+PQp3gf~$gwAkkKZ(*X9mnj|69hFRi4fV&Ut;d&1sW z4-6g1igGPde1!vhdv-eU9#miI{*0cA1bl_GE3eL)U)9HnKB;>tLpMy^JtCL;Z>niI!>-H+%;KraRvU#NS z;*(FB0m}JkIaw-v3{8e$Tz*H(C%Hol`nh>j|1Qv@Kh^zGv`}_ zoH<7OIiT{vr2`@Gr`F3a`T-I`S)Ya>EHjVj+G;FQNokq-ug%^>Ob;kkHX2ECwtBN1 z9XkOEdQufSAWeU=3O=0EhTQmoFUNQVAr|EJquY4QHbYGs;}OUi#Q)?xT?H1-4$`yPo0zDC|Dx?xnwFd% zG$D08t-?9VKQ}zYO?BAAt)NAiSa^RQ?~r);xLs=Sj^EXsmV+ucC3-s{#$<4MbmzG+ z(?z!Wr$&Oo>|u?c;=m%1+RcZ+8+nwwIf_@g`W7>pbbFr}y5Uwp3pL{x=T>w}Y}RlZ zo13SD{?0*j`=d80PiU;~tn6!I9&!Kuv>@~sGeS*oy{er=A_20m5HAk8= z)QIMbT(w1Hy^J1+amdQOBvWQLY$nC+ovIhvs$7BQ!do4-%9&mwlXa8r5f96ohDuFG zH`O$Lxrc_-q#cK&Df*du9huv5ZKrN^iGvHC^bx=+*A&CtZLdC%4huaL$wa2#P66DwD2aYYF0@9mOrv~MoZszAjcaSw7R~cN!3Khyr5@9w zFn8CEV8ntV0?UzKvdh>-(0V!BGY8dTKLJaG#=}1^1{x$~4QsGcE}t9UiYNRa#;<>V zB+=ymp%_i_5&NMPXn7`c7E!07EADzyNpP5CIrj0bUkWR43{;j}xv0BJE7f@zkH?mJ zR6?oRx>chMA`F+-5iL{e6r40}T$P_5ZL(K9NuH6P!dC*g&RI(WydL7*6fScAaEq|; z&KzV>w=9XvwdsWH<|D4anb9IwcsTb1|SRu z&Gn4*qG-!TICy!o%BqcIhk!Xf*t5`s4qNSEzQ`%UGr{8*zZI2y+-mLdzAzyj ztfUpd#VAC$-1*g$|6Sh1$E3(Q$N{4gwGzwWf(+FG(*f-$$uUT{aFJkzl5dY+DMJ|% zQ$5#VA=Nx6F^DthGAO6V^1z&MzsZ+XZM;GZyTLmJ3BUkG|6=U+dkww7er!~WF*wws zd#x8chb2fYu(=!3{x1*=81tghAt1vi6T37)0bzj9l+HX54}Vp!H>^+m5!^#t8ohSc z0Cx6zyRbGIebPA*#WNr?V5AGK>ecLR?0x&M-pf-H<8W}^Eo}ONFKmkR125N(XzVpJ zrd?46#uedzE0y4xP(>ps4}*`xSDil$b@GcW8Ar zvFGZQXyA6qS=qZ=rWnwZ+n2sg)a!aJ(=GkmgFJqBNy-D`bxM@gu4 zn+o3e1>T9q?@W=SdonaXCM-Udcu7TsE8?|BK~2*f4AOMZvTJL1N^HOJR54Z_o(yrM z49+GwAmv^-ZdE*@BO`kk&b>gl?|pQm(j5gDG$3s%zd81R@_ToD$1rO#1*AIqIZ6%*$96sC_(=y4yI?%TS#BnKkpd;c{dWECr6H( zA2v4M@l_voC=Ej)!D~N;?Riz4TY|cHd>&lsP5H9xp)J}xM}rT~j=AW545r(Y%ggXv ziQaeX_QNx^5g^S6*QcK6d%lI#Ph-g65%b*MX~59^9JQXNK+WmiWy9?4{cD8AN9t?5 z!*Ma$7Bv+jFd%@7+TO`}?O#b(S^_x&he+ik!6`9uW-do%uHvm7{Fp=R%a2B)-p6QQ zm)5j-9UE1H&H3Ww8@QV5O86@UK{z_Rz6;Q-_Y$0xr4@nLD%U&D581=YrV;kHy+;M! zFUcR;mbBQEwAQOr9#!6Uh;%>rUo@`Jar&*KSNhNjW9IFz12DmCWUap44>juD+y@YK zj>Cog<5-h|oKb<#CO!p97_D-HdbK zF@)`v>CqzZakumD1kfC70(|;lM$pSHCOX%(1)Lmk@mO8TnWgGuKF2Wa1I| zsY&aS4*8f9)ItzV2Jq;fdH#$`xZ0$HHOxOy5);>8^9CSKql2D-ZvfJAQ$E+Zaqro< zvgUq{bh$wI{w;Dj?J#2%3=^D4)`6ToXO0sWbn|(b;JHmXO6+;-?zQuxxznV9O#EVP7vK&Uzui+GU93QFRi6&U7wS}|&P;auuc`yLidQzVQ4 zviZwYh9pvc-)lZ8dx20#`&xqOETLN=V_&6jMM`m&9j`TWTVxQ*<5_hX7~UMb@I~oM zd%E~TaeTI-X|{#AI>FvKCoWs_UaKyxa}+G1V5aEsJ0+q0InMI|W%%RZdKVcjZn#fY zW%TrKMMc}mwtzB`oLaE|7kGZHqHfW0?6~;ayS-erHsqfoHE&2ygn2~#wSzUW;91+P z{`e&GvZnKd)JNMBw6j!mJd%<4@`m)_dv35zZ4mWI7uk4k08lPk5_o=4X|)VOYZJCS zXjQCn3iK~**<5&@k`>u)upPPKweBLI&O*!p3dkdkn4?U&k>itmLe>o|3aISbctdnb z;KM8o-52TOtaGopcBT1)h#M-V;+OU&;=PUHRbqZx~K+KYgk-2&MW;Sa9sa7Q&gaWtNn4d8BFFlf6#Ql_9a^`nO zSF0Mm=AauL;w{xXKgnJ>YgZ-xe%i+)ErkQa93aUhlkL%ND$6dDQwD=zp$maFxoZHm z2f2BJ&PhJmtmJ)Ov^my}IqO)zL6UYWeXiRm_^Ay~7&LolsQR3?bkr-^8XxWUneZ69 zdWZKY+?*GVz&aLckc8H{ba?GM;h`$B4zAp{7ImE^Yo$kaIUcQBoB({cip#IF?_L`6 zP^s8bHb;l@-d%SCNw#YC4b#ge8ggGH7hP1IG$OL7#8LCIRK!YYG_1+(QLaOf`rO5- z^CCZe{(&OfC)6k2httQ=_p#5ePoVFuK|oa@rSYz=LqR=&pC9 zizIS$H*3gZ;i5h=_Qh3~$DuSyu*ciXlc!U0Dwu*JWe02owX$2;6F;r z)=zz&pc?V*6pz4}%P>0h@1qh&Gvzn^YKmbhY>I1IAMh{5W1;~jyHY^8e7Jl(D$t$l z67Q1c662EKvODw}KJ1$_b4f_X32@cT9PY-`33lMJF?rUhnfHZUKD%f>I>R}KC$5P* zy>w7oAAHrH$t9e~PKl)G@kAS!R}F7$Z_+)R*N{tZT7cESAYd)9taGtztZS*O7itAF zgE^i4J#F*?w;xH%fFR1N(_pq0Hn89EG8t0%qA6fo@Z(P^Y19{1x-u6HoN{t*kgs&G zd0Xe=tc^2(i~j=%CEk4k!0gWK$_%J4 zgRTEs-M&}4R(myMN)= zr{z1bORjBx^@Uja`c>=yzP`14Zc!Q@s`P6*40OhiTco7nHwdhJv3MpRveRi^fli8{5#j8@`;8 zk|I3~h0SW2R(zs`{LruZ2BC#yQ6YCX|F+L`w9ofI0gG?G*Z-IDNwUeO$vN5#LIr_E z;y_p-tg3c?i#O%o3rmiN1eULHjq=OgP7gTe3U!$K583os;`g#ixj%dw%0S*R{E-i| z3$LGcEC=v+Q&p=ablY!alSo~TaR;bXMThW$D7u;|RU25#GYSU(AkLGJg#<%Lmf?d|6+`dM@pJUdmZHB+Zjzjseao%`i1uE6wH1mwa ze3-fZPzaG&Gr8Q<7f*9$O6$&+foa2CPF8`u~J;g|C262md7VHgBbE0@S+)sWg zWnlED-h;x1C!ID=(?;7dY?E?7Q1T8(61tF%z6+o@o>dMu;dz+3@Tm{?#&w5Ia?e2w zQbc-I;WGhL;6Tb9f1Ag5{v^jW884v+7{$wxB^jU#!xrY}_uL}$kb$k1*geaXgWkaZ zPOW%IX5BchgeH%Ryz=rec5>H`Xc}H|!Kr!vm>pP8fQCTWf&vTqZeZ~Rev^Li;1gqV z4WM(uLPW-Y=tqhP{W{Mk@Unj3wU;@2-aaB0e@6Ws1<1a09o}=B@e)!GE4-*l$DmV% zB8s2~Ko>^rEqo|D5dL90y}$hiM=$V;oz?op(rvy0Q?V7lXE-y-hV-(Sbln&={EMsC zR|Sx9qp8#z>3gx_p1x}i*6$HEaS|nFfp0P9)!s`x;M0r7=j7*^u8LX1SenjbU{nw77Aaz6KQ6zMhc_^zPvS!uM!})=yuX@Ahq{2 z)A*fqZ+-9I{{XzUErf?2h%Cy%YsdpfE5KozK=N=0g1#ZE_(IstcgXnO}wfBxo*BE2#ZAJ?!~o4P!lF@bm>W#1@v$) zEbGaEnqWbb^i12BORmR|U9B^~L*o%4>dI5+lc?)_r_ukuM@?{hZ{;OTweVX20(8f4 z)c}eeLXX{5!H9qW{_sYOC7pV%BwkyGm#C2~Y>XlYYONXv#$8lj?U@R#gQ83#~fwbV}ceGQ?Gcn48Tx1wV0Fjpu=~GFT zfYD^uWD8qv_DF?7&iIahwl3WIDy;)F)^C#NoL`LM-{&S;!?t-G{TE(C<>U;fw-fo0 zDKx<{S@c(!X?X@*ivb4+rM7Xg6jsgBn0vf8 zmcP7bto9|KxMDtvKTX&)BBs04-LhaQPovlVP4P2Mxkpowg_26dpx$onwO zDYSG!J1lT@g9ybadW{vXeb@Pna?NHwMftrI#hkxCJt41m-~lV$VF1qW$MtVm;qaO{ z|6>i9B*vBeG2>kJC^(LTG+IH!{0^V%m54?3=Wd|ny|HS}f6s5F52A6&jKN_N;Fob9yd6~7k1KODaQ& z83FzErbAh2A_EV_K7qWLmX1TsEe;PtV~s@4SW@R-%m%~H-Y%QNorV65_Ol@iu7%~@ zrueDFxV1*QY42miJP^{3Ar+nPLEamn+4E|ozX5&&?pT0HKi5__ZVi_r&E%ra@G))r z@%))NBV}mQt-F;YoA|W#pZY!vs({q=%9HoKy2O(|*^w{L;#wFnokB6Pc+Zaacu*hJs;dBq^pki!p`5P zU&Z_=!H+FNpCl*w7FrrAlgIN@{luRLym=3zRd;WK8z%_7R;$=AN=Iin(`&eeVlU?P z(yu@LPu+L#-$wfLXV}jvue@W97K|s{Gb`NFpNW3}IPOZnretUMQ3dEsQ)p|g%!!-1 zQcRI<#QH^&0zntkK6qRehckh@xwcz79M_KISC##ml;07SHS%*Q5Bxvn3; zDlRJ{>nA%O=HJ71Jm%T&m~${&ie@qm}H`_;db-)YZyQeNHuiVNc10u!(68MNbG zp9ZxnSQMq0QKS}SuNJzH&VRXN+TL$T{pz#}EPtcz528O|A3F+Fqp?9UY}-k6~c{k7Ex76anLA`BecXYY9(mV07yQ|^OZ2A;%;EMUI0v=Au60~}K?KpU z-Fa}i)O#f>G~woeEBl*)xB$muO`aE`^f|E{+}Yd<3Zrk+bFKVmHRWX?h{1a*7t zO`rIutIqMp5_<~L6(u{Qip^G}(7@dvqkY3yJFp$4`WZjA6rH#0tOiQ!_O431dJk=(y4qpeFdI}%?|KQagndo5m$x#!WY=PZ8$PK45 z6RPEcxQrMLV2ULAC?8;=U{q6tIX_Bj#?-*pWKT?$6CBTDN18x7`;YxN*1Nn{DRVb; z*1KRga&0HF`U+@|ZdYEGgTLon0&XFbT-_Jj80iOgUJ*y5^=V@qNNV2SGkc!x62wh1 z3Al-VvE6b1$`V*)(>=oMmcO>7w+v%q8~a`U!Zux-_%{!%e}|*=9sp+9CCGVCp8Qm} zKHDZ+-n4B*WyvT8(;l@BX4QsBY>Cin|9JoEifBIu;D+`>Y_Z^|-94x-=BQpiNQcHY z&jFi|`@qRot<5xT<-RwS4;hMn$l67ncxU`4KA-Ex*j7np9h#_(@tLzu;p=}g1G@Mx z5ecgO;2RZv{~7RBHL&91=na7jIR(`f&B~lr2o0t^TzcvNFf_SAs&@F>^BQMk);adB zBkGdx*J1C4-Q)7rq)s|Sxv@R=gM3!F9&Iy98+Kwi2GgfF)u3uZg&zP%d-m`n6!ub~ z|CH7k%z$bbBO(fjCFBw^;*=c9vpozW6fojqMr;4V?X?UeOgi@7CtAALHY;tKx;j2y zHpiUa4tcKZVmzWhk4TOo&&+#QOz`(w+03Wqm>=`+~Pyf z8)&Jn;rEqmzqYm8H~2e6j*)uSdaz7wxA1LJ5_VC&=r;8w%=)QSVvtq>;boQ18#9NP zuB1?U7v52w+4fR$L{s>$=()@VorjEJ@OApqZa=4bs_Y%{n59j5P-fxP;J~$nJQ&k) zs~H~cu&+SwZS1)2e?D)+lkEfx%Mr#-4%Xq^Z}gV9-+USTN$R}%5Ib@pz(PGvZH*{G@&hkX4Xg0R#>)97&vmFAf$M{uicyI_niNw*j&iwg_xBe2B*%kR z%6})kS$e>Hm;+e@4%Xi<-Cq z7MMy@BR#7&)L5+broPhKkxw?O>gzsyT~Q#mwUDOP|B2lt1M-qQdfIG zmKqKb^V#8zq&%IG$Qq5~7Y2NuGRl<9a$uHAxjqYA{ycnQo7(mc8Q+aAKb$Vmt7#?1 zQ^5JGkkcM+r6NrjM3PlctOo^ddJ)brM!X=fl3|Z#q(yzryQPplH_C)*8?)ZHmswSm zdN?-*@Is5m|2hn68sp_rgSd+I3Ir=Z<5Nj}*QkT$6RO}F=XXX*;pl_L}^($3fKk7^y*_CjUlHwp0bgEsUnL`=T!EsKau z7**xz_!qKYr1#Jo!&;(^p34=|FBMkLr2yI}RZpD({2ZCZOZs4PPcqlYdpSe6wZMKs z9PauaK{)D|x}`E=>@Jkl4pZYN>wcco)7fjghq0zw-OdDUHJ%3-x?!CWBmcT3ubS6? zR2YZgI@rxpG3_p_TOz_4Zonq)QZ^lA)z0K40M%3E>KSaUYHGYwhyUKU$r6Y(wmH|3 zrL$d!!b>$Xw+8|>_m6gIa}T9Lwr%JA6LxiFBEC8CTmQ$-9Ns{p(yO`Lb(Qqib|$Rp z_IU8QIOG~*Kxc0s)+eJ~TSEP41$S?XH`Y+w8-omABznSI?V7IS$#*qeX+fXzIOylu zMoLpPn>UMJ5m`GFIV+U#jc{+2*T^L}N(Yod*DJ7#A$K>dypibmGTpaAPlU_5D(!(2 zD1QCU{de3ioiA>ZTe|y!zg#*l6|m!pdNpe-gV#0p11ENAYBIP}zS}(n+#jnZ<2Yd* z7)Op#?<;XLcN+uS3Fv(ipI*!&d(-ws#9Ja#h-SI!zH{*1idiCdQ_fRDDq>CaDzGJ! z5#f)E>Y|P<{W^dFoMp|-M=ba$l5AB|Q|6uA?lUa@*^%+26`>VOQw-bb%XLXSGP`gy zCeNBb>a658vgZ@g0c08VVYgHfs`~C7DBc!>oY;|Gc7_Qfx+#wPS|x!=yH*UZP!nv! zFV%ML8-%Kxp(=hcJ(kNqE(3^yGBHYVnOU+?QhA5xw#%+d#S&!^9uywoQz@!B8Zt#> z3P8WxeS^!6qfKRghrHw1-aA}NN_-$LZBOXU!8(h4SP@I&U}UTN7ed<8Hc$cx{LXf` zu74$30jG$DV)v?laHCa`%Ldm&dpM~ulSWF}C6i*u=y){s;T?C0=peWlpo&xpwujxx zQQ^V?oru_>ClN#;TA-9{u{~L6WsA;wpCSf5zGdcs6uD)QJVHF3ez{rhF2}>a_#ghR z;Pii0pHCtMQOzvi$!s9!%J&c91Q|uSa=9}EBu-^FFqx*=!lp7^|4RKQfId2)kIg-f zKGy4~hUY!i&?op-h}P0_JTVu4 zC|AZx1JA@Af{*NDEsu%sz_l8U1^~~cWme_>_GLHw`bSCZd5_( zQCWn;bwR=EmKs36qp&qJ2`uR=Y|s#K@TTx8E|I$#h#W{h5JX!gp#CgY-cF{M9I`=F zsOW;|-R}*}>mvWmNt}5~+`$WL(kJTx$ElMWGh(_a&}oXz(tRTmle6wZ?jQ4`qDz82Pm< z{0J3%c7s|OxV971!b0+IShJ7i=UAAU4o;BVqH@0$O_t*wZl$`_sla+ZE$Huxok zTNMXgTX`oB*uM2goqzznW|jDmsXoHvy4bW{Z^LcDW8Iib$bVCR0qTICn_R8>Q`os4 zfsbe+Od_wJZNwH@3qgIVqv=fDHxIu>@e*&h&gb!oa_RuX%87`a7NPpz`hO||bV z3G!Ual_5%><0{3O0%yV6HrKq>6xSf`<__kO^xvE1wMj;jXXhwSt^(Svk(U0p1K3*{ zQJWAsy8XMYsB<1S!2_?OF*b+A8lt_=Wv;0cMU6SLwkX1vaJQA)e=beaHPyfZS?-)mcZd|%WZMxrYRO4xgIqP7>um8G*g zQ`qm?W<{P6)WXc>NyDcWIdzzB5zEjB*Kslx@I+f%R2GF}$7yc$RyFN&g^P@81k!Fb zNQ(+*w(}?y7yic4ShQsb&%wwC9zx#xR+&O!jU80AF0l{4E?@$1!3#Ks6%D5C4e_IF zu@>$jPlM&2WfdKn$7;fxt;Y+`X6jD&>}D4ZFwr)Is;pHzLnE75)FowUijQXd{;pg^>ZflBWxCUlMzj_q;k2zkF2?D= zRp5Btq4dJANiqlZq_`I92OX|u{^Cj4s2)MdcBe&QqltO0Yl>Trw~BR^Sj@jG7)W-f z?=avWuhVfq=!y_TJ1jDclw~(2x-2NDI-Y#w0wxn%4gs^Sdl|Ck{$K;co zdT^&FBpyddj5JNZ#r3LD-fqR--ClsWhnI4EzD3>bb)h-%zExIZy^5Q9`$`7#!#+m{ zT=bF6#19?P>RZw!qU&o)ND@B&x%59kWkUL1J|KVla+tkCd5F5dIh?2O!Tfid zK1bBTNl=1MgjdYNU|Gr!j$$M972|g5`f~=6ySpK+JR7JHffx2FKvz#4F2y@Vw`DhA z7{_!9-xY0Q%=JvTqE*dWSQo{O;?~mOmiJcf2~hs0A_--EgG_}Q7Z3QBrDx490)VD4 zr3J7d4*i&5+7S!0y!7YU{?opJ7me9~(km}WN?L=uQ>@?h9Y3c&o<8S$Dw3%t3pH7f zx4vidb5y;p_Ak_#W{=!q{r=E8J|x!daG^CWVG7`U+0CCtNW~q}^P^tvYh$shH~Kl_ zxk=!1QqMOABx?Tl+4ONO*5U>YO2-)jOmP-LZfZC>NL+F*WcJeB^S)bs zU3os~7WYD(=zJim?Nfd{>a5-=M?*lBI>9TL9>;l*w0-x8emqt=eiI1`Q!$>3_e+@P zSL_dXRorM^t-0g?Z}zs77Jgo4$lp`}gjDdGj?D@+rN?p0ic3@eReg}heGSMf=YQ(3 zz+Y6!s^A?&vkEcPF$3!;&S$VK|J7s#k>Wl!9CP(Di=`o07+Z4l_Nf5T-&JEd4&rd| zX=0*s7yFiV{}_`#6K(T?B1;J0`Po3_^1NkmXc-^`}o7!)!hD2 z9enc1a$j3;3kbS#nY9Ky{nv5am@Q+B;c-bprWMv=Cqu)~X0q^U6t;u~IKVA|cdX5? zSAS$<#z{_tHye9Icf79Qs4WQR={O|>qOJ{I@%WA|>H-MrC=AMrWT-?|?y$cZ~@pG+wd`OGyx zFPN9>yZb!o6K2hZ4GX()(q>&r8G|3vnkXi^k$^MO({!S;4^aAupaIR~9sNr0aC{sd zhzSOXtf0tfQbgmQ>0wQ_xE6h9`p^-4Q}*>|UEPguS= zU|52&G5AiO^*mDAbzn-Ly|9eDg8)VRKMtnzUk5`N*5OOX-1m${l7<*gXN=72Nkcqh zzmw1E&usO^@WiA2Lr_UMYz&<`F$~?znW8sr>y@gpFaGn;b2*P?nfNasoHTo_#f(d! zSu87#O4_okXK;nV`diiSx^5E?j|M)Da79Q>m+$!cjcB*mF_xm>Yk>7}$_8&rwmQrk zuPq6yVFN)W@er^NXuync69XhXlo6Xu8;M<)T$XufT7)=r`%^g>s{fTIT>kX0jT(Uz zPtLQ1Psx78u(PTLr)P|QrhRJSdE3kI8Wd9u8%zax29Xbr#q7b0nK9>;LcJ*{<~R$b z!?Q$=!sq886yc*E&5bj6{eG)1~tKEk*&$l`QQwFL8nkQN+wtQmZ>zDsMb*NcoK|u5lkEh)1|s6xC1WHdx4Jw?dd^ zU*nLcgo>3i=@A_=?~yF})W!gHzFSt*oMjI|+-t@a@=aYvm))JMHreHOgd4%`FCS9X zO~r<(4O$C2d(4%!(+q&e1h7qE72XZumX})eHyL252t;I#C#?7z6nrSB<@}sbL-D5q zemP*4hmb;Au=CFeoGW?MJ37cImP!FzuoKfwYZ(gILD$DB$0@b%I<)RUi#nRCUKq}K zDVj-CJ2Irht7?kfJ7-G!TXyKSs#h;*`f=K#IeAtnCn>-a*I2Kr+6`7E@Gr$gA%Y^% z<2T)Q_)s-gbbHXO)GP6x4^KKlgOs%69S8hXd^bC0NOntx{>)2l92wu!AuzD#_ zp^xpv<>yN($DwFw=hU)bx2JeD?5Deh=@kwmODA`fRqPEg4gc%#y~THWU98NU!91;b zk)Hc8CkQ%-A!|7iiHW$W&M;&7_-ih3Ys-#`xNdxk&MOSP=RI_|M|wFw`vm)taE5kL zSs_#kA}sllz2g!k$)zr(-WI~%{?&P;rn&us`p25xy|hpshdoja$i6ti&l7P>+BG?n z8|Do^w+6vWo!Nvu!{3;1voPB%@Bk)9)9zOlJ(8J^=JPGvs%@;)4<@%#(CWok#GfRC zc+tlB_SG?aIh0GKvSv_Vho4^BIhtEWS{lNvy?y)LwA@$ldj!IQ8k>=wxWp7k-`ddVhg*H zj$ySuo!2|Oll|5A0fazva^+jSWN=a&+O%k>L>+$0U7KnuX4u~8>K*N*M>C^Ipe^}2 zua^%SLWSNCt!TlMXjjYgZS26%xOBKifs!DlF&sJRVG7p7ky*4~lWnk=`IU+0l|tht z+`bA}W*KpK?x^}~%$_umrb&~Pr_54}URk#5Mr{)oQ>L@8OxIHM`LX)e%5X#8QVm*) zJ%&`iDdRnGTz9}!f?z4gf+#U>+68c{7-X%jF`z+MCczGX(*qQofLbZuc)n!$W8SPs z-k8Hn_ACOU%I%5r?BWwH)YX}^dCLu0J495p_T$zg_D_Xx!GOPnw{E+voUIY)!bBaJ z{IWQKE)0w5dy$jo`d`)KyR`>jeU0dbd1Nx;xgDpvx2mBsjS=F}3sEo1WfP5K`?yBT z7Xc<5NRl-^-@Hf@X@G0lS+Zk~zv)DL6g}B+htIiaruOXav=~MNlh8dn_VXi9STW*S-uNg9+Liyr%fFG+^3}IV7R3pJ06Od$K3f)(8$ThUkO1 z_7y#*tWClD0LqI7%$j{y7rJH4F?O|9jxoB0Oito+gfE-Wbr@PSx)so$G{AVEYK?*q z)NMfq&te1j{u;=RRjm`JqkYu$^#-C2>xO*<62$rlBU*8Gr>Z%JbnLs>jc$hnN7l=E2lX|m+*XrjjipJp4EIa(ipQvSf%58)Q2r8T zwR26FQFPRc0IwrjmcSQRLT%JJoS7Q9X&ScIY?&hJXUJ4I1ez?PbqM&Hc}HOOnvZ(Nq*E&N~^ ztiXMn|C3NLc;^Ej>{Kq{Xd!}?P|7&(bn3n^Uoq)Y>=CchRN7T6s%+!b zq|sorrORqMS;3^}49!q%63g)u7Z=%%$wI zbU9jDhh2cL_*nXGUhOU>9j;-UFq$V(Vo>UTCnw3Gz*eGC+HqRwUi?Q{zNuv9)NVl) zK~CMg`8CmO3Om3fb!~g28VUDH-Oh0422R zPbSX`60@jY^z;%vA2kG3-*X4!RohY*Ok)t92ZC#M*VgCnaE~5u+u!5CM9=W2n{x!; z$a;>pwVHp@hFE0mU4Evh{*NIhX!w&Wf8+K0tLK6)swQ zFuFce`8S;I!s>%>yG3~C-`jfm`grM45#9CVsvvsk*-@hL$e+V(89fmv{qMHFHak}1 zRjjuSw2%i}IDk;adQ+b;ekq4ebZlzay2aEfYUJsfke2 zBjrigHKIpoH;LE2_EV(0)Q_H5pX8JJd0UXT;7N~-(?iy5GncZy^1g0-rO52%yV9vH zr%su~hvX1r>3NqeXgvdzb(b~N@8ELnGwJCQy09@PlGt`8t9-X$-@t#N5~3V^LE^JR-Bn< ztB_Wmn}TOUoq(^Kp5Sj$F-Wc}+(19#sbtS`8~`hJaXeO$$F!Jr%96NtamZFWf!#*i z$IjLql3rvl+`(>yPAwk-C93I39lf0g=tmos>|MEhK@Ym#I?b=>M;BG>1kP?R5mO!Q zuc-@3SxF_H18xgj>1|+D(!KCohIET2UbG(`YL#BD)C3RfE*z@M70O0L7n8@$e4O~v z(PTbTt-H0y&77Rp;n8ihHo_zxZgf-??XT^t$zvB~US43gd#j|ZCD+IByGJ^{s+E)Q zyR}Mo0@nd>Hq~U-i*zDK&LoIxQdP%V_b6Qcnc!fpihav%09-jHTC?dadIp%AODlYK zty8n|X!aSMm@gTHyM0Lf5Jab0Anta6=Y zC=asMNXOgQ)U&m|6z&JGPDo3(WYT8CaYVgB0uvsR+bfNgU38W&M4(F4&Eq(WXFY{@7tJk!hyH#aGQ{9<}Esv z5h~dm4oKeLUI(w!vgaIACFTnpDH8I>&Tc7J>K*e^$c~Xgauobk*-4`~Aed)z91y~D zsb^2NUhF7=A*A|g>2I!K6-digX;nxo3eC~`l6sm7*p=GGa!SiF&8DL|bSq)yewD@q zWqHj76=gHlKI7}Qbrxki&9z09rRB48r_#U*ld}@Om9vX`%8gAu8#xjyqP5|u=>4^Z zeND5q-bOj2bL|IO<;9139%YWTwFi}hi;f2!Tl};4AY28308>{3d)v^ z6DrCV^juQPbwn3p3HqXIGo`I~7DJ`j&gpnX=BqHy{-s7_E8?Y%UZcDPr^^)1;jNRr z7Fo(p7tCDJ3w2X#N6KC={$BjrHYTenw0tIOE2mH|xnA-t^>iyqN<=TUUg|83Rm-YM zs4uBr(ku;CYfB4J&Oq(_)D;rvFmvmzdYjU;bH+BQhU&2k`-Ry~i!J4f^Opy&h1JS> zDrKCu!Af~6tgAGvD`#3&)?!VqN=t={3ydThymOT#ZM+NCB<-fv3)(i$l?>W4&NXe? zGV8iFZIun{$7YV%flCL6eZ;n{31H=eFHiR6K3h%O3hF~(>sV%O(fr0kBv0ODjmd>N zN!K0E;6%*l47yu4@H{!)M4L#|p^pgOnbUo1$xypgRTuWuM=!W|_dB&|wiAlS|CdYmGW7%U_DrH1uYT;kb!pu1ePGO#^Pu`=Flh$h5a-Hb`M+O!_ z-LfiWCMQU3{)t(v){fMQI?&Gs6{H2h1{LeG|dxeOH^CfIceQZOJ#XJh+r*|kdNwqj(X19fEY)>Vg_#7Dy6 zO>Q)U!U2Ti=5cUQG_{YH;PS6iuR)qQtTCU)>~_WCqJgxF=I>Z?nI(tjBw97PC8XlC zN^OEvX@x;qvOr^Mg)!{fX=7{4>SAq!6td>fB7?A%w&qg)%5!5Ug)z=DRAIA~DNd?| z<=?gC_-bh@#XGXKaaN|2#sVudiPg4?jl%fXqxnOPwV?-w0xR9MrTCgRD<8#0UOfW( zgY$p~e#K418bK*Yu6aZj^b5fULdB8j+B_+vmr$>MrJ9(PAt`09&1klTb0Mx7!)3CI zxWZPiRbDIeWs`HJ!om#mqEw9sj+gWjtD?1&!srZrljO5=YOb;Q28VN8#i`GQ%cQ-y zrY4z|*1*o4W_r2}RjD}VU)#Ew>)|d0=7wn-Bc%Vf&C{|-pKCtQ%*}UNZLzYgx}0+r zrg%+tnxw9wI|sFlRMwVB!L=<`vd~dK>aFR$Pd*&D7VVT^P?TdRy|bvaQLU zlNDyX&3l_$*KnO9&TV=d^D*I_A3ZqC&3Nl~(KoGjI9Ht*cGc^qPCih*B(zMtFT5|T zTl+NfrO`g*^O#*$7hRamEgUZ6Iu!Ak_%LkbcEodo=M5?xWkpmA^?XA8ptlKAqSfE)NAjFZ2Vmu{OGgg^$DK&)tW7s69K& zBXjC1VYXph+8a|@Ye7|7*}A?`x5Nc?17(LoGH&V&)pzLqe!*j-k^M;@UlSY zq?F+-`!E{eMj_r8FOHoap8)zfL@3_JVNAv|Zf82HyUs8sPQ+nM61B@tY{oovo-fLd zDD6Iv7sB3FgIo6xe~+E`#4dV8eD4!Z-Hu+Fv<3{7=aaD`il_E7aGi)p3&v$S59Lf+ zGk(GpxFN(meV?%UCoDpKAu;r+hkcct0gB(7_8|hy9fP;?k8+2(351Q^(NZvThsQ$! zOiba!<>Y|6ywLVv!iLspz@*&J@d&`JJsMCoH?$pFc)x)h0QV{33meL#0SDxT5`~b} zKjA2HfTH#XG}#0p;4W;q*M|vUBaEz$A-sP<4jB8ihAO<@K@PYQZK(x>kB^cwmgNqY zM+53e!^c<20R%$GVEXXk=TAu(dF7|D;a@c1guGDWC(Ir`yhskn5<+&13vHJyEGGh_ zy-$RCVhbC3paJpZg`7o@!PMcyN1u`?G8hm(oJkJw$P4wv5;pWf16Ji~fjPs++2joo zg@9lSw3GmO!}rgJS|bO9d@5lI?~9=Uuku1Ii2!Y(!@P_K(_L6Vg1k`ND1iN^Rato< z?`VMir_~X1Kv8aJ`sW2{`0xrj;3zlr6-9X86Ajq)d0Uq7;Q?~MXI1s*X^kKd#g+FC z6MN_z{&V`3Vu&hy2o11L58eL>g!@Nv`@t;H=9ac7tbFZ!f+?-(5OMPNlI3mu?UU!s zAUHK-TzA}+sYi-gHd*{oyvc>bu#+WZ!sRd&y!oo<%`7^>a2E$&!DS;G7k3y&6A2Y0VAR%dgfmUBokVNZA~ubsqAfGX;$QPB5*NN|az+AzkBv zfoJMd!e{D@l%p`tcT+lGVVaOqo-Sw3DxGg{xLZ7=5loeMkbLsFoqPM|P4S`e*~SLx z&XVFXTQD*XE?SGiUk^8gNH(F3!h_1xX=};faUw>$C>(&yDU%xDlFnBQHMg$zQB-ZV z1-gCAhpLB&C*e0{@CBF2&DPRFY5nLC<~7{2AHf~!s}SFa?8Ds?g}2VuGx+tjv;FE; zdrPE+R1EK8Ynx4p!W*?KthTZ|n$kdr1#aBnE_g+cHC5WUZpDC?Rda&OI1LPX1kl=y zjZ+<>AKkEk+l=dmsqJrc%-1R21Y)PcztoWY98%AhRHt68KQ9p!@e%B8InXa+8{0jblsp7Y#H z!+WNfqY-K*qiHv(}W-J9o9pUwf?7MACV7SBhFYS#M-BA5xtCq-Y0Yu!jB`{r*IR=jKka~A^WGg z&q4-d+ou^JRwqttC%O_x1pl!Y#|Mkuj*uz*ffYyo6YJi@Gjx;QZN@%o#__F^WhvNV z4D6uYVyz`xiOCj=GcLVt&>Xf-Y>n6ys@ZFG&}hfioUx8?P3Mx?)~&ryYnRkQwXS@L z?UK>fv$3zxqN#=Lk|ud{X^XY4eTje7wd;{X4L% zCxq@WCJbj!;9`!G8IMNR^9)oyp_LHM9BDm;l}Oqg#%JP@u;v_VJ4f?jE<^fgy2TMcLl$#7 z$PqcJAmRk2HJ&!ljyaRI2*wdoTbyk=$`N%#s%g5y5obfjWjezVbEBg3CE>E*<=ETZ z7e7DbSU*)L?gZIA9zSpB1jhYe;j|)%nMZJH)&a!b@rQ0!62$oFO0yOq&JKQ?Sta*~ z!kIPZjLjS@5N(I()f_a4&`XG5jtoTMC6YCV2_o?l)}3Pm(M;s4GbbI+#4u-h=R(%U zVweFj=9C>-v;~)Dog8^43a^emQU&=!i3a3%O>f8;1aOI>(TN7^4B~&$L}QYLGVBVS zkWmO=6GbHe3hWf((P*NQNX1YK#Agl7!a;S+%BiH%NycJK1?mdr^=cXbnuJ7gJB9Xo zEs0naF{%RPS#z_fdKC?_iX>LCwET%#470L&=~dc`SZ9g0{62+$@zi+0Xo;cxy;+!( zdPfmXvWz5JG0XzVS)-G1N99&h?Idf7$9(8nqLVO?lsjPukg>q>Bm<-~3gi`QQOE?z zk0$Yo2Pps}4XII6;@s3@S#H09b6&-~sri6eqf`4ww{YNsR|#*LF5uQ^ihW`_O;_C3 z7{@I%hw5Y;-zfN&tmO}Fe1xM|h?CIJiEBpo+;Oo?8Pjwar#RV}Bd4%QG1Dy8nUrH8 zCzCczM$4ptNeNX+-K_eVrDK6(W9uv@S4Kx=WM%mzzp9L?PLo=bP?J)V6lPJx63r6H zvC6T^smh7U+2ZkH?Scs_(U`FakvJ~IccZ(Eu@=(qtEJ|{?kl$DNiEFyQKuvKZ05n7 z6RlsE!Ixk5gmd7nS=n%SwlVDCW&{V%V}9B27`NXC-YhB(YECt8XaU?Of9;Z7O{flq zPNbpmqY0H`Mt&zcA2b%(V0mPYxlt@F!hd2(BbmS;3yXk3Rt*aY3v!hhC%Lq&WcHo- zR|(ZPB>#)O zag#2u2dMdfK#cl8l3GYextqIFV0`Ii((G?Oq5?s0nNi?2$bc44ou84I_G3E*&d6YGm?dS}2#KM?ia=w$s#%@(iLKfJPRbVMhfzf}5o2FP zH6P`eiUgjW3vOV#o$flOa!(KYFSqS?*Wab#f;Xo7K}6TwN(4i@1;t#OL3G()7y|?I z7!2950tSI%C_$ugH-;#w5{0oRrWh&W#(8d*6As8JvR^LLBfBEwI8f1sQtXUPSxhFC zg)G=HC(-e?*PEZo!x-L`2cMSIK+YMm+jQAS{-5lvG(ot8&`D_aL0Xn1o@l%V76{Ck zjWbd+QbPsIOe_wzSQFe60$Tj2W$NJ>EOx2)%gS}~b*L|<&K5G;n=!s{{)+75Uw zOZn!rwn);gq~D-@S;@QkQvuUZGxKrJ+dTE86+uX58TIIPwTr@M;W6eL_0~`Mi;8Dq ziuIcsHl7mNe0@a?pW6+Vm9~|(r^?!&wJ%w7tc$FJM-3D86W5RxU5f;|^Ul-G-AVNs z4H-8^R!COAJ97~hq4v_Cem?9eG5mq=Z|eVDL(oYR9J=#V$*zSPt@~w)c971`1ZnTF zyRM~K4xoT3P+&c4Ix86+cNHhL;iyf`@eF>)2o+(gLr=19o=W0ri@4}1=A8AM!9U=i zbM3xSj-B^pD)v_{S877^Ug7+qc@jI{W|>~Y1WFxkW}MEzeDHT*?MLv_O5H6C9fG?N za88njJta|tS@e&Rlc+|QfOGcmkP{)NV*havcq;(eBX5gB2|MW@Atzo;-3;sABW;UW zx=r;&*%@55hx0@#Gtgv<-5E7^gO~1iwd?W3>+MUhEBeIX?Vq)4^2Fior+bS#<-oBH zO`9~f$7>H>C#&?O+7Ex{dU2%>BC{;?GwD*HH!f38jAb|c78a6N_9e0P_kAa`s+fl9 z!f7_D#UB(P9Wl&;sJEDiG$BRtH)6qg7$+#NWxRhdrwAix_W_2%!MV0dU!w%_fRN#V zN+=>^{3^>oaR@Db<*5{-eI^ADCvMEiVGmkR8A9(hFx8rrwHhsp(L_LRLk#CX*{OS?F6})` z<6a)VGfZuTNpm`#G|q6ZZJ{qSaL`X!-caJrr>a+@*cDm-!{Lr1d(UQ&&x>m&km_r1 zDY)uufBuK_Hv~xb=dADT3DT%t?Gw{%_*}ob7>a6yMJ%vcW<6A@|7;h*khUO1->H3kOCd7(1ayA> z<>BA-J(-eo>b}PuhOT}?e>!byR5EU4CMDF1xNvE7MYUni)#wMR{G7WU2l%PyLu4#r z$r~qOD6Q)mcAul9Xmc7T!PJdOty5b=Ml?pW0a@y1qF2;JJOR9d2LqV9IMtF3^^A4% zQR=57)c0TUwIJe>y>VqbG@47CCTzNKOHI27;p^3Jkt>gm!wACbTr`SL);$tu3$2Wu|HiSSNZ(55P zRsa}m#>%Z64ajOx6@D`kM8Fe1ry}rXQPGO9{tUPfLEOc^p}!3jJ4d)hXByB#`;KjZ zg8jo>9|IfVRF5be>T)aS5Mrq)w_yCpBYEoaYrvM^OY+ep(-eVTCf_i(PpI2F{hcQY z{R>V!{CQ?r^p`%&?7Z$HY)5?NXp&aM)5~V75|-3;z&I#mxi1d8o&KfF;g9GY-474wft`5KSNG zvbkQ3V1k1}^$CsDh8d{$u`poa;aK3|DEb6w`UJiO2Lbv7!t`^-tL607OoywdL-liD z`UDh%gN)(fBr8^J%+e#eQd^D4c_F8Tk!sDaTk!qP%++dFNhwf0}@UVz;G zi5nae;2k~~cLUFj*~x-mHHdTL+zw69J9KU4iM)EqTHmMmirv*m;OEOML`vHKZy5zz z0eN*9RrUKBUJeaqO)V3BwT5%wX8Cz^SzRskgT9fhRzO0Bt+Wc1o~{biu15KJltmrm zk0pI00A7Sl2JW{+fhs62w_zl6{yX0&?E7d+ znxJ;MvY>V`3*R5hP_R;(a2!3$r?BaKUz&NpO8=Rg)~f$rA%rs{J z4nnuHoI*ghHn8*ZiRM(hB=d{^sjR8duU1$p z80KTOwPI)4iF$S%DvP~i$sfDPN4qIUiA+-@^ivgjyqY7Pjp1%~EO+bJhb;}`4rfX} zrW0xrNqRKalN#&(4b3DLH~-29D%2u0>oA)1X`+#BLYFfRaQk5UML1cNd`NS7rJEt! zsHw4EHKJr)JnH1G9i;*RnCeYh|xVDWDn~)d+nVP5OE*`2(`ZMQjW)l z(tFCgEucvET-ZXd!?^Tc*zwg6(d!*eIm{XU!jdG7bJL=3ie9VqRDg{aDEJ}gT+%ER ziMls%VBp^@pam0}Mvadg6F$_xw+nNVpPcI{7urkF4j{)4qSRoJeI-AP$m;)EBS-!3 z%R|0y{>m(_StYYE73;6r6f|p(5&J~ z3rNA8rX!)&kkZ2Fn|eHndZJS;0B3ZvHbP6hlDciweMQ9OSO`0Dd`POeTE|3AUB!PSfcV@k*88QI*zb5G|d!1wm(-ILP=F| zyZ$HRmv}*Tp#(;(Z}J7v8*F9Ozh+~FgGDUgmy*{8tprI^X;LeOmEwxUg-DnQmvlBl}RAL&^JKn@@rS;R*>f7~iJDPeK-@ z`0Dkab7e#_Q%9Hei}dY%=O_F;r8NDvM~k&GG644x^`!L zCIWmSvO3*Ad*CoN3+!rVX8jA(iPafDb)7Kv%Mogu3F=1^&XT^PV?{k1oIrQf{7IT6 z;l_cN4;zmgg2$mLFX&0Vad%h)o}j<@i}XH}<5|JuSt8?EgX3AG<5`8{S;pg8B*}ae zDSR}^d^9P1l8inYep}SB_eo_*-wT!(sIuL%7C&_y)?eP!?rd=zOT)f(PCg zQItm5(4IJFvFxkmyWMNM-5HH|)L%IM4W_U|ANk0C8|+V4i>vJqv!MPC%P*iysP>Bz z9#w?=K|;MCU4h?DAw5ANyll77l{_;%NkO|L=ZUf*p;f}G0643CQUQ{Grudd1XH?B7 zg_RSj07xJw5lJb3EtgU?rmRb78TB;EK`En_Po%h!@UK-+uP9euq{2y<7-cmIsg)F0 zdZ2ts5R|C3SK_ElSCXMHiFX)((9wr&)?^cx=QeIW>4}bIq2R_G z+Rx)PPYCZ2USE+aiS}*Odp%vr+0=Tn3^CPNoN7vVIh)AV%7?uC$^vv*+r+E5rK`Bs zTNUn-Ge+9GT@Zy?JK@CWPTbJA_%hs1lIdhC<~ zF(caDLNoM&{9lM|P6rI0;xp=BT>QAwz86RQUc5SA?t|340-hK{+doHSTg9?D11UeN z3~L^3+lM&hK78+fnH&nfq0$C^CO~ib3;aOxlKG8YteDH&q73-ygNo--6pHNkD=qma zQ*qMoL%AloE#$B5<_JzW21xge-vMm9*_~eB*%x6>(Zz*}xlm1t+kRr^cPba4%u}J> zTm6X`F({@Zl+5morw)2%tR(dKXZg3^PWrpzy}HxaWhylo@6$Q-px{tcY?zLDlOVVr zIVAZlDR?cOuct%{MJg~10`T)>u;OA~WA=>mF{ThH4c~Lca%pU)3G@RXpt3>mP^XK8 z<(gFi#i~vGN$~eXt$T8O5EAHAjoD1>a&f}cz2B5riGv@qd`u>|1?9SvbfG^=`RV6= zC!77$I#(_KJdHE|FvkAQgy6qoBm19%{~{?+JyHRlodUh_Ka3^5Gm-eGp!7(E=@kmm zD*}=!kjMY8z@5B#`)jC@2Xa4(@-q@p^^WB9WDSN6d=d`s+yGS zdH*mVGnl5FO{L*(q?&qLPTPq4x_hKKb$ZeDi@-`po?s&FIB#UgHCpfMc5GzfVll(Y z(?1)T?Xk#J_l+j10d6hDViH`8KqzRwx@Lao;-HF`J5=v}6$cG4G?7#KVxKfB7 z=Wz?Ys|?mX!jmzYWLFwbVJ=c#J2&1Z`QoEs_Q{J2(%R3TY27g}?bRBD2$MoG)hi*p@GDACc?z9&< z+^f7+Ts=3SQQ;ql5KWgX{yO&GW+sR*do-Gw*kmoMuv%+C*EKuIdfPR6YB}g z$Z3_BTakLH-5Jwz=zAU5a&_S;4&qh5&-z$LOh8(QAi>+z4BVc3eiQYW*H@X^Hh)P= zoyNY1Xx*i$sWjV%n?LB)#nbv`-rMi{g@`VbcnGaV8f{XydTgyo+z8(`3&$D;W|m zN8yLz(f_0EEr80t9ym9^BnsgG&hR?(Po3oyOfA8h7V4x!;{P zf4w(V|4hxRuCsgXb(TwaL7%<15mVDNFJ;N@oJ6#8($r<}5aJo-3S1 zMi;p?n>!rRw(OJK{90+bQ{OCqH}5v4^C*VW($$yCpK9m=t2_hcmNsjGHYzPD*N0Ek zG-Q!D_H9cD0;hEZxGPpWaV3i`UlqI#3@M)>JDR4~4`xio9y!cW&#aKS7N3l^Aj%Qi z1%rSI(y=(?q6m_=JdIxYlZP%`d!=`j&DD8~Gq!hFmHR^C9m@8}vDyw+LFP$0(ljCg z`SF$4NxPQYXv5P=BCkFCSJjre6Y=JT7N% zy3k93I+z(^VmO%_Uaup!k;8xJzpC`1xEXU+WgQ;seJ-l2 zylH$G>#>wHdPgr#7*I9&mMQ{^z4+3Su`3pJXW?Fgr_ByZ~C&I9xfl3dowLDyC~SrKOeE-jzyL5 z7&N}eLVb@lwF}#K#e%nxN=;UN$BFXJ_@z_+8QrFM|JsLB`JK(xs++T8O=xow;;RP3 z@v!X)V&p6JELm>I6eFIvRqNgI!y!S+kkerX`}!}>q@E^fAO|78ZP^pD^Hvd*m81RO zt%bElm+PgJR`WurVB{#tsQJtSXWLCZWQ=2xygdi~xaN_Zx69mKQbz1!^agEl>Syn( zUBQYS{id%S+2-vObM@&b**qy{SJknw|HCxkf`rH zaA@5PY>E!JAZFR!7YGDWpi@f3?a*KEZh7&JfJz9dM(3s<_uIBgdR5cD=jph(e0Nlx z`$PPJ2Jz{zd&oEIgI4zgREfJ*cVNH`0R|TTbe*=wzDb;JLi@yA#YcPvVI8g0Yex-P zie?Y4jbLO_FNdy7;@&Z|mlTMe@qDMC@p{jMg^1ffL;7L)Z0v1~*y#7_95fzZhd;s7 z*T{#gSD8Z8pujvZ=v<6X9O$>;hQVmypIBAupB}1CEWla{^LTn>xXQM(D1*$cbe*Y9 z6Lf?v@6++&lE*wt_*yFNGaGJklQ>n<%mm1C`cLRPDG=;+1TLAr;qp*9)X(oa^cqFX zwX{fiG(TB1TtFdAH!c}Ix|r%Hr^KT^;b0tRw6ubM>lg6c?nH<#nXTnasWTO~NP9GH z=Du5vyfT?5*%KO)mDD-nuOk~TJ&u>IvbMr&N9yqCZk@_WqiiBelX_pu4SKQ4j zC#Q#t;ZG%KSo~%l$6s<3Q#PD(&%b7->6QEYsM^`^H3ne*ZjtU&ZODBndjzRAb1m`< zSM50>0TwH3>)fBpO_QynTPN_Lyvk*VW7`q9OAd1-DG!A+-otgu;|Y&avGx9kpMtJo zar9I>$}-Y)mM~^kuCCi?l&>!eRf@D%AhmS_29g$Ee332v1K|)6;2sox+}dTKrNr^; zT!lQ>lzAfC%<4yoyWJbhIvsB*@Wr&9WVA$#+gud@uRrdC(eI=B!W}z)soNJj*Oe}( z@DuE+8jJ0@w;o{vddzlL_(o4oLI%r8es2eC2$!&f;*(q|1``$BcO#`}t0So88#>o7 zqtUq&HF4G^_qzIdxD<6}gb>SD4&scN+YW{baZdfs1v)r(m@JzZp9+jGasq)Ia09Kg z91T2}!>)w>U?|AUaQf|0cUP5bSpaSNsvWJoKuil2|8>&gWt*;f= z0u>shdm#>0zu@p}TkfbIr=7$wh3JNLS%H+k;{BZVr{!nK)0R99>3QeegS>CVx1*K9in8Tx^<12# zzyTP~^b;8m)SBC6(Df$@+B_M4!?H`I4(}N^ug#HKtE(X$S>>~DC z&q)?b_a!fQU>*hh=^?j~Gnbd~BLgwJugDgOS!;V=g82y_NvadiH0iVg_Y9*l^fJuj2dQ~_-$&y*{SUtR@!I^Nd2(&)LpZhFYR=;;#oy@=P*wmZf zWE^hQLv@-Rgm}%%Z0*pske-~-H5;OgV!!8)%Wp!%#Jcz-R#ut zO&OD|@MxZE_6#egtW-!Zx>KAb?vYDAc6XmX&6OHk#xtZB%-iY@V`TkGXS7Gia~qwM zONklpwf5BHtn1Rhy{{WpdBOcna)RCJVM_hjcsWHs+?UZ6%0~@9XhAo{KdNUpTj2zn zzs@)?I+U$&Z%CA+ur?aq;sV@8it0u5i=A`%gA1 z-FnF*`c8vjgKe=WeqXnMJ4w*8#F-!aRx+nX`wHR5NQ}OQ-tT~t)BH&x{Eb!f2j|A z+T*L)o$RvNFTdQM{Y)c72EHo(kp7Iq6v8aR$inJ|;o$++{(7#2S)e0+#BzOX$-_L2-=09SlXlm9t%t`E zu~v#r$8EKooISPTVjF%C_wg0S8Q4;zraR%(FvkPh?a=c6b24A@%y7%deR6-U@U?pQ zamzq-?()2kcjX%7hQV{2ez$ci;Ch_fZ45sn9M(W)kuh-bOlG~n9Tn;*Rf8i_mSUop z?{uUF1N7t1k7>H7108lrMQLJ`FKp+sI_}=nbof>Gf@-5^_$p}H30g9}Hy&-gg()n3 zSrT*6b*f5q&<`9@Um)vAXMiF9115w3(-pt87*iIwTSO08&oU%oun z=jekDn6+oikhUtfb4dJh1)Vtom&*@jBk#$hAEyxAZTDB#Y!$%&c@~-7;#yzLSCS#271!<)KHxqbFc+I*rqWF>?TMF41G3HQtFRi5u$`Aj|tv&B*W5!fUp zF$gOu=eWtg+Bdy^Cu3@KEuT~Dy;GZ%{R+OEzWK*8&}XJ1Y0qxb^Gkyh+gwJ zTyjdnU$DTH@7`~@)^KZ7auRcfPf1ZOLo-sX!!TmI-+GfY=?-Y2p@m7FYaZpUZEBhV zu1K_SeV;Jt?NIGMmK;h%DAiC#!)qbka#=AKUJ6$`gwJTGv~=-u4a$_6%1eC)onl(K zO{CW9;p!)K((?zcOHY($bXYS>>cXp_9m_ZmqYey3pdkz`bq&9JSHQ*~4G&{zWnk}M zXQ*rW7qr$hgNI?};$k6UBKiw!5HV>Gu`zLI5fK42h*((IiP$)}z!PQ;Fq)N>hz$S$ z&sbPBh}fCg-XKm5B34e$H}W@#jf;pKzzm+TzEQBe(XxU$S=d;>5F3~R!2BkS{Y?oA z(;LJB=K2Q$-{oXuBVuP|2je-|!2IlQT%2#3ncocJ>OaWH$}`W%x`kI{v~7qi)CehGo0nkF4n(Zvb-7gACTjX zo`nr;-CvJ6!G?mTZ}gn(U?Q%+tXyCa!1RU%0N$`1Z@vRq!Qel%09LTgEPyuy0PJ9a zEPywI0qlQm|I5by7M_0yIKUC-;Ntq1mGiFwe>1`LH(q~PxxhsKkF8NVgak>E9yykMqn-oNtc(H31BRlk^wXBKj{~0r;O?@zx38kbn_yFR&2s2sZ9td%-iX zfWL77y9j<~dGq?eW7uDse?$6@6!6Fnc=PwI_x|m=w|;x;w10c-t-Jow1FmUsFTHiq zzy0&pId47lZ@2vA0XN87XZ+g||MtRL6a4k*&965fz~h_Ne=7fWqT{#e`^+e51a}x-+yZItr*{`@b8=z9Fe!E{iopGD((N$`cF*%{~f_4@_$tR z|7z`9)c#lO|1*Y-1>Cj&rQF^u{?CUn3pknor(T?Yi}$}H{jJ>ocXTY^LSQ0dWBadn z+1@@6{)D`N)}A}(+wIR7(YCSqac zUvY)!w#z{?~LEOW#yE-BTet&%mT zpkEgsQvsQi?6>CDORpWq*0YP|6>T@*q3(ts3Ku8{s3BhC6}vQu9In= z%eg>4?m0-AuUoXL?l3rQYY6Xt={HK4Yb11V9F*sly+bE2)S0ViqdRLo_VR&8@i~Z= zZadcMNUwwJFBy7ACw=@P$C&u#&$XCsdtRIUW4>ZVRNKe#37-oNr;ksYk361Ya<6uH zj3-}2y8wf2^Bo@^?RlEJ=30cC=}p`*{$$V7`?g!Psp`D5LAw3un#O1O;=Mpd|8Bqc z8J%$dLT4={oxq!N?3EG^v-w%ex5Cr)nkCj7>rdb9O+Xha4{`VnUglPtr|+t87dDyd z2~=GPO28J|S8Nk%MftD6)B^Z~O_Q9-ywZj|Au% zwo&K5_BCYf2S1`jWkq1X09D`RJ4l8ui@H?&un*zKp_ zQ#q`a_%rqdtig*+lC8DAEZZEjsaELBO}6G2+4f#M7)mD4m6sHi7hfsIGSX-?X4Y

      -sder*H^rh8{rk%5GYTj#H*iqON*Qm!GbiZq&}#+O(WGZtglg_ zWikAGlGF8Q*irU04 ze(J_c)EoEwJiV+AlS00hu0p2Cw$Fhlo{EQ^gtfxs2yK%rK|T~~5nxalA6|_tBzJL7 zK2Hj_7mjd@U)9y8(jejx@=}sQz8dwu`%l4~6RSAj5OA z_(*XXHCy;l0!rqHFtt3a zwUWOOGMf}d)6n!$<|nSQ)G^Bghs-!sCw{q*=;|*tDj9U1AD_cc{^=XFJGs9tzCXpQ zmWYo^!@>_o95X;gR}C#oDH=?9c1Wp9`I*HBQ9sjWVV+nabi9iL<3M60P};cwN;c=w ztc!u&?2BHXVoU=$NEBId+nN-{C+}lUxGfmqCDvx7e-28?T7tY9K~HaQ-n0M8jMF8rY7s)<22*o-w_QrxQKQVkC`Ekki_UQ=W1M@vHE;jW1B zQ6%8o9LLxBo=6tqbO6GF*ma54b;&l}zMQ;yjE7Itw{3Z)Xk+#Mqe$kY_U5KB1?u{VXO1nSOUv*LAi|K8DaV&f%u5qc zRLcsoicz_rE_&rR?BY37&ykY?1=vedxkkKrKU|H#tI6hAVzj2=3E{VyiJk@8e49ma zGnmL^8+D;r{QklcU~I@n<2ifT}rEOlq+H6rT9AW3{L|y!3nI-}8`{OTsf|fyCs4>oX*AQ@(^7#6dUQ5sreSjj~ z_m-roBQ?dm2(H{od-}ZhW!bZT#y5k~)bK@TRlKpb#u#W6x!=Hnbj%lDm?Bfto z$9_a-Yx&X)9u;Rl!3U7}Xp))hef(s|4dM*ZsRxQ^zbm;f(i1fDfzu>T|WjrCZ2BuhI*J*x4 zp$a#nrL~8#%bVb~L1Xv(YH5~=IQ^dRi*IPMDJ)a|Vhzf)WTVJo@b?noF_3weao8OG z&fg@61^VJMOaE6%`KBv1LxWl_O!Uo!syq?)^lK;T_l@<+EIA_Bikd}IUryJ@70h70 zj)fG9_7RJcl}X3=ukxm3TSM#$zLSN`Q<~Rls8i)Qk6s2ih8i) zILlB@OM0x8He)4Pb5N{HdNgQk706`@drD}|72{k)$h8$hFqQSB$RkU7AmSP&$#05! zen}juglN%JDU#2Y^l-5n_7 zp7smFu6Ll7uCr0NwVpH4Kvm}DKW8X`C0LPpoaNQhs-J6+d7;svRY@$q>DT3 z+wh}DS?i3VOYI}UCK6Dz@XNff1@{Qvclqikv- zCr1{jEPOUEXCWt8N0igoMke8;W?#nRb@`SnaFb@sQAX(~*ZcgJx#$6B4aUys^TxsKM_t@A{iNAScKMO&VH zT->tbuh6rPkx@)ZL^rEn4z)g}xA-qb5;)p_n4i3F_#t`RC}`SXZ@zGMy-eZ3)Yw!u zui(`&85rvnLxS0dfu&>R-dGnDapD>WKTla1qj!RHqHgt}*#>=Xpsde{+?jmNr<~QE z7Fk7*)ft}dYxAdrGU(@dZ|KLhz8lPWQG3DEs!#ZffywXZ>$CGC<{`7f&4o=w8X zgjNrm%6Y_Yx@uXM5C^7{wpBotWeI(BZ^Gj|j4i-ACBlqy0#b933)2>CK`+CGz>j zMn>j9F@SPEw7X`nF;d}TV82w2A&$#Fe<+oiw9A20$w(nt2tE-NeFzgh0!?fHS*M#I z7kYZ;C6d+;UMpoT`1cVFz~EHazaZ$tn-4hSHG4J zt(9y?SmjmJrTP%Y7+oOFJlMJSGi4i}V5;eSXY;lo-nA7v`WX z`<GUfg{sAV8@>p9nO6F$4IU{xsz!9 zdbC;opj87)JDeD&=O12Prrk7GQ#4n%)XTFx*7|$LM@N%YTZw}GC1#0F=Oa>!UVAPQ z>IZ;Rs9(bpUt?cuAg+LA z4M?}6CNt8FJ=g(r*2E2P`M_1aZ_6!6Cx4W!#1c8ab2mEtT4Vio2q}I}G>AnONo#SV zmr^zmFJ}^V34R=*zR)9u7})1-@ynd&)il+H|CBc&8apKpJK;ET)V6=rws*|2cQhHF zb|mscn=&wtK9nut=P&`))>i3xe4$BA?+;crm$X$sMCdSIOygUlm_`e|$dah;6g}eU zGu@YrjRadrK%%Stve0*|nXZbc#UX)@h$4JQx3HCX!lY zy)I+7soqylzL$(?-uJCpo2{o$S(lUdsC(B;LL)(ZdwjCU041avM%CM(>Py3n*ynb- z0=gEu61p4muP=;&4AEWsLk(n>&(D)7i`m@7#XYK!)@Whk@wPXL~93 zNu#>TGS!mkSS^yD0&`4|aB)h&hm_Ar>gl(!mgstx#O@XsCq(L2H0rh)*eYk8{L<{Y zDiQelA?qyAx5Nr(mx_f*y`#OUIwIWv8@~u=)R_)+29Za&4Z;Rp*D2B%QL3m5;RXkE z0n)0V3+@JeKnye`lD5blbr&r(BXMgmQ=kpr#=9;p=trbLBq!1%q4|(X0$qF|SRsHA zs?diny8yQUL+D;;SMZnaJv0}zJhbS?HbyEhGA}AGqI6VXsBzEKru!!KIsUojdG4M0 zIsCcfxw5SkFGD*KKO+HZ25JU+2C`T$VelGiRB-nu@wx3e^SMu>Y^&lj?Fn*F4`ZCj9O4DjSt+MA7zE! z1#UoW3&2O51#dk5*z96eKz$vgPrQ?z_qXo|U&CJ+I^KdJg5&5SJv0AfeZNtDZv5hK z#V@vic)P`L;^T=m<@iL>?rR;;rYi48+@XOh6=x1(!9M>lf9~Q{EhEI?oS0lr@Gy;^8R-I8>+`-Z(wO{Em zXhvZ>{pqb0DLbQhSv^}gatpq z&He{&!z()trlr%?eXC}4*`aQicB?KtHx%Fl;s(K;s>Q9|>AUpI$8{YhsCM5bR-byA z@)m^F;3aA!{@~sbpMmC_Sb_7Q9xM%KsWi5BMxj@p^j)1zSF3UUpf9xEOI_Fk?i#NY z4N8Osl&Ghmbf&|;xtO)BKU*%Fry?F7W^WGmE->$$uY)MO3cSr)B?v1rc)V8bBJSuO zxt`u@`w@08ozWQGz@BOFN4+w8|9+L5D+cWMU+MT;gY0y1J?<4eo2|5htm00XSGcvx z`B5JMXKFLhsv9-M=otwbXWAd0z4Y5p2%gp32D}Hni#rGl95>qkeesb+DYud|Xl^0^|HeI%U4hgApa<}3~MA!dB z@Kk&^W3K<{{4-hJw0|$R5q{XMdOu8QhZ}=H6dHQGy=v^G$WQEYuBy}tWhKoc`o!La z-<7DtOBU4Zs>mVEeTwVlOk~DD=|P(w<#r5qJ!@(cDqi< ze!zc!rO_xzbfwKPep{$Fzpe2-@i0u{`|spKX^wuQ3;U@(uN(>r{EN2xwL)qM+cRzc z8Eum&Qd$^TW85*a0<`nbpUF)T7zNz_9CIZp{E|BqKTrR9bmNvq(hG`&s#pB(Bl|S_SgdP|fA~QHZ4pHs9EQ)h&KRP&8ya*&HW5_UX*xu_OE7K6MYKlUO z^V;18GT;zC@80nZ{bI8pWLeeG*r@K^_TJs;_wf%5v2P7ff<*gceYP|i;+zp)v&r#^ z6!r8Wo4R-BcT#g{bO>sDa$zI6nvp$4#=W6Vh3g->B(YI$CXG?}-RIp8Mr}ViQWP)0 zl`|v&J$niyWis3=DOM=RcF768#iBU61~-0vI7LcI;*xX-5ucZgr~)szZ#b849Zfdd zDZ4FDM~(R{RRbBq<8V zH5BZs8!{UkgCE_Nl@Uv|2pIas+5zUrzvFO^8X6GblD08i-RTq1t?R=tty*jqCuj+}UEZsq1SWB~-|%{^CV148iFSA5kS2b+`XMxl zw<>}!p0;Hdx4nFFR>9?)H4tkh``EWG&1=9FQ4W2m{GVH7^X>s?^+*yML(@jBxl#?IDb ze!o9Oe%BHKU1Y0$mj5~7JzrJLO*^BB^_*DV%nf>aj7mGKTj&o`)dmfVV3+7{enm)oDR$f;Dke&+Z^}!vx)y89sCHXzu%#wHW-Q(&TSQO9AQNzz=+@7 z9f=?tg|LKrP&;-T83e43CLYQfkd{9TXGter?o4LYOS%23qO#kWT-ul#(Adh!f6~rtex5m~lpd4D%4uw{ zX_%Z~zuz&hzBPEkMbPkQ0MUjcLo-<9)*;l6WrEPWA~WNF--gb7nr{`9v&5V~o|>Ac zNx%)fn;qezX3qaA=B90Aq@@VCa&(ZhnEN8vI*+nf3GLcZs|^^Z-k5EFeOJC{r}^a^L4eTu zrxcQB&2PoyA}I4CcDHmu`nRaCZfhhd71V^Dl&cT%(INKjAI&dNcwaEu*oF*}6U0#< zjj6ShcCy-ojiDSz;7?dv9O0sLTjw-v%~;|Cj?pqcU}JlaVCPcagqpXQVY-ypV7l)z zluJn8xb?TNq&kJQy7MPhXh&P#N!xlk32Uw1&CSli$YWY7M?Na>+8^BUIU}4{jEztl zjo9FoCh4MPM=+3Dw*vPhWJZX&61~Y7T;&oCXXz6ybi3o}jY2 z(e@ZR{}F(vgJT@)0hzw%OR5IDuG}u+J@6xx1#f7`9u+i*C_DMxWs;#axN2R?gT#|$ zP2&LQ{gUW4YJC0F@M?3~ayltn*^=TN{|K3`TFf?V40u;HncieuwO{uaZS*tbB#UT}Ddn<1;6=VMK%@ha7J){*u5baE(8OQFGj$u&md zQSDhkedbWWZid`cx#TsoPP0UPrdXw}Sh>th`TrC6@~R3kZ(O`RF0cgcwEpK^!(}fj zu*)m31G+)>3Fdq(qygzPCu8tEftByY@ICYLbF|KM)K8h&7y(JqZATbsqWDue69m1S z$1l&Z*{%B!KWC+*1!=R%f3iz$;BHLq>%&<3S=cuTi3z6NWB-g~7Zuwct(?_UFo88t zD_1s|G2+*&c~BLGq2obM_L*SG9>>Ef3qwnWYN->=a#S?9`cb7_HXcarLAq>kEN6l` zU#g?JPi3PfOYOiafECT*&$F64j`1z@mc{{2jiBRumVOrJhW0~|Ofyw4kcIwHE#FXJ zxc10632avMGu;$e(!zhi$Agj88HU`VgOC!#URJ&Y`%nBKIeT>HV zfhyskuk+>e;%Vi2 z^Xitt1v;uHiVN)fJx$rwW?1AObN5{sBL{fSa#9OR(Un+hshi)!?UC$FdQP3oh#GE` zy3Rw|Sm+z%9h4rnOI_~WPUJd8o0^Gf6W$0@P4u@Si%L1lb~w9U46T<|8#7F^O}F*ivjt z3Fis`&ve%1LDriOpMC|^#d@C1gjkYZEGEqm&%##PPY1OW zoDYe>dtul%>kC}^rBbs(y{C&ONfEAdpk-b~JGbT->91msC$47Ads4I$i)cF1#{m+| z`zi6{eBFs1v@Z~qH?Th-5I&+CXvuOq`f)SP$6&Zs+^ezBUSET^T5OW*b(Q0ppiY|M zykH%3FXcGPBv1>8%qS}wi@pw0L)%7fwnK7Flk)aa%aRz@M#!!(up%6;<&W35%dKZ| zxEDrnMY|WojPCznpVS(@-&B2KO1mjaS2%_it#)RCxk!q6rg*fU45S~TAIA^T z4PH3Tu#4}quxenD)G89=(x}$Ntf`7QR=BZH-2PZ%n{Rudd_x`OP<52A-n?)SCtFBZ zBOiAdIM_l{c;_$ilO$;x(^ckUZ1_@NqoqX$gi}6GBJk;mJx3qYy^3%y2k2MCp&p#J zHAa2gD=PX}aKtsxS|i^?Kf}ZE$HFJwob8;vaI3Uq}8{0|xf&0G)u1P2LWNpI+=5{8_|1 z2a|!zgNbyB)i`xIX$u?1mkm_|L+(i@UU2Kup6B3mt&N zzD+3rM>1OA`7;6)Hi`QR;UKqb0mM!%^pVUBfTtxuam!};rk{2>VVT5fZY)(q+1 zIe_ZIc4>8&ZJc79+)%>q^udAlH28wA-tXWvY4bF1h|l?8sxf3Gl`s6a;ZBP!Y>UPV z_o>F!OR~pavNmYDG5a`0NKjk5sFGxUb`JG$0S%+r{lU%s;c4TCtaG{C!U8obQ~KM@r}0#o<>}ck zdrrh?C!hl>prEi{8bnr30b^rM0Z({LLGZAsJpQzdE39w1b}js|0Z#qLkJ~w>#1Jbp z$or^W_+GUfQk2(MK~=c>FrT;^CN0?3F)Z#Dr+tCR_ZOm^|3>MSIr(10M%73kp9xiR9`g zlgBPmYlPYJl2lZL1pRRT;1sQhI!h**XaBt2XMQc8%Gl`olhAXT?rx&b?=L2T&PLzo zm!rC?fis_d`h5Uu_5s(Z!ThN+e(xIU>jk`A2fuW zGjg=Bh__uy%VGpjS3e%<;HOc0c+nMEn93iUgfqS0t^v-@YC0`XhpU-B_)R|ahz=!M z8pE5FaM02NTYU0&4==gH1c%1il|&J0xETvvOCQKwGujN75G>OBeHXn5&alkCf+mkW zPw>Xg{H9p09J!Toxp54CPDCsh6`9uL?~a8J&(f7y73gT7C#xRjs9`TcdiC(noUB+j zm@Vm86Op^i#Pf0Zv)#zCOKO5{pG%u|EqNJ8Ie4t_ic0&EYNn2FQhgg%lM@o=j8*L2 zJr$~rS0tK_u$vU^C-+v8^)ki~EYp-b=BoLk`GUmL3h1?)dxgy~EEfRlH7rN!m<6L# zJRWN~A-DUm5-oz@Ke87krVNP4+mzMxZcKMml}^d>j7G)=b0I3;F}Lxi*Yh5GZYD2{ zjp;>D8eDxL&Nuy8t`s+udY{ZUSpy;&^!o8fp|zzv&(Sm2({UxwnTXh5

      %%rt^JT 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�X)t|Gc7eWI~DW? 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

      vZ(FusYmC%Wib>P{K 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 z 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%0D)CFtp`RbTPt9=FLD{8g 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 Gwf{d-z0srq diff --git a/doc/glm.pdf b/doc/glm.pdf index 0ab1bcebdec538c2c15ab2f2f8959d80fbbf8862..bf521798ad766bab76b2dab1c00ca5e5a25ac93f 100644 GIT binary patch delta 103671 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

      f;XJ_=^jQ@3QPaf&L&VD#|A7?BpRV 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

      UXpW?~x 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 z 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 z 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

      |7dv+A4^`!D~P8|Z#T0_vY#pFz}yP8(GaJ) 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

    G!qZPL6^gMDKk+#ma?#_Tl> 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