yslan commited on
Commit
fc6af43
1 Parent(s): 239d254
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. requirements.txt +2 -1
  2. submodules/diff-surfel-rasterization/.gitignore +7 -0
  3. submodules/diff-surfel-rasterization/.gitmodules +3 -0
  4. submodules/diff-surfel-rasterization/CMakeLists.txt +36 -0
  5. submodules/diff-surfel-rasterization/LICENSE.md +83 -0
  6. submodules/diff-surfel-rasterization/README.md +33 -0
  7. submodules/diff-surfel-rasterization/cuda_rasterizer/auxiliary.h +305 -0
  8. submodules/diff-surfel-rasterization/cuda_rasterizer/backward.cu +734 -0
  9. submodules/diff-surfel-rasterization/cuda_rasterizer/backward.h +70 -0
  10. submodules/diff-surfel-rasterization/cuda_rasterizer/config.h +19 -0
  11. submodules/diff-surfel-rasterization/cuda_rasterizer/forward.cu +537 -0
  12. submodules/diff-surfel-rasterization/cuda_rasterizer/forward.h +72 -0
  13. submodules/diff-surfel-rasterization/cuda_rasterizer/rasterizer.h +90 -0
  14. submodules/diff-surfel-rasterization/cuda_rasterizer/rasterizer_impl.cu +448 -0
  15. submodules/diff-surfel-rasterization/cuda_rasterizer/rasterizer_impl.h +74 -0
  16. submodules/diff-surfel-rasterization/diff_surfel_rasterization/__init__.py +223 -0
  17. submodules/diff-surfel-rasterization/ext.cpp +19 -0
  18. submodules/diff-surfel-rasterization/rasterize_points.cu +254 -0
  19. submodules/diff-surfel-rasterization/rasterize_points.h +68 -0
  20. submodules/diff-surfel-rasterization/setup.py +35 -0
  21. submodules/diff-surfel-rasterization/third_party/glm/.appveyor.yml +92 -0
  22. submodules/diff-surfel-rasterization/third_party/glm/.gitignore +61 -0
  23. submodules/diff-surfel-rasterization/third_party/glm/.travis.yml +388 -0
  24. submodules/diff-surfel-rasterization/third_party/glm/CMakeLists.txt +45 -0
  25. submodules/diff-surfel-rasterization/third_party/glm/cmake/cmake_uninstall.cmake.in +21 -0
  26. submodules/diff-surfel-rasterization/third_party/glm/copying.txt +54 -0
  27. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00001_source.html +493 -0
  28. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00002_source.html +121 -0
  29. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00003_source.html +182 -0
  30. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00004_source.html +0 -0
  31. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00005_source.html +0 -0
  32. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00006_source.html +262 -0
  33. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00007.html +205 -0
  34. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00007_source.html +250 -0
  35. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00008.html +149 -0
  36. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00008_source.html +154 -0
  37. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00009.html +223 -0
  38. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00009_source.html +212 -0
  39. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00010.html +124 -0
  40. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00010_source.html +133 -0
  41. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00011.html +137 -0
  42. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00011_source.html +139 -0
  43. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00012.html +134 -0
  44. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00012_source.html +136 -0
  45. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00013.html +139 -0
  46. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00013_source.html +150 -0
  47. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00014.html +131 -0
  48. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00014_source.html +141 -0
  49. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00015.html +267 -0
  50. submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00015_source.html +276 -0
requirements.txt CHANGED
@@ -44,4 +44,5 @@ OpenEXR
44
  onnxscript
45
  tritonclient
46
  gradio==4.43.0
47
- third_party/diff-surfel-rasterization
 
 
44
  onnxscript
45
  tritonclient
46
  gradio==4.43.0
47
+ submodules/diff-surfel-rasterization
48
+ submodules/simple-knn
submodules/diff-surfel-rasterization/.gitignore ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ build/
2
+ diff_surfel_rasterization.egg-info/
3
+ dist/
4
+ *.so
5
+ .vscode
6
+ **__pycache__**
7
+ *.pyc
submodules/diff-surfel-rasterization/.gitmodules ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [submodule "third_party/glm"]
2
+ path = third_party/glm
3
+ url = https://github.com/g-truc/glm.git
submodules/diff-surfel-rasterization/CMakeLists.txt ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #
2
+ # Copyright (C) 2023, Inria
3
+ # GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ # All rights reserved.
5
+ #
6
+ # This software is free for non-commercial, research and evaluation use
7
+ # under the terms of the LICENSE.md file.
8
+ #
9
+ # For inquiries contact george.drettakis@inria.fr
10
+ #
11
+
12
+ cmake_minimum_required(VERSION 3.20)
13
+
14
+ project(DiffRast LANGUAGES CUDA CXX)
15
+
16
+ set(CMAKE_CXX_STANDARD 17)
17
+ set(CMAKE_CXX_EXTENSIONS OFF)
18
+ set(CMAKE_CUDA_STANDARD 17)
19
+
20
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
21
+
22
+ add_library(CudaRasterizer
23
+ cuda_rasterizer/backward.h
24
+ cuda_rasterizer/backward.cu
25
+ cuda_rasterizer/forward.h
26
+ cuda_rasterizer/forward.cu
27
+ cuda_rasterizer/auxiliary.h
28
+ cuda_rasterizer/rasterizer_impl.cu
29
+ cuda_rasterizer/rasterizer_impl.h
30
+ cuda_rasterizer/rasterizer.h
31
+ )
32
+
33
+ set_target_properties(CudaRasterizer PROPERTIES CUDA_ARCHITECTURES "70;75;86")
34
+
35
+ target_include_directories(CudaRasterizer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cuda_rasterizer)
36
+ target_include_directories(CudaRasterizer PRIVATE third_party/glm ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
submodules/diff-surfel-rasterization/LICENSE.md ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Gaussian-Splatting License
2
+ ===========================
3
+
4
+ **Inria** and **the Max Planck Institut for Informatik (MPII)** hold all the ownership rights on the *Software* named **gaussian-splatting**.
5
+ The *Software* is in the process of being registered with the Agence pour la Protection des
6
+ Programmes (APP).
7
+
8
+ The *Software* is still being developed by the *Licensor*.
9
+
10
+ *Licensor*'s goal is to allow the research community to use, test and evaluate
11
+ the *Software*.
12
+
13
+ ## 1. Definitions
14
+
15
+ *Licensee* means any person or entity that uses the *Software* and distributes
16
+ its *Work*.
17
+
18
+ *Licensor* means the owners of the *Software*, i.e Inria and MPII
19
+
20
+ *Software* means the original work of authorship made available under this
21
+ License ie gaussian-splatting.
22
+
23
+ *Work* means the *Software* and any additions to or derivative works of the
24
+ *Software* that are made available under this License.
25
+
26
+
27
+ ## 2. Purpose
28
+ This license is intended to define the rights granted to the *Licensee* by
29
+ Licensors under the *Software*.
30
+
31
+ ## 3. Rights granted
32
+
33
+ For the above reasons Licensors have decided to distribute the *Software*.
34
+ Licensors grant non-exclusive rights to use the *Software* for research purposes
35
+ to research users (both academic and industrial), free of charge, without right
36
+ to sublicense.. The *Software* may be used "non-commercially", i.e., for research
37
+ and/or evaluation purposes only.
38
+
39
+ Subject to the terms and conditions of this License, you are granted a
40
+ non-exclusive, royalty-free, license to reproduce, prepare derivative works of,
41
+ publicly display, publicly perform and distribute its *Work* and any resulting
42
+ derivative works in any form.
43
+
44
+ ## 4. Limitations
45
+
46
+ **4.1 Redistribution.** You may reproduce or distribute the *Work* only if (a) you do
47
+ so under this License, (b) you include a complete copy of this License with
48
+ your distribution, and (c) you retain without modification any copyright,
49
+ patent, trademark, or attribution notices that are present in the *Work*.
50
+
51
+ **4.2 Derivative Works.** You may specify that additional or different terms apply
52
+ to the use, reproduction, and distribution of your derivative works of the *Work*
53
+ ("Your Terms") only if (a) Your Terms provide that the use limitation in
54
+ Section 2 applies to your derivative works, and (b) you identify the specific
55
+ derivative works that are subject to Your Terms. Notwithstanding Your Terms,
56
+ this License (including the redistribution requirements in Section 3.1) will
57
+ continue to apply to the *Work* itself.
58
+
59
+ **4.3** Any other use without of prior consent of Licensors is prohibited. Research
60
+ users explicitly acknowledge having received from Licensors all information
61
+ allowing to appreciate the adequacy between of the *Software* and their needs and
62
+ to undertake all necessary precautions for its execution and use.
63
+
64
+ **4.4** The *Software* is provided both as a compiled library file and as source
65
+ code. In case of using the *Software* for a publication or other results obtained
66
+ through the use of the *Software*, users are strongly encouraged to cite the
67
+ corresponding publications as explained in the documentation of the *Software*.
68
+
69
+ ## 5. Disclaimer
70
+
71
+ THE USER CANNOT USE, EXPLOIT OR DISTRIBUTE THE *SOFTWARE* FOR COMMERCIAL PURPOSES
72
+ WITHOUT PRIOR AND EXPLICIT CONSENT OF LICENSORS. YOU MUST CONTACT INRIA FOR ANY
73
+ UNAUTHORIZED USE: stip-sophia.transfert@inria.fr . ANY SUCH ACTION WILL
74
+ CONSTITUTE A FORGERY. THIS *SOFTWARE* IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES
75
+ OF ANY NATURE AND ANY EXPRESS OR IMPLIED WARRANTIES, WITH REGARDS TO COMMERCIAL
76
+ USE, PROFESSIONNAL USE, LEGAL OR NOT, OR OTHER, OR COMMERCIALISATION OR
77
+ ADAPTATION. UNLESS EXPLICITLY PROVIDED BY LAW, IN NO EVENT, SHALL INRIA OR THE
78
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
79
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
80
+ GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION)
81
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
82
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM, OUT OF OR
83
+ IN CONNECTION WITH THE *SOFTWARE* OR THE USE OR OTHER DEALINGS IN THE *SOFTWARE*.
submodules/diff-surfel-rasterization/README.md ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Differential Surfel Rasterization
2
+
3
+ This is the rasterization engine for the paper "2D Gaussian Splatting for Geometrically Accurate Radiance Fields". If you can make use of it in your own research, please be so kind to cite us.
4
+
5
+ <section class="section" id="BibTeX">
6
+ <div class="container is-max-desktop content">
7
+ <h2 class="title">BibTeX</h2>
8
+ <pre><code>@inproceedings{Huang2DGS2024,
9
+ title={2D Gaussian Splatting for Geometrically Accurate Radiance Fields},
10
+ author={Huang, Binbin and Yu, Zehao and Chen, Anpei and Geiger, Andreas and Gao, Shenghua},
11
+ publisher = {Association for Computing Machinery},
12
+ booktitle = {SIGGRAPH 2024 Conference Papers},
13
+ year = {2024},
14
+ doi = {10.1145/3641519.3657428}
15
+ }</code></pre>
16
+ </div>
17
+ </section>
18
+
19
+ <section class="section" id="BibTeX">
20
+ <div class="container is-max-desktop content">
21
+ <h2 class="title">BibTeX</h2>
22
+ <pre><code>@Article{kerbl3Dgaussians,
23
+ author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\"u}hler, Thomas and Drettakis, George},
24
+ title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},
25
+ journal = {ACM Transactions on Graphics},
26
+ number = {4},
27
+ volume = {42},
28
+ month = {July},
29
+ year = {2023},
30
+ url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/}
31
+ }</code></pre>
32
+ </div>
33
+ </section>
submodules/diff-surfel-rasterization/cuda_rasterizer/auxiliary.h ADDED
@@ -0,0 +1,305 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #ifndef CUDA_RASTERIZER_AUXILIARY_H_INCLUDED
13
+ #define CUDA_RASTERIZER_AUXILIARY_H_INCLUDED
14
+
15
+ #include "config.h"
16
+ #include "stdio.h"
17
+
18
+ #define BLOCK_SIZE (BLOCK_X * BLOCK_Y)
19
+ #define NUM_WARPS (BLOCK_SIZE/32)
20
+
21
+ #define TIGHTBBOX 0
22
+ #define RENDER_AXUTILITY 1
23
+ #define DEPTH_OFFSET 0
24
+ #define ALPHA_OFFSET 1
25
+ #define NORMAL_OFFSET 2
26
+ #define MIDDEPTH_OFFSET 5
27
+ #define DISTORTION_OFFSET 6
28
+ // #define MEDIAN_WEIGHT_OFFSET 7
29
+
30
+ // distortion helper macros
31
+ #define BACKFACE_CULL 1
32
+ #define DUAL_VISIABLE 1
33
+ // #define NEAR_PLANE 0.2
34
+ // #define FAR_PLANE 100.0
35
+ #define DETACH_WEIGHT 0
36
+
37
+ __device__ const float near_n = 0.2;
38
+ __device__ const float far_n = 100.0;
39
+ __device__ const float FilterSize = 0.707106; // sqrt(2) / 2
40
+ __device__ const float FilterInvSquare = 2.0f;
41
+
42
+ // Spherical harmonics coefficients
43
+ __device__ const float SH_C0 = 0.28209479177387814f;
44
+ __device__ const float SH_C1 = 0.4886025119029199f;
45
+ __device__ const float SH_C2[] = {
46
+ 1.0925484305920792f,
47
+ -1.0925484305920792f,
48
+ 0.31539156525252005f,
49
+ -1.0925484305920792f,
50
+ 0.5462742152960396f
51
+ };
52
+ __device__ const float SH_C3[] = {
53
+ -0.5900435899266435f,
54
+ 2.890611442640554f,
55
+ -0.4570457994644658f,
56
+ 0.3731763325901154f,
57
+ -0.4570457994644658f,
58
+ 1.445305721320277f,
59
+ -0.5900435899266435f
60
+ };
61
+
62
+ __forceinline__ __device__ float ndc2Pix(float v, int S)
63
+ {
64
+ return ((v + 1.0) * S - 1.0) * 0.5;
65
+ }
66
+
67
+ __forceinline__ __device__ void getRect(const float2 p, int max_radius, uint2& rect_min, uint2& rect_max, dim3 grid)
68
+ {
69
+ rect_min = {
70
+ min(grid.x, max((int)0, (int)((p.x - max_radius) / BLOCK_X))),
71
+ min(grid.y, max((int)0, (int)((p.y - max_radius) / BLOCK_Y)))
72
+ };
73
+ rect_max = {
74
+ min(grid.x, max((int)0, (int)((p.x + max_radius + BLOCK_X - 1) / BLOCK_X))),
75
+ min(grid.y, max((int)0, (int)((p.y + max_radius + BLOCK_Y - 1) / BLOCK_Y)))
76
+ };
77
+ }
78
+
79
+ __forceinline__ __device__ float3 transformPoint4x3(const float3& p, const float* matrix)
80
+ {
81
+ float3 transformed = {
82
+ matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],
83
+ matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],
84
+ matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],
85
+ };
86
+ return transformed;
87
+ }
88
+
89
+ __forceinline__ __device__ float4 transformPoint4x4(const float3& p, const float* matrix)
90
+ {
91
+ float4 transformed = {
92
+ matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],
93
+ matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],
94
+ matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],
95
+ matrix[3] * p.x + matrix[7] * p.y + matrix[11] * p.z + matrix[15]
96
+ };
97
+ return transformed;
98
+ }
99
+
100
+ __forceinline__ __device__ float3 transformVec4x3(const float3& p, const float* matrix)
101
+ {
102
+ float3 transformed = {
103
+ matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z,
104
+ matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z,
105
+ matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z,
106
+ };
107
+ return transformed;
108
+ }
109
+
110
+ __forceinline__ __device__ float3 transformVec4x3Transpose(const float3& p, const float* matrix)
111
+ {
112
+ float3 transformed = {
113
+ matrix[0] * p.x + matrix[1] * p.y + matrix[2] * p.z,
114
+ matrix[4] * p.x + matrix[5] * p.y + matrix[6] * p.z,
115
+ matrix[8] * p.x + matrix[9] * p.y + matrix[10] * p.z,
116
+ };
117
+ return transformed;
118
+ }
119
+
120
+ __forceinline__ __device__ float dnormvdz(float3 v, float3 dv)
121
+ {
122
+ float sum2 = v.x * v.x + v.y * v.y + v.z * v.z;
123
+ float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
124
+ float dnormvdz = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;
125
+ return dnormvdz;
126
+ }
127
+
128
+ __forceinline__ __device__ float3 dnormvdv(float3 v, float3 dv)
129
+ {
130
+ float sum2 = v.x * v.x + v.y * v.y + v.z * v.z;
131
+ float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
132
+
133
+ float3 dnormvdv;
134
+ dnormvdv.x = ((+sum2 - v.x * v.x) * dv.x - v.y * v.x * dv.y - v.z * v.x * dv.z) * invsum32;
135
+ dnormvdv.y = (-v.x * v.y * dv.x + (sum2 - v.y * v.y) * dv.y - v.z * v.y * dv.z) * invsum32;
136
+ dnormvdv.z = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;
137
+ return dnormvdv;
138
+ }
139
+
140
+ __forceinline__ __device__ float4 dnormvdv(float4 v, float4 dv)
141
+ {
142
+ float sum2 = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
143
+ float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
144
+
145
+ float4 vdv = { v.x * dv.x, v.y * dv.y, v.z * dv.z, v.w * dv.w };
146
+ float vdv_sum = vdv.x + vdv.y + vdv.z + vdv.w;
147
+ float4 dnormvdv;
148
+ dnormvdv.x = ((sum2 - v.x * v.x) * dv.x - v.x * (vdv_sum - vdv.x)) * invsum32;
149
+ dnormvdv.y = ((sum2 - v.y * v.y) * dv.y - v.y * (vdv_sum - vdv.y)) * invsum32;
150
+ dnormvdv.z = ((sum2 - v.z * v.z) * dv.z - v.z * (vdv_sum - vdv.z)) * invsum32;
151
+ dnormvdv.w = ((sum2 - v.w * v.w) * dv.w - v.w * (vdv_sum - vdv.w)) * invsum32;
152
+ return dnormvdv;
153
+ }
154
+
155
+ __forceinline__ __device__ float3 cross(float3 a, float3 b){return make_float3(a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x);}
156
+
157
+ __forceinline__ __device__ float3 operator*(float3 a, float3 b){return make_float3(a.x * b.x, a.y * b.y, a.z*b.z);}
158
+
159
+ __forceinline__ __device__ float2 operator*(float2 a, float2 b){return make_float2(a.x * b.x, a.y * b.y);}
160
+
161
+ __forceinline__ __device__ float3 operator*(float f, float3 a){return make_float3(f * a.x, f * a.y, f * a.z);}
162
+
163
+ __forceinline__ __device__ float2 operator*(float f, float2 a){return make_float2(f * a.x, f * a.y);}
164
+
165
+ __forceinline__ __device__ float3 operator-(float3 a, float3 b){return make_float3(a.x - b.x, a.y - b.y, a.z - b.z);}
166
+
167
+ __forceinline__ __device__ float2 operator-(float2 a, float2 b){return make_float2(a.x - b.x, a.y - b.y);}
168
+
169
+ __forceinline__ __device__ float sumf3(float3 a){return a.x + a.y + a.z;}
170
+
171
+ __forceinline__ __device__ float sumf2(float2 a){return a.x + a.y;}
172
+
173
+ __forceinline__ __device__ float3 sqrtf3(float3 a){return make_float3(sqrtf(a.x), sqrtf(a.y), sqrtf(a.z));}
174
+
175
+ __forceinline__ __device__ float2 sqrtf2(float2 a){return make_float2(sqrtf(a.x), sqrtf(a.y));}
176
+
177
+ __forceinline__ __device__ float3 minf3(float f, float3 a){return make_float3(min(f, a.x), min(f, a.y), min(f, a.z));}
178
+
179
+ __forceinline__ __device__ float2 minf2(float f, float2 a){return make_float2(min(f, a.x), min(f, a.y));}
180
+
181
+ __forceinline__ __device__ float3 maxf3(float f, float3 a){return make_float3(max(f, a.x), max(f, a.y), max(f, a.z));}
182
+
183
+ __forceinline__ __device__ float2 maxf2(float f, float2 a){return make_float2(max(f, a.x), max(f, a.y));}
184
+
185
+ __forceinline__ __device__ bool in_frustum(int idx,
186
+ const float* orig_points,
187
+ const float* viewmatrix,
188
+ const float* projmatrix,
189
+ bool prefiltered,
190
+ float3& p_view)
191
+ {
192
+ float3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] };
193
+
194
+ // Bring points to screen space
195
+ float4 p_hom = transformPoint4x4(p_orig, projmatrix);
196
+ float p_w = 1.0f / (p_hom.w + 0.0000001f);
197
+ float3 p_proj = { p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w };
198
+ p_view = transformPoint4x3(p_orig, viewmatrix);
199
+
200
+ if (p_view.z <= 0.2f)// || ((p_proj.x < -1.3 || p_proj.x > 1.3 || p_proj.y < -1.3 || p_proj.y > 1.3)))
201
+ {
202
+ if (prefiltered)
203
+ {
204
+ printf("Point is filtered although prefiltered is set. This shouldn't happen!");
205
+ __trap();
206
+ }
207
+ return false;
208
+ }
209
+ return true;
210
+ }
211
+
212
+ // adopt from gsplat: https://github.com/nerfstudio-project/gsplat/blob/main/gsplat/cuda/csrc/forward.cu
213
+ inline __device__ glm::mat3 quat_to_rotmat(const glm::vec4 quat) {
214
+ // quat to rotation matrix
215
+ float s = rsqrtf(
216
+ quat.w * quat.w + quat.x * quat.x + quat.y * quat.y + quat.z * quat.z
217
+ );
218
+ float w = quat.x * s;
219
+ float x = quat.y * s;
220
+ float y = quat.z * s;
221
+ float z = quat.w * s;
222
+
223
+ // glm matrices are column-major
224
+ return glm::mat3(
225
+ 1.f - 2.f * (y * y + z * z),
226
+ 2.f * (x * y + w * z),
227
+ 2.f * (x * z - w * y),
228
+ 2.f * (x * y - w * z),
229
+ 1.f - 2.f * (x * x + z * z),
230
+ 2.f * (y * z + w * x),
231
+ 2.f * (x * z + w * y),
232
+ 2.f * (y * z - w * x),
233
+ 1.f - 2.f * (x * x + y * y)
234
+ );
235
+ }
236
+
237
+
238
+ inline __device__ glm::vec4
239
+ quat_to_rotmat_vjp(const glm::vec4 quat, const glm::mat3 v_R) {
240
+ float s = rsqrtf(
241
+ quat.w * quat.w + quat.x * quat.x + quat.y * quat.y + quat.z * quat.z
242
+ );
243
+ float w = quat.x * s;
244
+ float x = quat.y * s;
245
+ float y = quat.z * s;
246
+ float z = quat.w * s;
247
+
248
+ glm::vec4 v_quat;
249
+ // v_R is COLUMN MAJOR
250
+ // w element stored in x field
251
+ v_quat.x =
252
+ 2.f * (
253
+ // v_quat.w = 2.f * (
254
+ x * (v_R[1][2] - v_R[2][1]) + y * (v_R[2][0] - v_R[0][2]) +
255
+ z * (v_R[0][1] - v_R[1][0])
256
+ );
257
+ // x element in y field
258
+ v_quat.y =
259
+ 2.f *
260
+ (
261
+ // v_quat.x = 2.f * (
262
+ -2.f * x * (v_R[1][1] + v_R[2][2]) + y * (v_R[0][1] + v_R[1][0]) +
263
+ z * (v_R[0][2] + v_R[2][0]) + w * (v_R[1][2] - v_R[2][1])
264
+ );
265
+ // y element in z field
266
+ v_quat.z =
267
+ 2.f *
268
+ (
269
+ // v_quat.y = 2.f * (
270
+ x * (v_R[0][1] + v_R[1][0]) - 2.f * y * (v_R[0][0] + v_R[2][2]) +
271
+ z * (v_R[1][2] + v_R[2][1]) + w * (v_R[2][0] - v_R[0][2])
272
+ );
273
+ // z element in w field
274
+ v_quat.w =
275
+ 2.f *
276
+ (
277
+ // v_quat.z = 2.f * (
278
+ x * (v_R[0][2] + v_R[2][0]) + y * (v_R[1][2] + v_R[2][1]) -
279
+ 2.f * z * (v_R[0][0] + v_R[1][1]) + w * (v_R[0][1] - v_R[1][0])
280
+ );
281
+ return v_quat;
282
+ }
283
+
284
+
285
+ inline __device__ glm::mat3
286
+ scale_to_mat(const glm::vec2 scale, const float glob_scale) {
287
+ glm::mat3 S = glm::mat3(1.f);
288
+ S[0][0] = glob_scale * scale.x;
289
+ S[1][1] = glob_scale * scale.y;
290
+ // S[2][2] = glob_scale * scale.z;
291
+ return S;
292
+ }
293
+
294
+
295
+
296
+ #define CHECK_CUDA(A, debug) \
297
+ A; if(debug) { \
298
+ auto ret = cudaDeviceSynchronize(); \
299
+ if (ret != cudaSuccess) { \
300
+ std::cerr << "\n[CUDA ERROR] in " << __FILE__ << "\nLine " << __LINE__ << ": " << cudaGetErrorString(ret); \
301
+ throw std::runtime_error(cudaGetErrorString(ret)); \
302
+ } \
303
+ }
304
+
305
+ #endif
submodules/diff-surfel-rasterization/cuda_rasterizer/backward.cu ADDED
@@ -0,0 +1,734 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #include "backward.h"
13
+ #include "auxiliary.h"
14
+ #include <cooperative_groups.h>
15
+ #include <cooperative_groups/reduce.h>
16
+ namespace cg = cooperative_groups;
17
+
18
+ // Backward pass for conversion of spherical harmonics to RGB for
19
+ // each Gaussian.
20
+ __device__ void computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, const bool* clamped, const glm::vec3* dL_dcolor, glm::vec3* dL_dmeans, glm::vec3* dL_dshs)
21
+ {
22
+ // Compute intermediate values, as it is done during forward
23
+ glm::vec3 pos = means[idx];
24
+ glm::vec3 dir_orig = pos - campos;
25
+ glm::vec3 dir = dir_orig / glm::length(dir_orig);
26
+
27
+ glm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;
28
+
29
+ // Use PyTorch rule for clamping: if clamping was applied,
30
+ // gradient becomes 0.
31
+ glm::vec3 dL_dRGB = dL_dcolor[idx];
32
+ dL_dRGB.x *= clamped[3 * idx + 0] ? 0 : 1;
33
+ dL_dRGB.y *= clamped[3 * idx + 1] ? 0 : 1;
34
+ dL_dRGB.z *= clamped[3 * idx + 2] ? 0 : 1;
35
+
36
+ glm::vec3 dRGBdx(0, 0, 0);
37
+ glm::vec3 dRGBdy(0, 0, 0);
38
+ glm::vec3 dRGBdz(0, 0, 0);
39
+ float x = dir.x;
40
+ float y = dir.y;
41
+ float z = dir.z;
42
+
43
+ // Target location for this Gaussian to write SH gradients to
44
+ glm::vec3* dL_dsh = dL_dshs + idx * max_coeffs;
45
+
46
+ // No tricks here, just high school-level calculus.
47
+ float dRGBdsh0 = SH_C0;
48
+ dL_dsh[0] = dRGBdsh0 * dL_dRGB;
49
+ if (deg > 0)
50
+ {
51
+ float dRGBdsh1 = -SH_C1 * y;
52
+ float dRGBdsh2 = SH_C1 * z;
53
+ float dRGBdsh3 = -SH_C1 * x;
54
+ dL_dsh[1] = dRGBdsh1 * dL_dRGB;
55
+ dL_dsh[2] = dRGBdsh2 * dL_dRGB;
56
+ dL_dsh[3] = dRGBdsh3 * dL_dRGB;
57
+
58
+ dRGBdx = -SH_C1 * sh[3];
59
+ dRGBdy = -SH_C1 * sh[1];
60
+ dRGBdz = SH_C1 * sh[2];
61
+
62
+ if (deg > 1)
63
+ {
64
+ float xx = x * x, yy = y * y, zz = z * z;
65
+ float xy = x * y, yz = y * z, xz = x * z;
66
+
67
+ float dRGBdsh4 = SH_C2[0] * xy;
68
+ float dRGBdsh5 = SH_C2[1] * yz;
69
+ float dRGBdsh6 = SH_C2[2] * (2.f * zz - xx - yy);
70
+ float dRGBdsh7 = SH_C2[3] * xz;
71
+ float dRGBdsh8 = SH_C2[4] * (xx - yy);
72
+ dL_dsh[4] = dRGBdsh4 * dL_dRGB;
73
+ dL_dsh[5] = dRGBdsh5 * dL_dRGB;
74
+ dL_dsh[6] = dRGBdsh6 * dL_dRGB;
75
+ dL_dsh[7] = dRGBdsh7 * dL_dRGB;
76
+ dL_dsh[8] = dRGBdsh8 * dL_dRGB;
77
+
78
+ dRGBdx += SH_C2[0] * y * sh[4] + SH_C2[2] * 2.f * -x * sh[6] + SH_C2[3] * z * sh[7] + SH_C2[4] * 2.f * x * sh[8];
79
+ dRGBdy += SH_C2[0] * x * sh[4] + SH_C2[1] * z * sh[5] + SH_C2[2] * 2.f * -y * sh[6] + SH_C2[4] * 2.f * -y * sh[8];
80
+ dRGBdz += SH_C2[1] * y * sh[5] + SH_C2[2] * 2.f * 2.f * z * sh[6] + SH_C2[3] * x * sh[7];
81
+
82
+ if (deg > 2)
83
+ {
84
+ float dRGBdsh9 = SH_C3[0] * y * (3.f * xx - yy);
85
+ float dRGBdsh10 = SH_C3[1] * xy * z;
86
+ float dRGBdsh11 = SH_C3[2] * y * (4.f * zz - xx - yy);
87
+ float dRGBdsh12 = SH_C3[3] * z * (2.f * zz - 3.f * xx - 3.f * yy);
88
+ float dRGBdsh13 = SH_C3[4] * x * (4.f * zz - xx - yy);
89
+ float dRGBdsh14 = SH_C3[5] * z * (xx - yy);
90
+ float dRGBdsh15 = SH_C3[6] * x * (xx - 3.f * yy);
91
+ dL_dsh[9] = dRGBdsh9 * dL_dRGB;
92
+ dL_dsh[10] = dRGBdsh10 * dL_dRGB;
93
+ dL_dsh[11] = dRGBdsh11 * dL_dRGB;
94
+ dL_dsh[12] = dRGBdsh12 * dL_dRGB;
95
+ dL_dsh[13] = dRGBdsh13 * dL_dRGB;
96
+ dL_dsh[14] = dRGBdsh14 * dL_dRGB;
97
+ dL_dsh[15] = dRGBdsh15 * dL_dRGB;
98
+
99
+ dRGBdx += (
100
+ SH_C3[0] * sh[9] * 3.f * 2.f * xy +
101
+ SH_C3[1] * sh[10] * yz +
102
+ SH_C3[2] * sh[11] * -2.f * xy +
103
+ SH_C3[3] * sh[12] * -3.f * 2.f * xz +
104
+ SH_C3[4] * sh[13] * (-3.f * xx + 4.f * zz - yy) +
105
+ SH_C3[5] * sh[14] * 2.f * xz +
106
+ SH_C3[6] * sh[15] * 3.f * (xx - yy));
107
+
108
+ dRGBdy += (
109
+ SH_C3[0] * sh[9] * 3.f * (xx - yy) +
110
+ SH_C3[1] * sh[10] * xz +
111
+ SH_C3[2] * sh[11] * (-3.f * yy + 4.f * zz - xx) +
112
+ SH_C3[3] * sh[12] * -3.f * 2.f * yz +
113
+ SH_C3[4] * sh[13] * -2.f * xy +
114
+ SH_C3[5] * sh[14] * -2.f * yz +
115
+ SH_C3[6] * sh[15] * -3.f * 2.f * xy);
116
+
117
+ dRGBdz += (
118
+ SH_C3[1] * sh[10] * xy +
119
+ SH_C3[2] * sh[11] * 4.f * 2.f * yz +
120
+ SH_C3[3] * sh[12] * 3.f * (2.f * zz - xx - yy) +
121
+ SH_C3[4] * sh[13] * 4.f * 2.f * xz +
122
+ SH_C3[5] * sh[14] * (xx - yy));
123
+ }
124
+ }
125
+ }
126
+
127
+ // The view direction is an input to the computation. View direction
128
+ // is influenced by the Gaussian's mean, so SHs gradients
129
+ // must propagate back into 3D position.
130
+ glm::vec3 dL_ddir(glm::dot(dRGBdx, dL_dRGB), glm::dot(dRGBdy, dL_dRGB), glm::dot(dRGBdz, dL_dRGB));
131
+
132
+ // Account for normalization of direction
133
+ float3 dL_dmean = dnormvdv(float3{ dir_orig.x, dir_orig.y, dir_orig.z }, float3{ dL_ddir.x, dL_ddir.y, dL_ddir.z });
134
+
135
+ // Gradients of loss w.r.t. Gaussian means, but only the portion
136
+ // that is caused because the mean affects the view-dependent color.
137
+ // Additional mean gradient is accumulated in below methods.
138
+ dL_dmeans[idx] += glm::vec3(dL_dmean.x, dL_dmean.y, dL_dmean.z);
139
+ }
140
+
141
+
142
+ // Backward version of the rendering procedure.
143
+ template <uint32_t C>
144
+ __global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)
145
+ renderCUDA(
146
+ const uint2* __restrict__ ranges,
147
+ const uint32_t* __restrict__ point_list,
148
+ int W, int H,
149
+ float focal_x, float focal_y,
150
+ const float* __restrict__ bg_color,
151
+ const float2* __restrict__ points_xy_image,
152
+ const float4* __restrict__ normal_opacity,
153
+ const float* __restrict__ transMats,
154
+ const float* __restrict__ colors,
155
+ const float* __restrict__ depths,
156
+ const float* __restrict__ final_Ts,
157
+ const uint32_t* __restrict__ n_contrib,
158
+ const float* __restrict__ dL_dpixels,
159
+ const float* __restrict__ dL_depths,
160
+ float * __restrict__ dL_dtransMat,
161
+ float3* __restrict__ dL_dmean2D,
162
+ float* __restrict__ dL_dnormal3D,
163
+ float* __restrict__ dL_dopacity,
164
+ float* __restrict__ dL_dcolors)
165
+ {
166
+ // We rasterize again. Compute necessary block info.
167
+ auto block = cg::this_thread_block();
168
+ const uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;
169
+ const uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };
170
+ const uint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) };
171
+ const uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };
172
+ const uint32_t pix_id = W * pix.y + pix.x;
173
+ const float2 pixf = {(float)pix.x, (float)pix.y};
174
+
175
+ const bool inside = pix.x < W&& pix.y < H;
176
+ const uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];
177
+
178
+ const int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);
179
+
180
+ bool done = !inside;
181
+ int toDo = range.y - range.x;
182
+
183
+ __shared__ int collected_id[BLOCK_SIZE];
184
+ __shared__ float2 collected_xy[BLOCK_SIZE];
185
+ __shared__ float4 collected_normal_opacity[BLOCK_SIZE];
186
+ __shared__ float collected_colors[C * BLOCK_SIZE];
187
+ __shared__ float3 collected_Tu[BLOCK_SIZE];
188
+ __shared__ float3 collected_Tv[BLOCK_SIZE];
189
+ __shared__ float3 collected_Tw[BLOCK_SIZE];
190
+ // __shared__ float collected_depths[BLOCK_SIZE];
191
+
192
+ // In the forward, we stored the final value for T, the
193
+ // product of all (1 - alpha) factors.
194
+ const float T_final = inside ? final_Ts[pix_id] : 0;
195
+ float T = T_final;
196
+
197
+ // We start from the back. The ID of the last contributing
198
+ // Gaussian is known from each pixel from the forward.
199
+ uint32_t contributor = toDo;
200
+ const int last_contributor = inside ? n_contrib[pix_id] : 0;
201
+
202
+ float accum_rec[C] = { 0 };
203
+ float dL_dpixel[C];
204
+
205
+ #if RENDER_AXUTILITY
206
+ float dL_dreg;
207
+ float dL_ddepth;
208
+ float dL_daccum;
209
+ float dL_dnormal2D[3];
210
+ const int median_contributor = inside ? n_contrib[pix_id + H * W] : 0;
211
+ float dL_dmedian_depth;
212
+ float dL_dmax_dweight;
213
+
214
+ if (inside) {
215
+ dL_ddepth = dL_depths[DEPTH_OFFSET * H * W + pix_id];
216
+ dL_daccum = dL_depths[ALPHA_OFFSET * H * W + pix_id];
217
+ dL_dreg = dL_depths[DISTORTION_OFFSET * H * W + pix_id];
218
+ for (int i = 0; i < 3; i++)
219
+ dL_dnormal2D[i] = dL_depths[(NORMAL_OFFSET + i) * H * W + pix_id];
220
+
221
+ dL_dmedian_depth = dL_depths[MIDDEPTH_OFFSET * H * W + pix_id];
222
+ // dL_dmax_dweight = dL_depths[MEDIAN_WEIGHT_OFFSET * H * W + pix_id];
223
+ }
224
+
225
+ // for compute gradient with respect to depth and normal
226
+ float last_depth = 0;
227
+ float last_normal[3] = { 0 };
228
+ float accum_depth_rec = 0;
229
+ float accum_alpha_rec = 0;
230
+ float accum_normal_rec[3] = {0};
231
+ // for compute gradient with respect to the distortion map
232
+ const float final_D = inside ? final_Ts[pix_id + H * W] : 0;
233
+ const float final_D2 = inside ? final_Ts[pix_id + 2 * H * W] : 0;
234
+ const float final_A = 1 - T_final;
235
+ float last_dL_dT = 0;
236
+ #endif
237
+
238
+ if (inside){
239
+ for (int i = 0; i < C; i++)
240
+ dL_dpixel[i] = dL_dpixels[i * H * W + pix_id];
241
+ }
242
+
243
+ float last_alpha = 0;
244
+ float last_color[C] = { 0 };
245
+
246
+ // Gradient of pixel coordinate w.r.t. normalized
247
+ // screen-space viewport corrdinates (-1 to 1)
248
+ const float ddelx_dx = 0.5 * W;
249
+ const float ddely_dy = 0.5 * H;
250
+
251
+ // Traverse all Gaussians
252
+ for (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)
253
+ {
254
+ // Load auxiliary data into shared memory, start in the BACK
255
+ // and load them in revers order.
256
+ block.sync();
257
+ const int progress = i * BLOCK_SIZE + block.thread_rank();
258
+ if (range.x + progress < range.y)
259
+ {
260
+ const int coll_id = point_list[range.y - progress - 1];
261
+ collected_id[block.thread_rank()] = coll_id;
262
+ collected_xy[block.thread_rank()] = points_xy_image[coll_id];
263
+ collected_normal_opacity[block.thread_rank()] = normal_opacity[coll_id];
264
+ collected_Tu[block.thread_rank()] = {transMats[9 * coll_id+0], transMats[9 * coll_id+1], transMats[9 * coll_id+2]};
265
+ collected_Tv[block.thread_rank()] = {transMats[9 * coll_id+3], transMats[9 * coll_id+4], transMats[9 * coll_id+5]};
266
+ collected_Tw[block.thread_rank()] = {transMats[9 * coll_id+6], transMats[9 * coll_id+7], transMats[9 * coll_id+8]};
267
+ for (int i = 0; i < C; i++)
268
+ collected_colors[i * BLOCK_SIZE + block.thread_rank()] = colors[coll_id * C + i];
269
+ // collected_depths[block.thread_rank()] = depths[coll_id];
270
+ }
271
+ block.sync();
272
+
273
+ // Iterate over Gaussians
274
+ for (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)
275
+ {
276
+ // Keep track of current Gaussian ID. Skip, if this one
277
+ // is behind the last contributor for this pixel.
278
+ contributor--;
279
+ if (contributor >= last_contributor)
280
+ continue;
281
+
282
+ // compute ray-splat intersection as before
283
+ // Fisrt compute two homogeneous planes, See Eq. (8)
284
+ const float2 xy = collected_xy[j];
285
+ const float3 Tu = collected_Tu[j];
286
+ const float3 Tv = collected_Tv[j];
287
+ const float3 Tw = collected_Tw[j];
288
+ float3 k = pix.x * Tw - Tu;
289
+ float3 l = pix.y * Tw - Tv;
290
+ float3 p = cross(k, l);
291
+ if (p.z == 0.0) continue;
292
+ float2 s = {p.x / p.z, p.y / p.z};
293
+ float rho3d = (s.x * s.x + s.y * s.y);
294
+ float2 d = {xy.x - pixf.x, xy.y - pixf.y};
295
+ float rho2d = FilterInvSquare * (d.x * d.x + d.y * d.y);
296
+ float rho = min(rho3d, rho2d);
297
+
298
+ // compute depth
299
+ float c_d = (s.x * Tw.x + s.y * Tw.y) + Tw.z; // Tw * [u,v,1]
300
+ // if a point is too small, its depth is not reliable?
301
+ // c_d = (rho3d <= rho2d) ? c_d : Tw.z;
302
+ if (c_d < near_n) continue;
303
+
304
+ float4 nor_o = collected_normal_opacity[j];
305
+ float normal[3] = {nor_o.x, nor_o.y, nor_o.z};
306
+ float opa = nor_o.w;
307
+
308
+ // accumulations
309
+
310
+ float power = -0.5f * rho;
311
+ if (power > 0.0f)
312
+ continue;
313
+
314
+ const float G = exp(power);
315
+ const float alpha = min(0.99f, opa * G);
316
+ if (alpha < 1.0f / 255.0f)
317
+ continue;
318
+
319
+ T = T / (1.f - alpha);
320
+ const float dchannel_dcolor = alpha * T;
321
+ const float w = alpha * T;
322
+ // Propagate gradients to per-Gaussian colors and keep
323
+ // gradients w.r.t. alpha (blending factor for a Gaussian/pixel
324
+ // pair).
325
+ float dL_dalpha = 0.0f;
326
+ const int global_id = collected_id[j];
327
+ for (int ch = 0; ch < C; ch++)
328
+ {
329
+ const float c = collected_colors[ch * BLOCK_SIZE + j];
330
+ // Update last color (to be used in the next iteration)
331
+ accum_rec[ch] = last_alpha * last_color[ch] + (1.f - last_alpha) * accum_rec[ch];
332
+ last_color[ch] = c;
333
+
334
+ const float dL_dchannel = dL_dpixel[ch];
335
+ dL_dalpha += (c - accum_rec[ch]) * dL_dchannel;
336
+ // Update the gradients w.r.t. color of the Gaussian.
337
+ // Atomic, since this pixel is just one of potentially
338
+ // many that were affected by this Gaussian.
339
+ atomicAdd(&(dL_dcolors[global_id * C + ch]), dchannel_dcolor * dL_dchannel);
340
+ }
341
+
342
+ float dL_dz = 0.0f;
343
+ float dL_dweight = 0;
344
+ #if RENDER_AXUTILITY
345
+ const float m_d = far_n / (far_n - near_n) * (1 - near_n / c_d);
346
+ const float dmd_dd = (far_n * near_n) / ((far_n - near_n) * c_d * c_d);
347
+ if (contributor == median_contributor-1) {
348
+ dL_dz += dL_dmedian_depth;
349
+ // dL_dweight += dL_dmax_dweight;
350
+ }
351
+ #if DETACH_WEIGHT
352
+ // if not detached weight, sometimes
353
+ // it will bia toward creating extragated 2D Gaussians near front
354
+ dL_dweight += 0;
355
+ #else
356
+ dL_dweight += (final_D2 + m_d * m_d * final_A - 2 * m_d * final_D) * dL_dreg;
357
+ #endif
358
+ dL_dalpha += dL_dweight - last_dL_dT;
359
+ // propagate the current weight W_{i} to next weight W_{i-1}
360
+ last_dL_dT = dL_dweight * alpha + (1 - alpha) * last_dL_dT;
361
+ const float dL_dmd = 2.0f * (T * alpha) * (m_d * final_A - final_D) * dL_dreg;
362
+ dL_dz += dL_dmd * dmd_dd;
363
+
364
+ // Propagate gradients w.r.t ray-splat depths
365
+ accum_depth_rec = last_alpha * last_depth + (1.f - last_alpha) * accum_depth_rec;
366
+ last_depth = c_d;
367
+ dL_dalpha += (c_d - accum_depth_rec) * dL_ddepth;
368
+ // Propagate gradients w.r.t. color ray-splat alphas
369
+ accum_alpha_rec = last_alpha * 1.0 + (1.f - last_alpha) * accum_alpha_rec;
370
+ dL_dalpha += (1 - accum_alpha_rec) * dL_daccum;
371
+
372
+ // Propagate gradients to per-Gaussian normals
373
+ for (int ch = 0; ch < 3; ch++) {
374
+ accum_normal_rec[ch] = last_alpha * last_normal[ch] + (1.f - last_alpha) * accum_normal_rec[ch];
375
+ last_normal[ch] = normal[ch];
376
+ dL_dalpha += (normal[ch] - accum_normal_rec[ch]) * dL_dnormal2D[ch];
377
+ atomicAdd((&dL_dnormal3D[global_id * 3 + ch]), alpha * T * dL_dnormal2D[ch]);
378
+ }
379
+ #endif
380
+
381
+ dL_dalpha *= T;
382
+ // Update last alpha (to be used in the next iteration)
383
+ last_alpha = alpha;
384
+
385
+ // Account for fact that alpha also influences how much of
386
+ // the background color is added if nothing left to blend
387
+ float bg_dot_dpixel = 0;
388
+ for (int i = 0; i < C; i++)
389
+ bg_dot_dpixel += bg_color[i] * dL_dpixel[i];
390
+ dL_dalpha += (-T_final / (1.f - alpha)) * bg_dot_dpixel;
391
+
392
+
393
+ // Helpful reusable temporary variables
394
+ const float dL_dG = nor_o.w * dL_dalpha;
395
+ #if RENDER_AXUTILITY
396
+ dL_dz += alpha * T * dL_ddepth;
397
+ #endif
398
+
399
+ if (rho3d <= rho2d) {
400
+ // Update gradients w.r.t. covariance of Gaussian 3x3 (T)
401
+ const float2 dL_ds = {
402
+ dL_dG * -G * s.x + dL_dz * Tw.x,
403
+ dL_dG * -G * s.y + dL_dz * Tw.y
404
+ };
405
+ const float3 dz_dTw = {s.x, s.y, 1.0};
406
+ const float dsx_pz = dL_ds.x / p.z;
407
+ const float dsy_pz = dL_ds.y / p.z;
408
+ const float3 dL_dp = {dsx_pz, dsy_pz, -(dsx_pz * s.x + dsy_pz * s.y)};
409
+ const float3 dL_dk = cross(l, dL_dp);
410
+ const float3 dL_dl = cross(dL_dp, k);
411
+
412
+ const float3 dL_dTu = {-dL_dk.x, -dL_dk.y, -dL_dk.z};
413
+ const float3 dL_dTv = {-dL_dl.x, -dL_dl.y, -dL_dl.z};
414
+ const float3 dL_dTw = {
415
+ pixf.x * dL_dk.x + pixf.y * dL_dl.x + dL_dz * dz_dTw.x,
416
+ pixf.x * dL_dk.y + pixf.y * dL_dl.y + dL_dz * dz_dTw.y,
417
+ pixf.x * dL_dk.z + pixf.y * dL_dl.z + dL_dz * dz_dTw.z};
418
+
419
+
420
+ // Update gradients w.r.t. 3D covariance (3x3 matrix)
421
+ atomicAdd(&dL_dtransMat[global_id * 9 + 0], dL_dTu.x);
422
+ atomicAdd(&dL_dtransMat[global_id * 9 + 1], dL_dTu.y);
423
+ atomicAdd(&dL_dtransMat[global_id * 9 + 2], dL_dTu.z);
424
+ atomicAdd(&dL_dtransMat[global_id * 9 + 3], dL_dTv.x);
425
+ atomicAdd(&dL_dtransMat[global_id * 9 + 4], dL_dTv.y);
426
+ atomicAdd(&dL_dtransMat[global_id * 9 + 5], dL_dTv.z);
427
+ atomicAdd(&dL_dtransMat[global_id * 9 + 6], dL_dTw.x);
428
+ atomicAdd(&dL_dtransMat[global_id * 9 + 7], dL_dTw.y);
429
+ atomicAdd(&dL_dtransMat[global_id * 9 + 8], dL_dTw.z);
430
+ } else {
431
+ // // Update gradients w.r.t. center of Gaussian 2D mean position
432
+ const float dG_ddelx = -G * FilterInvSquare * d.x;
433
+ const float dG_ddely = -G * FilterInvSquare * d.y;
434
+ atomicAdd(&dL_dmean2D[global_id].x, dL_dG * dG_ddelx); // not scaled
435
+ atomicAdd(&dL_dmean2D[global_id].y, dL_dG * dG_ddely); // not scaled
436
+ // // Propagate the gradients of depth
437
+ atomicAdd(&dL_dtransMat[global_id * 9 + 6], s.x * dL_dz);
438
+ atomicAdd(&dL_dtransMat[global_id * 9 + 7], s.y * dL_dz);
439
+ atomicAdd(&dL_dtransMat[global_id * 9 + 8], dL_dz);
440
+ }
441
+
442
+ // Update gradients w.r.t. opacity of the Gaussian
443
+ atomicAdd(&(dL_dopacity[global_id]), G * dL_dalpha);
444
+ }
445
+ }
446
+ }
447
+
448
+
449
+ __device__ void compute_transmat_aabb(
450
+ int idx,
451
+ const float* Ts_precomp,
452
+ const float3* p_origs,
453
+ const glm::vec2* scales,
454
+ const glm::vec4* rots,
455
+ const float* projmatrix,
456
+ const float* viewmatrix,
457
+ const int W, const int H,
458
+ const float3* dL_dnormals,
459
+ const float3* dL_dmean2Ds,
460
+ float* dL_dTs,
461
+ glm::vec3* dL_dmeans,
462
+ glm::vec2* dL_dscales,
463
+ glm::vec4* dL_drots)
464
+ {
465
+ glm::mat3 T;
466
+ float3 normal;
467
+ glm::mat3x4 P;
468
+ glm::mat3 R;
469
+ glm::mat3 S;
470
+ float3 p_orig;
471
+ glm::vec4 rot;
472
+ glm::vec2 scale;
473
+
474
+ // Get transformation matrix of the Gaussian
475
+ if (Ts_precomp != nullptr) {
476
+ T = glm::mat3(
477
+ Ts_precomp[idx * 9 + 0], Ts_precomp[idx * 9 + 1], Ts_precomp[idx * 9 + 2],
478
+ Ts_precomp[idx * 9 + 3], Ts_precomp[idx * 9 + 4], Ts_precomp[idx * 9 + 5],
479
+ Ts_precomp[idx * 9 + 6], Ts_precomp[idx * 9 + 7], Ts_precomp[idx * 9 + 8]
480
+ );
481
+ normal = {0.0, 0.0, 0.0};
482
+ } else {
483
+ p_orig = p_origs[idx];
484
+ rot = rots[idx];
485
+ scale = scales[idx];
486
+ R = quat_to_rotmat(rot);
487
+ S = scale_to_mat(scale, 1.0f);
488
+
489
+ glm::mat3 L = R * S;
490
+ glm::mat3x4 M = glm::mat3x4(
491
+ glm::vec4(L[0], 0.0),
492
+ glm::vec4(L[1], 0.0),
493
+ glm::vec4(p_orig.x, p_orig.y, p_orig.z, 1)
494
+ );
495
+
496
+ glm::mat4 world2ndc = glm::mat4(
497
+ projmatrix[0], projmatrix[4], projmatrix[8], projmatrix[12],
498
+ projmatrix[1], projmatrix[5], projmatrix[9], projmatrix[13],
499
+ projmatrix[2], projmatrix[6], projmatrix[10], projmatrix[14],
500
+ projmatrix[3], projmatrix[7], projmatrix[11], projmatrix[15]
501
+ );
502
+
503
+ glm::mat3x4 ndc2pix = glm::mat3x4(
504
+ glm::vec4(float(W) / 2.0, 0.0, 0.0, float(W-1) / 2.0),
505
+ glm::vec4(0.0, float(H) / 2.0, 0.0, float(H-1) / 2.0),
506
+ glm::vec4(0.0, 0.0, 0.0, 1.0)
507
+ );
508
+
509
+ P = world2ndc * ndc2pix;
510
+ T = glm::transpose(M) * P;
511
+ normal = transformVec4x3({L[2].x, L[2].y, L[2].z}, viewmatrix);
512
+ }
513
+
514
+ // Update gradients w.r.t. transformation matrix of the Gaussian
515
+ glm::mat3 dL_dT = glm::mat3(
516
+ dL_dTs[idx*9+0], dL_dTs[idx*9+1], dL_dTs[idx*9+2],
517
+ dL_dTs[idx*9+3], dL_dTs[idx*9+4], dL_dTs[idx*9+5],
518
+ dL_dTs[idx*9+6], dL_dTs[idx*9+7], dL_dTs[idx*9+8]
519
+ );
520
+ float3 dL_dmean2D = dL_dmean2Ds[idx];
521
+ if(dL_dmean2D.x != 0 || dL_dmean2D.y != 0)
522
+ {
523
+ glm::vec3 t_vec = glm::vec3(9.0f, 9.0f, -1.0f);
524
+ float d = glm::dot(t_vec, T[2] * T[2]);
525
+ glm::vec3 f_vec = t_vec * (1.0f / d);
526
+ glm::vec3 dL_dT0 = dL_dmean2D.x * f_vec * T[2];
527
+ glm::vec3 dL_dT1 = dL_dmean2D.y * f_vec * T[2];
528
+ glm::vec3 dL_dT3 = dL_dmean2D.x * f_vec * T[0] + dL_dmean2D.y * f_vec * T[1];
529
+ glm::vec3 dL_df = dL_dmean2D.x * T[0] * T[2] + dL_dmean2D.y * T[1] * T[2];
530
+ float dL_dd = glm::dot(dL_df, f_vec) * (-1.0 / d);
531
+ glm::vec3 dd_dT3 = t_vec * T[2] * 2.0f;
532
+ dL_dT3 += dL_dd * dd_dT3;
533
+ dL_dT[0] += dL_dT0;
534
+ dL_dT[1] += dL_dT1;
535
+ dL_dT[2] += dL_dT3;
536
+
537
+ if (Ts_precomp != nullptr) {
538
+ dL_dTs[idx * 9 + 0] = dL_dT[0].x;
539
+ dL_dTs[idx * 9 + 1] = dL_dT[0].y;
540
+ dL_dTs[idx * 9 + 2] = dL_dT[0].z;
541
+ dL_dTs[idx * 9 + 3] = dL_dT[1].x;
542
+ dL_dTs[idx * 9 + 4] = dL_dT[1].y;
543
+ dL_dTs[idx * 9 + 5] = dL_dT[1].z;
544
+ dL_dTs[idx * 9 + 6] = dL_dT[2].x;
545
+ dL_dTs[idx * 9 + 7] = dL_dT[2].y;
546
+ dL_dTs[idx * 9 + 8] = dL_dT[2].z;
547
+ return;
548
+ }
549
+ }
550
+
551
+ if (Ts_precomp != nullptr) return;
552
+
553
+ // Update gradients w.r.t. scaling, rotation, position of the Gaussian
554
+ glm::mat3x4 dL_dM = P * glm::transpose(dL_dT);
555
+ float3 dL_dtn = transformVec4x3Transpose(dL_dnormals[idx], viewmatrix);
556
+ #if DUAL_VISIABLE
557
+ float3 p_view = transformPoint4x3(p_orig, viewmatrix);
558
+ float cos = -sumf3(p_view * normal);
559
+ float multiplier = cos > 0 ? 1: -1;
560
+ dL_dtn = multiplier * dL_dtn;
561
+ #endif
562
+ glm::mat3 dL_dRS = glm::mat3(
563
+ glm::vec3(dL_dM[0]),
564
+ glm::vec3(dL_dM[1]),
565
+ glm::vec3(dL_dtn.x, dL_dtn.y, dL_dtn.z)
566
+ );
567
+
568
+ glm::mat3 dL_dR = glm::mat3(
569
+ dL_dRS[0] * glm::vec3(scale.x),
570
+ dL_dRS[1] * glm::vec3(scale.y),
571
+ dL_dRS[2]);
572
+
573
+ dL_drots[idx] = quat_to_rotmat_vjp(rot, dL_dR);
574
+ dL_dscales[idx] = glm::vec2(
575
+ (float)glm::dot(dL_dRS[0], R[0]),
576
+ (float)glm::dot(dL_dRS[1], R[1])
577
+ );
578
+ dL_dmeans[idx] = glm::vec3(dL_dM[2]);
579
+ }
580
+
581
+ template<int C>
582
+ __global__ void preprocessCUDA(
583
+ int P, int D, int M,
584
+ const float3* means3D,
585
+ const float* transMats,
586
+ const int* radii,
587
+ const float* shs,
588
+ const bool* clamped,
589
+ const glm::vec2* scales,
590
+ const glm::vec4* rotations,
591
+ const float scale_modifier,
592
+ const float* viewmatrix,
593
+ const float* projmatrix,
594
+ const float focal_x,
595
+ const float focal_y,
596
+ const float tan_fovx,
597
+ const float tan_fovy,
598
+ const glm::vec3* campos,
599
+ // grad input
600
+ float* dL_dtransMats,
601
+ const float* dL_dnormal3Ds,
602
+ float* dL_dcolors,
603
+ float* dL_dshs,
604
+ float3* dL_dmean2Ds,
605
+ glm::vec3* dL_dmean3Ds,
606
+ glm::vec2* dL_dscales,
607
+ glm::vec4* dL_drots)
608
+ {
609
+ auto idx = cg::this_grid().thread_rank();
610
+ if (idx >= P || !(radii[idx] > 0))
611
+ return;
612
+
613
+ const int W = int(focal_x * tan_fovx * 2);
614
+ const int H = int(focal_y * tan_fovy * 2);
615
+ const float * Ts_precomp = (scales) ? nullptr : transMats;
616
+ compute_transmat_aabb(
617
+ idx,
618
+ Ts_precomp,
619
+ means3D, scales, rotations,
620
+ projmatrix, viewmatrix, W, H,
621
+ (float3*)dL_dnormal3Ds,
622
+ dL_dmean2Ds,
623
+ (dL_dtransMats),
624
+ dL_dmean3Ds,
625
+ dL_dscales,
626
+ dL_drots
627
+ );
628
+
629
+ if (shs)
630
+ computeColorFromSH(idx, D, M, (glm::vec3*)means3D, *campos, shs, clamped, (glm::vec3*)dL_dcolors, (glm::vec3*)dL_dmean3Ds, (glm::vec3*)dL_dshs);
631
+
632
+ // hack the gradient here for densitification
633
+ float depth = transMats[idx * 9 + 8];
634
+ dL_dmean2Ds[idx].x = dL_dtransMats[idx * 9 + 2] * depth * 0.5 * float(W); // to ndc
635
+ dL_dmean2Ds[idx].y = dL_dtransMats[idx * 9 + 5] * depth * 0.5 * float(H); // to ndc
636
+ }
637
+
638
+
639
+ void BACKWARD::preprocess(
640
+ int P, int D, int M,
641
+ const float3* means3D,
642
+ const int* radii,
643
+ const float* shs,
644
+ const bool* clamped,
645
+ const glm::vec2* scales,
646
+ const glm::vec4* rotations,
647
+ const float scale_modifier,
648
+ const float* transMats,
649
+ const float* viewmatrix,
650
+ const float* projmatrix,
651
+ const float focal_x, const float focal_y,
652
+ const float tan_fovx, const float tan_fovy,
653
+ const glm::vec3* campos,
654
+ float3* dL_dmean2Ds,
655
+ const float* dL_dnormal3Ds,
656
+ float* dL_dtransMats,
657
+ float* dL_dcolors,
658
+ float* dL_dshs,
659
+ glm::vec3* dL_dmean3Ds,
660
+ glm::vec2* dL_dscales,
661
+ glm::vec4* dL_drots)
662
+ {
663
+ preprocessCUDA<NUM_CHANNELS><< <(P + 255) / 256, 256 >> > (
664
+ P, D, M,
665
+ (float3*)means3D,
666
+ transMats,
667
+ radii,
668
+ shs,
669
+ clamped,
670
+ (glm::vec2*)scales,
671
+ (glm::vec4*)rotations,
672
+ scale_modifier,
673
+ viewmatrix,
674
+ projmatrix,
675
+ focal_x,
676
+ focal_y,
677
+ tan_fovx,
678
+ tan_fovy,
679
+ campos,
680
+ dL_dtransMats,
681
+ dL_dnormal3Ds,
682
+ dL_dcolors,
683
+ dL_dshs,
684
+ dL_dmean2Ds,
685
+ dL_dmean3Ds,
686
+ dL_dscales,
687
+ dL_drots
688
+ );
689
+ }
690
+
691
+ void BACKWARD::render(
692
+ const dim3 grid, const dim3 block,
693
+ const uint2* ranges,
694
+ const uint32_t* point_list,
695
+ int W, int H,
696
+ float focal_x, float focal_y,
697
+ const float* bg_color,
698
+ const float2* means2D,
699
+ const float4* normal_opacity,
700
+ const float* colors,
701
+ const float* transMats,
702
+ const float* depths,
703
+ const float* final_Ts,
704
+ const uint32_t* n_contrib,
705
+ const float* dL_dpixels,
706
+ const float* dL_depths,
707
+ float * dL_dtransMat,
708
+ float3* dL_dmean2D,
709
+ float* dL_dnormal3D,
710
+ float* dL_dopacity,
711
+ float* dL_dcolors)
712
+ {
713
+ renderCUDA<NUM_CHANNELS> << <grid, block >> >(
714
+ ranges,
715
+ point_list,
716
+ W, H,
717
+ focal_x, focal_y,
718
+ bg_color,
719
+ means2D,
720
+ normal_opacity,
721
+ transMats,
722
+ colors,
723
+ depths,
724
+ final_Ts,
725
+ n_contrib,
726
+ dL_dpixels,
727
+ dL_depths,
728
+ dL_dtransMat,
729
+ dL_dmean2D,
730
+ dL_dnormal3D,
731
+ dL_dopacity,
732
+ dL_dcolors
733
+ );
734
+ }
submodules/diff-surfel-rasterization/cuda_rasterizer/backward.h ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #ifndef CUDA_RASTERIZER_BACKWARD_H_INCLUDED
13
+ #define CUDA_RASTERIZER_BACKWARD_H_INCLUDED
14
+
15
+ #include <cuda.h>
16
+ #include "cuda_runtime.h"
17
+ #include "device_launch_parameters.h"
18
+ #define GLM_FORCE_CUDA
19
+ #include <glm/glm.hpp>
20
+
21
+ namespace BACKWARD
22
+ {
23
+ void render(
24
+ const dim3 grid, dim3 block,
25
+ const uint2* ranges,
26
+ const uint32_t* point_list,
27
+ int W, int H,
28
+ float focal_x, float focal_y,
29
+ const float* bg_color,
30
+ const float2* means2D,
31
+ const float4* normal_opacity,
32
+ const float* transMats,
33
+ const float* colors,
34
+ const float* depths,
35
+ const float* final_Ts,
36
+ const uint32_t* n_contrib,
37
+ const float* dL_dpixels,
38
+ const float* dL_depths,
39
+ float * dL_dtransMat,
40
+ float3* dL_dmean2D,
41
+ float* dL_dnormal3D,
42
+ float* dL_dopacity,
43
+ float* dL_dcolors);
44
+
45
+ void preprocess(
46
+ int P, int D, int M,
47
+ const float3* means,
48
+ const int* radii,
49
+ const float* shs,
50
+ const bool* clamped,
51
+ const glm::vec2* scales,
52
+ const glm::vec4* rotations,
53
+ const float scale_modifier,
54
+ const float* transMats,
55
+ const float* view,
56
+ const float* proj,
57
+ const float focal_x, const float focal_y,
58
+ const float tan_fovx, const float tan_fovy,
59
+ const glm::vec3* campos,
60
+ float3* dL_dmean2D,
61
+ const float* dL_dnormal3D,
62
+ float* dL_dtransMat,
63
+ float* dL_dcolor,
64
+ float* dL_dsh,
65
+ glm::vec3* dL_dmeans,
66
+ glm::vec2* dL_dscale,
67
+ glm::vec4* dL_drot);
68
+ }
69
+
70
+ #endif
submodules/diff-surfel-rasterization/cuda_rasterizer/config.h ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #ifndef CUDA_RASTERIZER_CONFIG_H_INCLUDED
13
+ #define CUDA_RASTERIZER_CONFIG_H_INCLUDED
14
+
15
+ #define NUM_CHANNELS 3 // Default 3, RGB
16
+ #define BLOCK_X 16
17
+ #define BLOCK_Y 16
18
+
19
+ #endif
submodules/diff-surfel-rasterization/cuda_rasterizer/forward.cu ADDED
@@ -0,0 +1,537 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #include "forward.h"
13
+ #include "auxiliary.h"
14
+ #include <cooperative_groups.h>
15
+ #include <cooperative_groups/reduce.h>
16
+ namespace cg = cooperative_groups;
17
+
18
+ // Forward method for converting the input spherical harmonics
19
+ // coefficients of each Gaussian to a simple RGB color.
20
+ __device__ glm::vec3 computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, bool* clamped)
21
+ {
22
+ // The implementation is loosely based on code for
23
+ // "Differentiable Point-Based Radiance Fields for
24
+ // Efficient View Synthesis" by Zhang et al. (2022)
25
+ glm::vec3 pos = means[idx];
26
+ glm::vec3 dir = pos - campos;
27
+ dir = dir / glm::length(dir);
28
+
29
+ glm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;
30
+ glm::vec3 result = SH_C0 * sh[0];
31
+
32
+ if (deg > 0)
33
+ {
34
+ float x = dir.x;
35
+ float y = dir.y;
36
+ float z = dir.z;
37
+ result = result - SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3];
38
+
39
+ if (deg > 1)
40
+ {
41
+ float xx = x * x, yy = y * y, zz = z * z;
42
+ float xy = x * y, yz = y * z, xz = x * z;
43
+ result = result +
44
+ SH_C2[0] * xy * sh[4] +
45
+ SH_C2[1] * yz * sh[5] +
46
+ SH_C2[2] * (2.0f * zz - xx - yy) * sh[6] +
47
+ SH_C2[3] * xz * sh[7] +
48
+ SH_C2[4] * (xx - yy) * sh[8];
49
+
50
+ if (deg > 2)
51
+ {
52
+ result = result +
53
+ SH_C3[0] * y * (3.0f * xx - yy) * sh[9] +
54
+ SH_C3[1] * xy * z * sh[10] +
55
+ SH_C3[2] * y * (4.0f * zz - xx - yy) * sh[11] +
56
+ SH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh[12] +
57
+ SH_C3[4] * x * (4.0f * zz - xx - yy) * sh[13] +
58
+ SH_C3[5] * z * (xx - yy) * sh[14] +
59
+ SH_C3[6] * x * (xx - 3.0f * yy) * sh[15];
60
+ }
61
+ }
62
+ }
63
+ result += 0.5f;
64
+
65
+ // RGB colors are clamped to positive values. If values are
66
+ // clamped, we need to keep track of this for the backward pass.
67
+ clamped[3 * idx + 0] = (result.x < 0);
68
+ clamped[3 * idx + 1] = (result.y < 0);
69
+ clamped[3 * idx + 2] = (result.z < 0);
70
+ return glm::max(result, 0.0f);
71
+ }
72
+
73
+ // Compute a 2D-to-2D mapping matrix from a tangent plane into a image plane
74
+ // given a 2D gaussian parameters.
75
+ __device__ void compute_transmat(
76
+ const float3& p_orig,
77
+ const glm::vec2 scale,
78
+ float mod,
79
+ const glm::vec4 rot,
80
+ const float* projmatrix,
81
+ const float* viewmatrix,
82
+ const int W,
83
+ const int H,
84
+ glm::mat3 &T,
85
+ float3 &normal
86
+ ) {
87
+
88
+ glm::mat3 R = quat_to_rotmat(rot);
89
+ glm::mat3 S = scale_to_mat(scale, mod);
90
+ glm::mat3 L = R * S;
91
+
92
+ // center of Gaussians in the camera coordinate
93
+ glm::mat3x4 splat2world = glm::mat3x4(
94
+ glm::vec4(L[0], 0.0),
95
+ glm::vec4(L[1], 0.0),
96
+ glm::vec4(p_orig.x, p_orig.y, p_orig.z, 1)
97
+ );
98
+
99
+ glm::mat4 world2ndc = glm::mat4(
100
+ projmatrix[0], projmatrix[4], projmatrix[8], projmatrix[12],
101
+ projmatrix[1], projmatrix[5], projmatrix[9], projmatrix[13],
102
+ projmatrix[2], projmatrix[6], projmatrix[10], projmatrix[14],
103
+ projmatrix[3], projmatrix[7], projmatrix[11], projmatrix[15]
104
+ );
105
+
106
+ glm::mat3x4 ndc2pix = glm::mat3x4(
107
+ glm::vec4(float(W) / 2.0, 0.0, 0.0, float(W-1) / 2.0),
108
+ glm::vec4(0.0, float(H) / 2.0, 0.0, float(H-1) / 2.0),
109
+ glm::vec4(0.0, 0.0, 0.0, 1.0)
110
+ );
111
+
112
+ T = glm::transpose(splat2world) * world2ndc * ndc2pix;
113
+ normal = transformVec4x3({L[2].x, L[2].y, L[2].z}, viewmatrix);
114
+
115
+ }
116
+
117
+ // Computing the bounding box of the 2D Gaussian and its center
118
+ // The center of the bounding box is used to create a low pass filter
119
+ __device__ bool compute_aabb(
120
+ glm::mat3 T,
121
+ float cutoff,
122
+ float2& point_image,
123
+ float2& extent
124
+ ) {
125
+ glm::vec3 t = glm::vec3(cutoff * cutoff, cutoff * cutoff, -1.0f);
126
+ float d = glm::dot(t, T[2] * T[2]);
127
+ if (d == 0.0) return false;
128
+ glm::vec3 f = (1 / d) * t;
129
+
130
+ glm::vec2 p = glm::vec2(
131
+ glm::dot(f, T[0] * T[2]),
132
+ glm::dot(f, T[1] * T[2])
133
+ );
134
+
135
+ glm::vec2 h0 = p * p -
136
+ glm::vec2(
137
+ glm::dot(f, T[0] * T[0]),
138
+ glm::dot(f, T[1] * T[1])
139
+ );
140
+
141
+ glm::vec2 h = sqrt(max(glm::vec2(1e-4, 1e-4), h0));
142
+ point_image = {p.x, p.y};
143
+ extent = {h.x, h.y};
144
+ return true;
145
+ }
146
+
147
+ // Perform initial steps for each Gaussian prior to rasterization.
148
+ template<int C>
149
+ __global__ void preprocessCUDA(int P, int D, int M,
150
+ const float* orig_points,
151
+ const glm::vec2* scales,
152
+ const float scale_modifier,
153
+ const glm::vec4* rotations,
154
+ const float* opacities,
155
+ const float* shs,
156
+ bool* clamped,
157
+ const float* transMat_precomp,
158
+ const float* colors_precomp,
159
+ const float* viewmatrix,
160
+ const float* projmatrix,
161
+ const glm::vec3* cam_pos,
162
+ const int W, int H,
163
+ const float tan_fovx, const float tan_fovy,
164
+ const float focal_x, const float focal_y,
165
+ int* radii,
166
+ float2* points_xy_image,
167
+ float* depths,
168
+ float* transMats,
169
+ float* rgb,
170
+ float4* normal_opacity,
171
+ const dim3 grid,
172
+ uint32_t* tiles_touched,
173
+ bool prefiltered)
174
+ {
175
+ auto idx = cg::this_grid().thread_rank();
176
+ if (idx >= P)
177
+ return;
178
+
179
+ // Initialize radius and touched tiles to 0. If this isn't changed,
180
+ // this Gaussian will not be processed further.
181
+ radii[idx] = 0;
182
+ tiles_touched[idx] = 0;
183
+
184
+ // Perform near culling, quit if outside.
185
+ float3 p_view;
186
+ if (!in_frustum(idx, orig_points, viewmatrix, projmatrix, prefiltered, p_view))
187
+ return;
188
+
189
+ // Compute transformation matrix
190
+ glm::mat3 T;
191
+ float3 normal;
192
+ if (transMat_precomp == nullptr)
193
+ {
194
+ compute_transmat(((float3*)orig_points)[idx], scales[idx], scale_modifier, rotations[idx], projmatrix, viewmatrix, W, H, T, normal);
195
+ float3 *T_ptr = (float3*)transMats;
196
+ T_ptr[idx * 3 + 0] = {T[0][0], T[0][1], T[0][2]};
197
+ T_ptr[idx * 3 + 1] = {T[1][0], T[1][1], T[1][2]};
198
+ T_ptr[idx * 3 + 2] = {T[2][0], T[2][1], T[2][2]};
199
+ } else {
200
+ glm::vec3 *T_ptr = (glm::vec3*)transMat_precomp;
201
+ T = glm::mat3(
202
+ T_ptr[idx * 3 + 0],
203
+ T_ptr[idx * 3 + 1],
204
+ T_ptr[idx * 3 + 2]
205
+ );
206
+ normal = make_float3(0.0, 0.0, 1.0);
207
+ }
208
+
209
+ #if DUAL_VISIABLE
210
+ float cos = -sumf3(p_view * normal);
211
+ if (cos == 0) return;
212
+ float multiplier = cos > 0 ? 1: -1;
213
+ normal = multiplier * normal;
214
+ #endif
215
+
216
+ #if TIGHTBBOX // no use in the paper, but it indeed help speeds.
217
+ // the effective extent is now depended on the opacity of gaussian.
218
+ float cutoff = sqrtf(max(9.f + 2.f * logf(opacities[idx]), 0.000001));
219
+ #else
220
+ float cutoff = 3.0f;
221
+ #endif
222
+
223
+ // Compute center and radius
224
+ float2 point_image;
225
+ float radius;
226
+ {
227
+ float2 extent;
228
+ bool ok = compute_aabb(T, cutoff, point_image, extent);
229
+ if (!ok) return;
230
+ radius = ceil(max(max(extent.x, extent.y), cutoff * FilterSize));
231
+ }
232
+
233
+ uint2 rect_min, rect_max;
234
+ getRect(point_image, radius, rect_min, rect_max, grid);
235
+ if ((rect_max.x - rect_min.x) * (rect_max.y - rect_min.y) == 0)
236
+ return;
237
+
238
+ // Compute colors
239
+ if (colors_precomp == nullptr) {
240
+ glm::vec3 result = computeColorFromSH(idx, D, M, (glm::vec3*)orig_points, *cam_pos, shs, clamped);
241
+ rgb[idx * C + 0] = result.x;
242
+ rgb[idx * C + 1] = result.y;
243
+ rgb[idx * C + 2] = result.z;
244
+ }
245
+
246
+ depths[idx] = p_view.z;
247
+ radii[idx] = (int)radius;
248
+ points_xy_image[idx] = point_image;
249
+ normal_opacity[idx] = {normal.x, normal.y, normal.z, opacities[idx]};
250
+ tiles_touched[idx] = (rect_max.y - rect_min.y) * (rect_max.x - rect_min.x);
251
+ }
252
+
253
+ // Main rasterization method. Collaboratively works on one tile per
254
+ // block, each thread treats one pixel. Alternates between fetching
255
+ // and rasterizing data.
256
+ template <uint32_t CHANNELS>
257
+ __global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)
258
+ renderCUDA(
259
+ const uint2* __restrict__ ranges,
260
+ const uint32_t* __restrict__ point_list,
261
+ int W, int H,
262
+ float focal_x, float focal_y,
263
+ const float2* __restrict__ points_xy_image,
264
+ const float* __restrict__ features,
265
+ const float* __restrict__ transMats,
266
+ const float* __restrict__ depths,
267
+ const float4* __restrict__ normal_opacity,
268
+ float* __restrict__ final_T,
269
+ uint32_t* __restrict__ n_contrib,
270
+ const float* __restrict__ bg_color,
271
+ float* __restrict__ out_color,
272
+ float* __restrict__ out_others)
273
+ {
274
+ // Identify current tile and associated min/max pixel range.
275
+ auto block = cg::this_thread_block();
276
+ uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;
277
+ uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };
278
+ uint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) };
279
+ uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };
280
+ uint32_t pix_id = W * pix.y + pix.x;
281
+ float2 pixf = { (float)pix.x, (float)pix.y};
282
+
283
+ // Check if this thread is associated with a valid pixel or outside.
284
+ bool inside = pix.x < W&& pix.y < H;
285
+ // Done threads can help with fetching, but don't rasterize
286
+ bool done = !inside;
287
+
288
+ // Load start/end range of IDs to process in bit sorted list.
289
+ uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];
290
+ const int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);
291
+ int toDo = range.y - range.x;
292
+
293
+ // Allocate storage for batches of collectively fetched data.
294
+ __shared__ int collected_id[BLOCK_SIZE];
295
+ __shared__ float2 collected_xy[BLOCK_SIZE];
296
+ __shared__ float4 collected_normal_opacity[BLOCK_SIZE];
297
+ __shared__ float3 collected_Tu[BLOCK_SIZE];
298
+ __shared__ float3 collected_Tv[BLOCK_SIZE];
299
+ __shared__ float3 collected_Tw[BLOCK_SIZE];
300
+
301
+ // Initialize helper variables
302
+ float T = 1.0f;
303
+ uint32_t contributor = 0;
304
+ uint32_t last_contributor = 0;
305
+ float C[CHANNELS] = { 0 };
306
+
307
+
308
+ #if RENDER_AXUTILITY
309
+ // render axutility ouput
310
+ float N[3] = {0};
311
+ float D = { 0 };
312
+ float M1 = {0};
313
+ float M2 = {0};
314
+ float distortion = {0};
315
+ float median_depth = {0};
316
+ // float median_weight = {0};
317
+ float median_contributor = {-1};
318
+
319
+ #endif
320
+
321
+ // Iterate over batches until all done or range is complete
322
+ for (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)
323
+ {
324
+ // End if entire block votes that it is done rasterizing
325
+ int num_done = __syncthreads_count(done);
326
+ if (num_done == BLOCK_SIZE)
327
+ break;
328
+
329
+ // Collectively fetch per-Gaussian data from global to shared
330
+ int progress = i * BLOCK_SIZE + block.thread_rank();
331
+ if (range.x + progress < range.y)
332
+ {
333
+ int coll_id = point_list[range.x + progress];
334
+ collected_id[block.thread_rank()] = coll_id;
335
+ collected_xy[block.thread_rank()] = points_xy_image[coll_id];
336
+ collected_normal_opacity[block.thread_rank()] = normal_opacity[coll_id];
337
+ collected_Tu[block.thread_rank()] = {transMats[9 * coll_id+0], transMats[9 * coll_id+1], transMats[9 * coll_id+2]};
338
+ collected_Tv[block.thread_rank()] = {transMats[9 * coll_id+3], transMats[9 * coll_id+4], transMats[9 * coll_id+5]};
339
+ collected_Tw[block.thread_rank()] = {transMats[9 * coll_id+6], transMats[9 * coll_id+7], transMats[9 * coll_id+8]};
340
+ }
341
+ block.sync();
342
+
343
+ // Iterate over current batch
344
+ for (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)
345
+ {
346
+ // Keep track of current position in range
347
+ contributor++;
348
+
349
+ // Fisrt compute two homogeneous planes, See Eq. (8)
350
+ const float2 xy = collected_xy[j];
351
+ const float3 Tu = collected_Tu[j];
352
+ const float3 Tv = collected_Tv[j];
353
+ const float3 Tw = collected_Tw[j];
354
+ // Transform the two planes into local u-v system.
355
+ float3 k = pix.x * Tw - Tu;
356
+ float3 l = pix.y * Tw - Tv;
357
+ // Cross product of two planes is a line, Eq. (9)
358
+ float3 p = cross(k, l);
359
+ if (p.z == 0.0) continue;
360
+ // Perspective division to get the intersection (u,v), Eq. (10)
361
+ float2 s = {p.x / p.z, p.y / p.z};
362
+ float rho3d = (s.x * s.x + s.y * s.y);
363
+ // Add low pass filter
364
+ float2 d = {xy.x - pixf.x, xy.y - pixf.y};
365
+ float rho2d = FilterInvSquare * (d.x * d.x + d.y * d.y);
366
+ float rho = min(rho3d, rho2d);
367
+
368
+ // compute depth
369
+ float depth = (s.x * Tw.x + s.y * Tw.y) + Tw.z;
370
+ // if a point is too small, its depth is not reliable?
371
+ // depth = (rho3d <= rho2d) ? depth : Tw.z
372
+ if (depth < near_n) continue;
373
+
374
+ float4 nor_o = collected_normal_opacity[j];
375
+ float normal[3] = {nor_o.x, nor_o.y, nor_o.z};
376
+ float opa = nor_o.w;
377
+
378
+ float power = -0.5f * rho;
379
+ if (power > 0.0f)
380
+ continue;
381
+
382
+ // Eq. (2) from 3D Gaussian splatting paper.
383
+ // Obtain alpha by multiplying with Gaussian opacity
384
+ // and its exponential falloff from mean.
385
+ // Avoid numerical instabilities (see paper appendix).
386
+ float alpha = min(0.99f, opa * exp(power));
387
+ if (alpha < 1.0f / 255.0f)
388
+ continue;
389
+ float test_T = T * (1 - alpha);
390
+ if (test_T < 0.0001f)
391
+ {
392
+ done = true;
393
+ continue;
394
+ }
395
+
396
+ float w = alpha * T;
397
+ #if RENDER_AXUTILITY
398
+ // Render depth distortion map
399
+ // Efficient implementation of distortion loss, see 2DGS' paper appendix.
400
+ float A = 1-T;
401
+ float m = far_n / (far_n - near_n) * (1 - near_n / depth);
402
+ distortion += (m * m * A + M2 - 2 * m * M1) * w;
403
+ D += depth * w;
404
+ M1 += m * w;
405
+ M2 += m * m * w;
406
+
407
+ if (T > 0.5) {
408
+ median_depth = depth;
409
+ // median_weight = w;
410
+ median_contributor = contributor;
411
+ }
412
+ // Render normal map
413
+ for (int ch=0; ch<3; ch++) N[ch] += normal[ch] * w;
414
+ #endif
415
+
416
+ // Eq. (3) from 3D Gaussian splatting paper.
417
+ for (int ch = 0; ch < CHANNELS; ch++)
418
+ C[ch] += features[collected_id[j] * CHANNELS + ch] * w;
419
+ T = test_T;
420
+
421
+ // Keep track of last range entry to update this
422
+ // pixel.
423
+ last_contributor = contributor;
424
+ }
425
+ }
426
+
427
+ // All threads that treat valid pixel write out their final
428
+ // rendering data to the frame and auxiliary buffers.
429
+ if (inside)
430
+ {
431
+ final_T[pix_id] = T;
432
+ n_contrib[pix_id] = last_contributor;
433
+ for (int ch = 0; ch < CHANNELS; ch++)
434
+ out_color[ch * H * W + pix_id] = C[ch] + T * bg_color[ch];
435
+
436
+ #if RENDER_AXUTILITY
437
+ n_contrib[pix_id + H * W] = median_contributor;
438
+ final_T[pix_id + H * W] = M1;
439
+ final_T[pix_id + 2 * H * W] = M2;
440
+ out_others[pix_id + DEPTH_OFFSET * H * W] = D;
441
+ out_others[pix_id + ALPHA_OFFSET * H * W] = 1 - T;
442
+ for (int ch=0; ch<3; ch++) out_others[pix_id + (NORMAL_OFFSET+ch) * H * W] = N[ch];
443
+ out_others[pix_id + MIDDEPTH_OFFSET * H * W] = median_depth;
444
+ out_others[pix_id + DISTORTION_OFFSET * H * W] = distortion;
445
+ // out_others[pix_id + MEDIAN_WEIGHT_OFFSET * H * W] = median_weight;
446
+ #endif
447
+ }
448
+ }
449
+
450
+ void FORWARD::render(
451
+ const dim3 grid, dim3 block,
452
+ const uint2* ranges,
453
+ const uint32_t* point_list,
454
+ int W, int H,
455
+ float focal_x, float focal_y,
456
+ const float2* means2D,
457
+ const float* colors,
458
+ const float* transMats,
459
+ const float* depths,
460
+ const float4* normal_opacity,
461
+ float* final_T,
462
+ uint32_t* n_contrib,
463
+ const float* bg_color,
464
+ float* out_color,
465
+ float* out_others)
466
+ {
467
+ renderCUDA<NUM_CHANNELS> << <grid, block >> > (
468
+ ranges,
469
+ point_list,
470
+ W, H,
471
+ focal_x, focal_y,
472
+ means2D,
473
+ colors,
474
+ transMats,
475
+ depths,
476
+ normal_opacity,
477
+ final_T,
478
+ n_contrib,
479
+ bg_color,
480
+ out_color,
481
+ out_others);
482
+ }
483
+
484
+ void FORWARD::preprocess(int P, int D, int M,
485
+ const float* means3D,
486
+ const glm::vec2* scales,
487
+ const float scale_modifier,
488
+ const glm::vec4* rotations,
489
+ const float* opacities,
490
+ const float* shs,
491
+ bool* clamped,
492
+ const float* transMat_precomp,
493
+ const float* colors_precomp,
494
+ const float* viewmatrix,
495
+ const float* projmatrix,
496
+ const glm::vec3* cam_pos,
497
+ const int W, const int H,
498
+ const float focal_x, const float focal_y,
499
+ const float tan_fovx, const float tan_fovy,
500
+ int* radii,
501
+ float2* means2D,
502
+ float* depths,
503
+ float* transMats,
504
+ float* rgb,
505
+ float4* normal_opacity,
506
+ const dim3 grid,
507
+ uint32_t* tiles_touched,
508
+ bool prefiltered)
509
+ {
510
+ preprocessCUDA<NUM_CHANNELS> << <(P + 255) / 256, 256 >> > (
511
+ P, D, M,
512
+ means3D,
513
+ scales,
514
+ scale_modifier,
515
+ rotations,
516
+ opacities,
517
+ shs,
518
+ clamped,
519
+ transMat_precomp,
520
+ colors_precomp,
521
+ viewmatrix,
522
+ projmatrix,
523
+ cam_pos,
524
+ W, H,
525
+ tan_fovx, tan_fovy,
526
+ focal_x, focal_y,
527
+ radii,
528
+ means2D,
529
+ depths,
530
+ transMats,
531
+ rgb,
532
+ normal_opacity,
533
+ grid,
534
+ tiles_touched,
535
+ prefiltered
536
+ );
537
+ }
submodules/diff-surfel-rasterization/cuda_rasterizer/forward.h ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #ifndef CUDA_RASTERIZER_FORWARD_H_INCLUDED
13
+ #define CUDA_RASTERIZER_FORWARD_H_INCLUDED
14
+
15
+ #include <cuda.h>
16
+ #include "cuda_runtime.h"
17
+ #include "device_launch_parameters.h"
18
+ #define GLM_FORCE_CUDA
19
+ #include <glm/glm.hpp>
20
+
21
+ namespace FORWARD
22
+ {
23
+ // Perform initial steps for each Gaussian prior to rasterization.
24
+ void preprocess(int P, int D, int M,
25
+ const float* orig_points,
26
+ const glm::vec2* scales,
27
+ const float scale_modifier,
28
+ const glm::vec4* rotations,
29
+ const float* opacities,
30
+ const float* shs,
31
+ bool* clamped,
32
+ const float* transMat_precomp,
33
+ const float* colors_precomp,
34
+ const float* viewmatrix,
35
+ const float* projmatrix,
36
+ const glm::vec3* cam_pos,
37
+ const int W, int H,
38
+ const float focal_x, float focal_y,
39
+ const float tan_fovx, float tan_fovy,
40
+ int* radii,
41
+ float2* points_xy_image,
42
+ float* depths,
43
+ // float* isovals,
44
+ // float3* normals,
45
+ float* transMats,
46
+ float* colors,
47
+ float4* normal_opacity,
48
+ const dim3 grid,
49
+ uint32_t* tiles_touched,
50
+ bool prefiltered);
51
+
52
+ // Main rasterization method.
53
+ void render(
54
+ const dim3 grid, dim3 block,
55
+ const uint2* ranges,
56
+ const uint32_t* point_list,
57
+ int W, int H,
58
+ float focal_x, float focal_y,
59
+ const float2* points_xy_image,
60
+ const float* features,
61
+ const float* transMats,
62
+ const float* depths,
63
+ const float4* normal_opacity,
64
+ float* final_T,
65
+ uint32_t* n_contrib,
66
+ const float* bg_color,
67
+ float* out_color,
68
+ float* out_others);
69
+ }
70
+
71
+
72
+ #endif
submodules/diff-surfel-rasterization/cuda_rasterizer/rasterizer.h ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #ifndef CUDA_RASTERIZER_H_INCLUDED
13
+ #define CUDA_RASTERIZER_H_INCLUDED
14
+
15
+ #include <vector>
16
+ #include <functional>
17
+
18
+ namespace CudaRasterizer
19
+ {
20
+ class Rasterizer
21
+ {
22
+ public:
23
+
24
+ static void markVisible(
25
+ int P,
26
+ float* means3D,
27
+ float* viewmatrix,
28
+ float* projmatrix,
29
+ bool* present);
30
+
31
+ static int forward(
32
+ std::function<char* (size_t)> geometryBuffer,
33
+ std::function<char* (size_t)> binningBuffer,
34
+ std::function<char* (size_t)> imageBuffer,
35
+ const int P, int D, int M,
36
+ const float* background,
37
+ const int width, int height,
38
+ const float* means3D,
39
+ const float* shs,
40
+ const float* colors_precomp,
41
+ const float* opacities,
42
+ const float* scales,
43
+ const float scale_modifier,
44
+ const float* rotations,
45
+ const float* transMat_precomp,
46
+ const float* viewmatrix,
47
+ const float* projmatrix,
48
+ const float* cam_pos,
49
+ const float tan_fovx, float tan_fovy,
50
+ const bool prefiltered,
51
+ float* out_color,
52
+ float* out_others,
53
+ int* radii = nullptr,
54
+ bool debug = false);
55
+
56
+ static void backward(
57
+ const int P, int D, int M, int R,
58
+ const float* background,
59
+ const int width, int height,
60
+ const float* means3D,
61
+ const float* shs,
62
+ const float* colors_precomp,
63
+ const float* scales,
64
+ const float scale_modifier,
65
+ const float* rotations,
66
+ const float* transMat_precomp,
67
+ const float* viewmatrix,
68
+ const float* projmatrix,
69
+ const float* campos,
70
+ const float tan_fovx, float tan_fovy,
71
+ const int* radii,
72
+ char* geom_buffer,
73
+ char* binning_buffer,
74
+ char* image_buffer,
75
+ const float* dL_dpix,
76
+ const float* dL_depths,
77
+ float* dL_dmean2D,
78
+ float* dL_dnormal,
79
+ float* dL_dopacity,
80
+ float* dL_dcolor,
81
+ float* dL_dmean3D,
82
+ float* dL_dtransMat,
83
+ float* dL_dsh,
84
+ float* dL_dscale,
85
+ float* dL_drot,
86
+ bool debug);
87
+ };
88
+ };
89
+
90
+ #endif
submodules/diff-surfel-rasterization/cuda_rasterizer/rasterizer_impl.cu ADDED
@@ -0,0 +1,448 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #include "rasterizer_impl.h"
13
+ #include <iostream>
14
+ #include <fstream>
15
+ #include <algorithm>
16
+ #include <numeric>
17
+ #include <cuda.h>
18
+ #include "cuda_runtime.h"
19
+ #include "device_launch_parameters.h"
20
+ #include <cub/cub.cuh>
21
+ #include <cub/device/device_radix_sort.cuh>
22
+ #define GLM_FORCE_CUDA
23
+ #include <glm/glm.hpp>
24
+
25
+ #include <cooperative_groups.h>
26
+ #include <cooperative_groups/reduce.h>
27
+ namespace cg = cooperative_groups;
28
+
29
+ #include "auxiliary.h"
30
+ #include "forward.h"
31
+ #include "backward.h"
32
+
33
+ // Helper function to find the next-highest bit of the MSB
34
+ // on the CPU.
35
+ uint32_t getHigherMsb(uint32_t n)
36
+ {
37
+ uint32_t msb = sizeof(n) * 4;
38
+ uint32_t step = msb;
39
+ while (step > 1)
40
+ {
41
+ step /= 2;
42
+ if (n >> msb)
43
+ msb += step;
44
+ else
45
+ msb -= step;
46
+ }
47
+ if (n >> msb)
48
+ msb++;
49
+ return msb;
50
+ }
51
+
52
+ // Wrapper method to call auxiliary coarse frustum containment test.
53
+ // Mark all Gaussians that pass it.
54
+ __global__ void checkFrustum(int P,
55
+ const float* orig_points,
56
+ const float* viewmatrix,
57
+ const float* projmatrix,
58
+ bool* present)
59
+ {
60
+ auto idx = cg::this_grid().thread_rank();
61
+ if (idx >= P)
62
+ return;
63
+
64
+ float3 p_view;
65
+ present[idx] = in_frustum(idx, orig_points, viewmatrix, projmatrix, false, p_view);
66
+ }
67
+
68
+ // Generates one key/value pair for all Gaussian / tile overlaps.
69
+ // Run once per Gaussian (1:N mapping).
70
+ __global__ void duplicateWithKeys(
71
+ int P,
72
+ const float2* points_xy,
73
+ const float* depths,
74
+ const uint32_t* offsets,
75
+ uint64_t* gaussian_keys_unsorted,
76
+ uint32_t* gaussian_values_unsorted,
77
+ int* radii,
78
+ dim3 grid)
79
+ {
80
+ auto idx = cg::this_grid().thread_rank();
81
+ if (idx >= P)
82
+ return;
83
+
84
+ // Generate no key/value pair for invisible Gaussians
85
+ if (radii[idx] > 0)
86
+ {
87
+ // Find this Gaussian's offset in buffer for writing keys/values.
88
+ uint32_t off = (idx == 0) ? 0 : offsets[idx - 1];
89
+ uint2 rect_min, rect_max;
90
+
91
+ getRect(points_xy[idx], radii[idx], rect_min, rect_max, grid);
92
+
93
+ // For each tile that the bounding rect overlaps, emit a
94
+ // key/value pair. The key is | tile ID | depth |,
95
+ // and the value is the ID of the Gaussian. Sorting the values
96
+ // with this key yields Gaussian IDs in a list, such that they
97
+ // are first sorted by tile and then by depth.
98
+ for (int y = rect_min.y; y < rect_max.y; y++)
99
+ {
100
+ for (int x = rect_min.x; x < rect_max.x; x++)
101
+ {
102
+ uint64_t key = y * grid.x + x;
103
+ key <<= 32;
104
+ key |= *((uint32_t*)&depths[idx]);
105
+ gaussian_keys_unsorted[off] = key;
106
+ gaussian_values_unsorted[off] = idx;
107
+ off++;
108
+ }
109
+ }
110
+ }
111
+ }
112
+
113
+ // Check keys to see if it is at the start/end of one tile's range in
114
+ // the full sorted list. If yes, write start/end of this tile.
115
+ // Run once per instanced (duplicated) Gaussian ID.
116
+ __global__ void identifyTileRanges(int L, uint64_t* point_list_keys, uint2* ranges)
117
+ {
118
+ auto idx = cg::this_grid().thread_rank();
119
+ if (idx >= L)
120
+ return;
121
+
122
+ // Read tile ID from key. Update start/end of tile range if at limit.
123
+ uint64_t key = point_list_keys[idx];
124
+ uint32_t currtile = key >> 32;
125
+ if (idx == 0)
126
+ ranges[currtile].x = 0;
127
+ else
128
+ {
129
+ uint32_t prevtile = point_list_keys[idx - 1] >> 32;
130
+ if (currtile != prevtile)
131
+ {
132
+ ranges[prevtile].y = idx;
133
+ ranges[currtile].x = idx;
134
+ }
135
+ }
136
+ if (idx == L - 1)
137
+ ranges[currtile].y = L;
138
+ }
139
+
140
+ // Mark Gaussians as visible/invisible, based on view frustum testing
141
+ void CudaRasterizer::Rasterizer::markVisible(
142
+ int P,
143
+ float* means3D,
144
+ float* viewmatrix,
145
+ float* projmatrix,
146
+ bool* present)
147
+ {
148
+ checkFrustum << <(P + 255) / 256, 256 >> > (
149
+ P,
150
+ means3D,
151
+ viewmatrix, projmatrix,
152
+ present);
153
+ }
154
+
155
+ CudaRasterizer::GeometryState CudaRasterizer::GeometryState::fromChunk(char*& chunk, size_t P)
156
+ {
157
+ GeometryState geom;
158
+ obtain(chunk, geom.depths, P, 128);
159
+ obtain(chunk, geom.clamped, P * 3, 128);
160
+ obtain(chunk, geom.internal_radii, P, 128);
161
+ obtain(chunk, geom.means2D, P, 128);
162
+ obtain(chunk, geom.transMat, P * 9, 128);
163
+ obtain(chunk, geom.normal_opacity, P, 128);
164
+ obtain(chunk, geom.rgb, P * 3, 128);
165
+ obtain(chunk, geom.tiles_touched, P, 128);
166
+ cub::DeviceScan::InclusiveSum(nullptr, geom.scan_size, geom.tiles_touched, geom.tiles_touched, P);
167
+ obtain(chunk, geom.scanning_space, geom.scan_size, 128);
168
+ obtain(chunk, geom.point_offsets, P, 128);
169
+ return geom;
170
+ }
171
+
172
+ CudaRasterizer::ImageState CudaRasterizer::ImageState::fromChunk(char*& chunk, size_t N)
173
+ {
174
+ ImageState img;
175
+ obtain(chunk, img.accum_alpha, N * 3, 128);
176
+ obtain(chunk, img.n_contrib, N * 2, 128);
177
+ obtain(chunk, img.ranges, N, 128);
178
+ return img;
179
+ }
180
+
181
+ CudaRasterizer::BinningState CudaRasterizer::BinningState::fromChunk(char*& chunk, size_t P)
182
+ {
183
+ BinningState binning;
184
+ obtain(chunk, binning.point_list, P, 128);
185
+ obtain(chunk, binning.point_list_unsorted, P, 128);
186
+ obtain(chunk, binning.point_list_keys, P, 128);
187
+ obtain(chunk, binning.point_list_keys_unsorted, P, 128);
188
+ cub::DeviceRadixSort::SortPairs(
189
+ nullptr, binning.sorting_size,
190
+ binning.point_list_keys_unsorted, binning.point_list_keys,
191
+ binning.point_list_unsorted, binning.point_list, P);
192
+ obtain(chunk, binning.list_sorting_space, binning.sorting_size, 128);
193
+ return binning;
194
+ }
195
+
196
+ // Forward rendering procedure for differentiable rasterization
197
+ // of Gaussians.
198
+ int CudaRasterizer::Rasterizer::forward(
199
+ std::function<char* (size_t)> geometryBuffer,
200
+ std::function<char* (size_t)> binningBuffer,
201
+ std::function<char* (size_t)> imageBuffer,
202
+ const int P, int D, int M,
203
+ const float* background,
204
+ const int width, int height,
205
+ const float* means3D,
206
+ const float* shs,
207
+ const float* colors_precomp,
208
+ const float* opacities,
209
+ const float* scales,
210
+ const float scale_modifier,
211
+ const float* rotations,
212
+ const float* transMat_precomp,
213
+ const float* viewmatrix,
214
+ const float* projmatrix,
215
+ const float* cam_pos,
216
+ const float tan_fovx, float tan_fovy,
217
+ const bool prefiltered,
218
+ float* out_color,
219
+ float* out_others,
220
+ int* radii,
221
+ bool debug)
222
+ {
223
+ const float focal_y = height / (2.0f * tan_fovy);
224
+ const float focal_x = width / (2.0f * tan_fovx);
225
+
226
+ size_t chunk_size = required<GeometryState>(P);
227
+ char* chunkptr = geometryBuffer(chunk_size);
228
+ GeometryState geomState = GeometryState::fromChunk(chunkptr, P);
229
+
230
+ if (radii == nullptr)
231
+ {
232
+ radii = geomState.internal_radii;
233
+ }
234
+
235
+ dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);
236
+ dim3 block(BLOCK_X, BLOCK_Y, 1);
237
+
238
+ // Dynamically resize image-based auxiliary buffers during training
239
+ size_t img_chunk_size = required<ImageState>(width * height);
240
+ char* img_chunkptr = imageBuffer(img_chunk_size);
241
+ ImageState imgState = ImageState::fromChunk(img_chunkptr, width * height);
242
+
243
+ if (NUM_CHANNELS != 3 && colors_precomp == nullptr)
244
+ {
245
+ throw std::runtime_error("For non-RGB, provide precomputed Gaussian colors!");
246
+ }
247
+
248
+ // Run preprocessing per-Gaussian (transformation, bounding, conversion of SHs to RGB)
249
+ CHECK_CUDA(FORWARD::preprocess(
250
+ P, D, M,
251
+ means3D,
252
+ (glm::vec2*)scales,
253
+ scale_modifier,
254
+ (glm::vec4*)rotations,
255
+ opacities,
256
+ shs,
257
+ geomState.clamped,
258
+ transMat_precomp,
259
+ colors_precomp,
260
+ viewmatrix, projmatrix,
261
+ (glm::vec3*)cam_pos,
262
+ width, height,
263
+ focal_x, focal_y,
264
+ tan_fovx, tan_fovy,
265
+ radii,
266
+ geomState.means2D,
267
+ geomState.depths,
268
+ geomState.transMat,
269
+ geomState.rgb,
270
+ geomState.normal_opacity,
271
+ tile_grid,
272
+ geomState.tiles_touched,
273
+ prefiltered
274
+ ), debug)
275
+
276
+ // Compute prefix sum over full list of touched tile counts by Gaussians
277
+ // E.g., [2, 3, 0, 2, 1] -> [2, 5, 5, 7, 8]
278
+ CHECK_CUDA(cub::DeviceScan::InclusiveSum(geomState.scanning_space, geomState.scan_size, geomState.tiles_touched, geomState.point_offsets, P), debug)
279
+
280
+ // Retrieve total number of Gaussian instances to launch and resize aux buffers
281
+ int num_rendered;
282
+ CHECK_CUDA(cudaMemcpy(&num_rendered, geomState.point_offsets + P - 1, sizeof(int), cudaMemcpyDeviceToHost), debug);
283
+
284
+ size_t binning_chunk_size = required<BinningState>(num_rendered);
285
+ char* binning_chunkptr = binningBuffer(binning_chunk_size);
286
+ BinningState binningState = BinningState::fromChunk(binning_chunkptr, num_rendered);
287
+
288
+ // For each instance to be rendered, produce adequate [ tile | depth ] key
289
+ // and corresponding dublicated Gaussian indices to be sorted
290
+ duplicateWithKeys << <(P + 255) / 256, 256 >> > (
291
+ P,
292
+ geomState.means2D,
293
+ geomState.depths,
294
+ geomState.point_offsets,
295
+ binningState.point_list_keys_unsorted,
296
+ binningState.point_list_unsorted,
297
+ radii,
298
+ tile_grid)
299
+ CHECK_CUDA(, debug)
300
+
301
+ int bit = getHigherMsb(tile_grid.x * tile_grid.y);
302
+
303
+ // Sort complete list of (duplicated) Gaussian indices by keys
304
+ CHECK_CUDA(cub::DeviceRadixSort::SortPairs(
305
+ binningState.list_sorting_space,
306
+ binningState.sorting_size,
307
+ binningState.point_list_keys_unsorted, binningState.point_list_keys,
308
+ binningState.point_list_unsorted, binningState.point_list,
309
+ num_rendered, 0, 32 + bit), debug)
310
+
311
+ CHECK_CUDA(cudaMemset(imgState.ranges, 0, tile_grid.x * tile_grid.y * sizeof(uint2)), debug);
312
+
313
+ // Identify start and end of per-tile workloads in sorted list
314
+ if (num_rendered > 0)
315
+ identifyTileRanges << <(num_rendered + 255) / 256, 256 >> > (
316
+ num_rendered,
317
+ binningState.point_list_keys,
318
+ imgState.ranges);
319
+ CHECK_CUDA(, debug)
320
+
321
+ // Let each tile blend its range of Gaussians independently in parallel
322
+ const float* feature_ptr = colors_precomp != nullptr ? colors_precomp : geomState.rgb;
323
+ const float* transMat_ptr = transMat_precomp != nullptr ? transMat_precomp : geomState.transMat;
324
+ CHECK_CUDA(FORWARD::render(
325
+ tile_grid, block,
326
+ imgState.ranges,
327
+ binningState.point_list,
328
+ width, height,
329
+ focal_x, focal_y,
330
+ geomState.means2D,
331
+ feature_ptr,
332
+ transMat_ptr,
333
+ geomState.depths,
334
+ geomState.normal_opacity,
335
+ imgState.accum_alpha,
336
+ imgState.n_contrib,
337
+ background,
338
+ out_color,
339
+ out_others), debug)
340
+
341
+ return num_rendered;
342
+ }
343
+
344
+ // Produce necessary gradients for optimization, corresponding
345
+ // to forward render pass
346
+ void CudaRasterizer::Rasterizer::backward(
347
+ const int P, int D, int M, int R,
348
+ const float* background,
349
+ const int width, int height,
350
+ const float* means3D,
351
+ const float* shs,
352
+ const float* colors_precomp,
353
+ const float* scales,
354
+ const float scale_modifier,
355
+ const float* rotations,
356
+ const float* transMat_precomp,
357
+ const float* viewmatrix,
358
+ const float* projmatrix,
359
+ const float* campos,
360
+ const float tan_fovx, float tan_fovy,
361
+ const int* radii,
362
+ char* geom_buffer,
363
+ char* binning_buffer,
364
+ char* img_buffer,
365
+ const float* dL_dpix,
366
+ const float* dL_depths,
367
+ float* dL_dmean2D,
368
+ float* dL_dnormal,
369
+ float* dL_dopacity,
370
+ float* dL_dcolor,
371
+ float* dL_dmean3D,
372
+ float* dL_dtransMat,
373
+ float* dL_dsh,
374
+ float* dL_dscale,
375
+ float* dL_drot,
376
+ bool debug)
377
+ {
378
+ GeometryState geomState = GeometryState::fromChunk(geom_buffer, P);
379
+ BinningState binningState = BinningState::fromChunk(binning_buffer, R);
380
+ ImageState imgState = ImageState::fromChunk(img_buffer, width * height);
381
+
382
+ if (radii == nullptr)
383
+ {
384
+ radii = geomState.internal_radii;
385
+ }
386
+
387
+ const float focal_y = height / (2.0f * tan_fovy);
388
+ const float focal_x = width / (2.0f * tan_fovx);
389
+
390
+ const dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);
391
+ const dim3 block(BLOCK_X, BLOCK_Y, 1);
392
+
393
+ // Compute loss gradients w.r.t. 2D mean position, conic matrix,
394
+ // opacity and RGB of Gaussians from per-pixel loss gradients.
395
+ // If we were given precomputed colors and not SHs, use them.
396
+ const float* color_ptr = (colors_precomp != nullptr) ? colors_precomp : geomState.rgb;
397
+ const float* depth_ptr = geomState.depths;
398
+ const float* transMat_ptr = (transMat_precomp != nullptr) ? transMat_precomp : geomState.transMat;
399
+ CHECK_CUDA(BACKWARD::render(
400
+ tile_grid,
401
+ block,
402
+ imgState.ranges,
403
+ binningState.point_list,
404
+ width, height,
405
+ focal_x, focal_y,
406
+ background,
407
+ geomState.means2D,
408
+ geomState.normal_opacity,
409
+ color_ptr,
410
+ transMat_ptr,
411
+ depth_ptr,
412
+ imgState.accum_alpha,
413
+ imgState.n_contrib,
414
+ dL_dpix,
415
+ dL_depths,
416
+ dL_dtransMat,
417
+ (float3*)dL_dmean2D,
418
+ dL_dnormal,
419
+ dL_dopacity,
420
+ dL_dcolor), debug)
421
+
422
+ // Take care of the rest of preprocessing. Was the precomputed covariance
423
+ // given to us or a scales/rot pair? If precomputed, pass that. If not,
424
+ // use the one we computed ourselves.
425
+ // const float* transMat_ptr = (transMat_precomp != nullptr) ? transMat_precomp : geomState.transMat;
426
+ CHECK_CUDA(BACKWARD::preprocess(P, D, M,
427
+ (float3*)means3D,
428
+ radii,
429
+ shs,
430
+ geomState.clamped,
431
+ (glm::vec2*)scales,
432
+ (glm::vec4*)rotations,
433
+ scale_modifier,
434
+ transMat_ptr,
435
+ viewmatrix,
436
+ projmatrix,
437
+ focal_x, focal_y,
438
+ tan_fovx, tan_fovy,
439
+ (glm::vec3*)campos,
440
+ (float3*)dL_dmean2D, // gradient inputs
441
+ dL_dnormal, // gradient inputs
442
+ dL_dtransMat,
443
+ dL_dcolor,
444
+ dL_dsh,
445
+ (glm::vec3*)dL_dmean3D,
446
+ (glm::vec2*)dL_dscale,
447
+ (glm::vec4*)dL_drot), debug)
448
+ }
submodules/diff-surfel-rasterization/cuda_rasterizer/rasterizer_impl.h ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #pragma once
13
+
14
+ #include <iostream>
15
+ #include <vector>
16
+ #include "rasterizer.h"
17
+ #include <cuda_runtime_api.h>
18
+
19
+ namespace CudaRasterizer
20
+ {
21
+ template <typename T>
22
+ static void obtain(char*& chunk, T*& ptr, std::size_t count, std::size_t alignment)
23
+ {
24
+ std::size_t offset = (reinterpret_cast<std::uintptr_t>(chunk) + alignment - 1) & ~(alignment - 1);
25
+ ptr = reinterpret_cast<T*>(offset);
26
+ chunk = reinterpret_cast<char*>(ptr + count);
27
+ }
28
+
29
+ struct GeometryState
30
+ {
31
+ size_t scan_size;
32
+ float* depths;
33
+ char* scanning_space;
34
+ bool* clamped;
35
+ int* internal_radii;
36
+ float2* means2D;
37
+ float* transMat;
38
+ float4* normal_opacity;
39
+ float* rgb;
40
+ uint32_t* point_offsets;
41
+ uint32_t* tiles_touched;
42
+
43
+ static GeometryState fromChunk(char*& chunk, size_t P);
44
+ };
45
+
46
+ struct ImageState
47
+ {
48
+ uint2* ranges;
49
+ uint32_t* n_contrib;
50
+ float* accum_alpha;
51
+
52
+ static ImageState fromChunk(char*& chunk, size_t N);
53
+ };
54
+
55
+ struct BinningState
56
+ {
57
+ size_t sorting_size;
58
+ uint64_t* point_list_keys_unsorted;
59
+ uint64_t* point_list_keys;
60
+ uint32_t* point_list_unsorted;
61
+ uint32_t* point_list;
62
+ char* list_sorting_space;
63
+
64
+ static BinningState fromChunk(char*& chunk, size_t P);
65
+ };
66
+
67
+ template<typename T>
68
+ size_t required(size_t P)
69
+ {
70
+ char* size = nullptr;
71
+ T::fromChunk(size, P);
72
+ return ((size_t)size) + 128;
73
+ }
74
+ };
submodules/diff-surfel-rasterization/diff_surfel_rasterization/__init__.py ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #
2
+ # Copyright (C) 2023, Inria
3
+ # GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ # All rights reserved.
5
+ #
6
+ # This software is free for non-commercial, research and evaluation use
7
+ # under the terms of the LICENSE.md file.
8
+ #
9
+ # For inquiries contact george.drettakis@inria.fr
10
+ #
11
+
12
+ from typing import NamedTuple
13
+ import torch.nn as nn
14
+ import torch
15
+ from . import _C
16
+
17
+ def cpu_deep_copy_tuple(input_tuple):
18
+ copied_tensors = [item.cpu().clone() if isinstance(item, torch.Tensor) else item for item in input_tuple]
19
+ return tuple(copied_tensors)
20
+
21
+ def rasterize_gaussians(
22
+ means3D,
23
+ means2D,
24
+ sh,
25
+ colors_precomp,
26
+ opacities,
27
+ scales,
28
+ rotations,
29
+ cov3Ds_precomp,
30
+ raster_settings,
31
+ ):
32
+ return _RasterizeGaussians.apply(
33
+ means3D,
34
+ means2D,
35
+ sh,
36
+ colors_precomp,
37
+ opacities,
38
+ scales,
39
+ rotations,
40
+ cov3Ds_precomp,
41
+ raster_settings,
42
+ )
43
+
44
+ class _RasterizeGaussians(torch.autograd.Function):
45
+ @staticmethod
46
+ def forward(
47
+ ctx,
48
+ means3D,
49
+ means2D,
50
+ sh,
51
+ colors_precomp,
52
+ opacities,
53
+ scales,
54
+ rotations,
55
+ cov3Ds_precomp,
56
+ raster_settings,
57
+ ):
58
+
59
+ # Restructure arguments the way that the C++ lib expects them
60
+ args = (
61
+ raster_settings.bg,
62
+ means3D,
63
+ colors_precomp,
64
+ opacities,
65
+ scales,
66
+ rotations,
67
+ raster_settings.scale_modifier,
68
+ cov3Ds_precomp,
69
+ raster_settings.viewmatrix,
70
+ raster_settings.projmatrix,
71
+ raster_settings.tanfovx,
72
+ raster_settings.tanfovy,
73
+ raster_settings.image_height,
74
+ raster_settings.image_width,
75
+ sh,
76
+ raster_settings.sh_degree,
77
+ raster_settings.campos,
78
+ raster_settings.prefiltered,
79
+ raster_settings.debug
80
+ )
81
+
82
+ # Invoke C++/CUDA rasterizer
83
+ if raster_settings.debug:
84
+ cpu_args = cpu_deep_copy_tuple(args) # Copy them before they can be corrupted
85
+ try:
86
+ num_rendered, color, depth, radii, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args)
87
+ except Exception as ex:
88
+ torch.save(cpu_args, "snapshot_fw.dump")
89
+ print("\nAn error occured in forward. Please forward snapshot_fw.dump for debugging.")
90
+ raise ex
91
+ else:
92
+ num_rendered, color, depth, radii, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args)
93
+
94
+ # Keep relevant tensors for backward
95
+ ctx.raster_settings = raster_settings
96
+ ctx.num_rendered = num_rendered
97
+ ctx.save_for_backward(colors_precomp, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer)
98
+ return color, radii, depth
99
+
100
+ @staticmethod
101
+ def backward(ctx, grad_out_color, grad_radii, grad_depth):
102
+
103
+ # Restore necessary values from context
104
+ num_rendered = ctx.num_rendered
105
+ raster_settings = ctx.raster_settings
106
+ colors_precomp, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer = ctx.saved_tensors
107
+
108
+ # Restructure args as C++ method expects them
109
+ args = (raster_settings.bg,
110
+ means3D,
111
+ radii,
112
+ colors_precomp,
113
+ scales,
114
+ rotations,
115
+ raster_settings.scale_modifier,
116
+ cov3Ds_precomp,
117
+ raster_settings.viewmatrix,
118
+ raster_settings.projmatrix,
119
+ raster_settings.tanfovx,
120
+ raster_settings.tanfovy,
121
+ grad_out_color,
122
+ grad_depth,
123
+ sh,
124
+ raster_settings.sh_degree,
125
+ raster_settings.campos,
126
+ geomBuffer,
127
+ num_rendered,
128
+ binningBuffer,
129
+ imgBuffer,
130
+ raster_settings.debug)
131
+
132
+ # Compute gradients for relevant tensors by invoking backward method
133
+ if raster_settings.debug:
134
+ cpu_args = cpu_deep_copy_tuple(args) # Copy them before they can be corrupted
135
+ try:
136
+ grad_means2D, grad_colors_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations = _C.rasterize_gaussians_backward(*args)
137
+ except Exception as ex:
138
+ torch.save(cpu_args, "snapshot_bw.dump")
139
+ print("\nAn error occured in backward. Writing snapshot_bw.dump for debugging.\n")
140
+ raise ex
141
+ else:
142
+ grad_means2D, grad_colors_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations = _C.rasterize_gaussians_backward(*args)
143
+
144
+ grads = (
145
+ grad_means3D,
146
+ grad_means2D,
147
+ grad_sh,
148
+ grad_colors_precomp,
149
+ grad_opacities,
150
+ grad_scales,
151
+ grad_rotations,
152
+ grad_cov3Ds_precomp,
153
+ None,
154
+ )
155
+
156
+ return grads
157
+
158
+ class GaussianRasterizationSettings(NamedTuple):
159
+ image_height: int
160
+ image_width: int
161
+ tanfovx : float
162
+ tanfovy : float
163
+ bg : torch.Tensor
164
+ scale_modifier : float
165
+ viewmatrix : torch.Tensor
166
+ projmatrix : torch.Tensor
167
+ sh_degree : int
168
+ campos : torch.Tensor
169
+ prefiltered : bool
170
+ debug : bool
171
+
172
+ class GaussianRasterizer(nn.Module):
173
+ def __init__(self, raster_settings):
174
+ super().__init__()
175
+ self.raster_settings = raster_settings
176
+
177
+ def markVisible(self, positions):
178
+ # Mark visible points (based on frustum culling for camera) with a boolean
179
+ with torch.no_grad():
180
+ raster_settings = self.raster_settings
181
+ visible = _C.mark_visible(
182
+ positions,
183
+ raster_settings.viewmatrix,
184
+ raster_settings.projmatrix)
185
+
186
+ return visible
187
+
188
+ def forward(self, means3D, means2D, opacities, shs = None, colors_precomp = None, scales = None, rotations = None, cov3D_precomp = None):
189
+
190
+ raster_settings = self.raster_settings
191
+
192
+ if (shs is None and colors_precomp is None) or (shs is not None and colors_precomp is not None):
193
+ raise Exception('Please provide excatly one of either SHs or precomputed colors!')
194
+
195
+ if ((scales is None or rotations is None) and cov3D_precomp is None) or ((scales is not None or rotations is not None) and cov3D_precomp is not None):
196
+ raise Exception('Please provide exactly one of either scale/rotation pair or precomputed 3D covariance!')
197
+
198
+ if shs is None:
199
+ shs = torch.Tensor([]).cuda()
200
+ if colors_precomp is None:
201
+ colors_precomp = torch.Tensor([]).cuda()
202
+
203
+ if scales is None:
204
+ scales = torch.Tensor([]).cuda()
205
+ if rotations is None:
206
+ rotations = torch.Tensor([]).cuda()
207
+ if cov3D_precomp is None:
208
+ cov3D_precomp = torch.Tensor([]).cuda()
209
+
210
+
211
+ # Invoke C++/CUDA rasterization routine
212
+ return rasterize_gaussians(
213
+ means3D,
214
+ means2D,
215
+ shs,
216
+ colors_precomp,
217
+ opacities,
218
+ scales,
219
+ rotations,
220
+ cov3D_precomp,
221
+ raster_settings,
222
+ )
223
+
submodules/diff-surfel-rasterization/ext.cpp ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #include <torch/extension.h>
13
+ #include "rasterize_points.h"
14
+
15
+ PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
16
+ m.def("rasterize_gaussians", &RasterizeGaussiansCUDA);
17
+ m.def("rasterize_gaussians_backward", &RasterizeGaussiansBackwardCUDA);
18
+ m.def("mark_visible", &markVisible);
19
+ }
submodules/diff-surfel-rasterization/rasterize_points.cu ADDED
@@ -0,0 +1,254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #include <math.h>
13
+ #include <torch/extension.h>
14
+ #include <cstdio>
15
+ #include <sstream>
16
+ #include <iostream>
17
+ #include <tuple>
18
+ #include <stdio.h>
19
+ #include <cuda_runtime_api.h>
20
+ #include <memory>
21
+ #include "cuda_rasterizer/config.h"
22
+ #include "cuda_rasterizer/rasterizer.h"
23
+ #include <fstream>
24
+ #include <string>
25
+ #include <functional>
26
+
27
+ #define CHECK_INPUT(x) \
28
+ AT_ASSERTM(x.type().is_cuda(), #x " must be a CUDA tensor")
29
+ // AT_ASSERTM(x.is_contiguous(), #x " must be contiguous")
30
+
31
+ std::function<char*(size_t N)> resizeFunctional(torch::Tensor& t) {
32
+ auto lambda = [&t](size_t N) {
33
+ t.resize_({(long long)N});
34
+ return reinterpret_cast<char*>(t.contiguous().data_ptr());
35
+ };
36
+ return lambda;
37
+ }
38
+
39
+ std::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
40
+ RasterizeGaussiansCUDA(
41
+ const torch::Tensor& background,
42
+ const torch::Tensor& means3D,
43
+ const torch::Tensor& colors,
44
+ const torch::Tensor& opacity,
45
+ const torch::Tensor& scales,
46
+ const torch::Tensor& rotations,
47
+ const float scale_modifier,
48
+ const torch::Tensor& transMat_precomp,
49
+ const torch::Tensor& viewmatrix,
50
+ const torch::Tensor& projmatrix,
51
+ const float tan_fovx,
52
+ const float tan_fovy,
53
+ const int image_height,
54
+ const int image_width,
55
+ const torch::Tensor& sh,
56
+ const int degree,
57
+ const torch::Tensor& campos,
58
+ const bool prefiltered,
59
+ const bool debug)
60
+ {
61
+ if (means3D.ndimension() != 2 || means3D.size(1) != 3) {
62
+ AT_ERROR("means3D must have dimensions (num_points, 3)");
63
+ }
64
+
65
+
66
+ const int P = means3D.size(0);
67
+ const int H = image_height;
68
+ const int W = image_width;
69
+
70
+ CHECK_INPUT(background);
71
+ CHECK_INPUT(means3D);
72
+ CHECK_INPUT(colors);
73
+ CHECK_INPUT(opacity);
74
+ CHECK_INPUT(scales);
75
+ CHECK_INPUT(rotations);
76
+ CHECK_INPUT(transMat_precomp);
77
+ CHECK_INPUT(viewmatrix);
78
+ CHECK_INPUT(projmatrix);
79
+ CHECK_INPUT(sh);
80
+ CHECK_INPUT(campos);
81
+
82
+ auto int_opts = means3D.options().dtype(torch::kInt32);
83
+ auto float_opts = means3D.options().dtype(torch::kFloat32);
84
+
85
+ torch::Tensor out_color = torch::full({NUM_CHANNELS, H, W}, 0.0, float_opts);
86
+ torch::Tensor out_others = torch::full({3+3+1, H, W}, 0.0, float_opts);
87
+ torch::Tensor radii = torch::full({P}, 0, means3D.options().dtype(torch::kInt32));
88
+
89
+ torch::Device device(torch::kCUDA);
90
+ torch::TensorOptions options(torch::kByte);
91
+ torch::Tensor geomBuffer = torch::empty({0}, options.device(device));
92
+ torch::Tensor binningBuffer = torch::empty({0}, options.device(device));
93
+ torch::Tensor imgBuffer = torch::empty({0}, options.device(device));
94
+ std::function<char*(size_t)> geomFunc = resizeFunctional(geomBuffer);
95
+ std::function<char*(size_t)> binningFunc = resizeFunctional(binningBuffer);
96
+ std::function<char*(size_t)> imgFunc = resizeFunctional(imgBuffer);
97
+
98
+ int rendered = 0;
99
+ if(P != 0)
100
+ {
101
+ int M = 0;
102
+ if(sh.size(0) != 0)
103
+ {
104
+ M = sh.size(1);
105
+ }
106
+
107
+ rendered = CudaRasterizer::Rasterizer::forward(
108
+ geomFunc,
109
+ binningFunc,
110
+ imgFunc,
111
+ P, degree, M,
112
+ background.contiguous().data<float>(),
113
+ W, H,
114
+ means3D.contiguous().data<float>(),
115
+ sh.contiguous().data_ptr<float>(),
116
+ colors.contiguous().data<float>(),
117
+ opacity.contiguous().data<float>(),
118
+ scales.contiguous().data_ptr<float>(),
119
+ scale_modifier,
120
+ rotations.contiguous().data_ptr<float>(),
121
+ transMat_precomp.contiguous().data<float>(),
122
+ viewmatrix.contiguous().data<float>(),
123
+ projmatrix.contiguous().data<float>(),
124
+ campos.contiguous().data<float>(),
125
+ tan_fovx,
126
+ tan_fovy,
127
+ prefiltered,
128
+ out_color.contiguous().data<float>(),
129
+ out_others.contiguous().data<float>(),
130
+ radii.contiguous().data<int>(),
131
+ debug);
132
+ }
133
+ return std::make_tuple(rendered, out_color, out_others, radii, geomBuffer, binningBuffer, imgBuffer);
134
+ }
135
+
136
+ std::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
137
+ RasterizeGaussiansBackwardCUDA(
138
+ const torch::Tensor& background,
139
+ const torch::Tensor& means3D,
140
+ const torch::Tensor& radii,
141
+ const torch::Tensor& colors,
142
+ const torch::Tensor& scales,
143
+ const torch::Tensor& rotations,
144
+ const float scale_modifier,
145
+ const torch::Tensor& transMat_precomp,
146
+ const torch::Tensor& viewmatrix,
147
+ const torch::Tensor& projmatrix,
148
+ const float tan_fovx,
149
+ const float tan_fovy,
150
+ const torch::Tensor& dL_dout_color,
151
+ const torch::Tensor& dL_dout_others,
152
+ const torch::Tensor& sh,
153
+ const int degree,
154
+ const torch::Tensor& campos,
155
+ const torch::Tensor& geomBuffer,
156
+ const int R,
157
+ const torch::Tensor& binningBuffer,
158
+ const torch::Tensor& imageBuffer,
159
+ const bool debug)
160
+ {
161
+
162
+ CHECK_INPUT(background);
163
+ CHECK_INPUT(means3D);
164
+ CHECK_INPUT(radii);
165
+ CHECK_INPUT(colors);
166
+ CHECK_INPUT(scales);
167
+ CHECK_INPUT(rotations);
168
+ CHECK_INPUT(transMat_precomp);
169
+ CHECK_INPUT(viewmatrix);
170
+ CHECK_INPUT(projmatrix);
171
+ CHECK_INPUT(sh);
172
+ CHECK_INPUT(campos);
173
+ CHECK_INPUT(binningBuffer);
174
+ CHECK_INPUT(imageBuffer);
175
+ CHECK_INPUT(geomBuffer);
176
+
177
+ const int P = means3D.size(0);
178
+ const int H = dL_dout_color.size(1);
179
+ const int W = dL_dout_color.size(2);
180
+
181
+ int M = 0;
182
+ if(sh.size(0) != 0)
183
+ {
184
+ M = sh.size(1);
185
+ }
186
+
187
+ torch::Tensor dL_dmeans3D = torch::zeros({P, 3}, means3D.options());
188
+ torch::Tensor dL_dmeans2D = torch::zeros({P, 3}, means3D.options());
189
+ torch::Tensor dL_dcolors = torch::zeros({P, NUM_CHANNELS}, means3D.options());
190
+ torch::Tensor dL_dnormal = torch::zeros({P, 3}, means3D.options());
191
+ torch::Tensor dL_dopacity = torch::zeros({P, 1}, means3D.options());
192
+ torch::Tensor dL_dtransMat = torch::zeros({P, 9}, means3D.options());
193
+ torch::Tensor dL_dsh = torch::zeros({P, M, 3}, means3D.options());
194
+ torch::Tensor dL_dscales = torch::zeros({P, 2}, means3D.options());
195
+ torch::Tensor dL_drotations = torch::zeros({P, 4}, means3D.options());
196
+
197
+ if(P != 0)
198
+ {
199
+ CudaRasterizer::Rasterizer::backward(P, degree, M, R,
200
+ background.contiguous().data<float>(),
201
+ W, H,
202
+ means3D.contiguous().data<float>(),
203
+ sh.contiguous().data<float>(),
204
+ colors.contiguous().data<float>(),
205
+ scales.data_ptr<float>(),
206
+ scale_modifier,
207
+ rotations.data_ptr<float>(),
208
+ transMat_precomp.contiguous().data<float>(),
209
+ viewmatrix.contiguous().data<float>(),
210
+ projmatrix.contiguous().data<float>(),
211
+ campos.contiguous().data<float>(),
212
+ tan_fovx,
213
+ tan_fovy,
214
+ radii.contiguous().data<int>(),
215
+ reinterpret_cast<char*>(geomBuffer.contiguous().data_ptr()),
216
+ reinterpret_cast<char*>(binningBuffer.contiguous().data_ptr()),
217
+ reinterpret_cast<char*>(imageBuffer.contiguous().data_ptr()),
218
+ dL_dout_color.contiguous().data<float>(),
219
+ dL_dout_others.contiguous().data<float>(),
220
+ dL_dmeans2D.contiguous().data<float>(),
221
+ dL_dnormal.contiguous().data<float>(),
222
+ dL_dopacity.contiguous().data<float>(),
223
+ dL_dcolors.contiguous().data<float>(),
224
+ dL_dmeans3D.contiguous().data<float>(),
225
+ dL_dtransMat.contiguous().data<float>(),
226
+ dL_dsh.contiguous().data<float>(),
227
+ dL_dscales.contiguous().data<float>(),
228
+ dL_drotations.contiguous().data<float>(),
229
+ debug);
230
+ }
231
+
232
+ return std::make_tuple(dL_dmeans2D, dL_dcolors, dL_dopacity, dL_dmeans3D, dL_dtransMat, dL_dsh, dL_dscales, dL_drotations);
233
+ }
234
+
235
+ torch::Tensor markVisible(
236
+ torch::Tensor& means3D,
237
+ torch::Tensor& viewmatrix,
238
+ torch::Tensor& projmatrix)
239
+ {
240
+ const int P = means3D.size(0);
241
+
242
+ torch::Tensor present = torch::full({P}, false, means3D.options().dtype(at::kBool));
243
+
244
+ if(P != 0)
245
+ {
246
+ CudaRasterizer::Rasterizer::markVisible(P,
247
+ means3D.contiguous().data<float>(),
248
+ viewmatrix.contiguous().data<float>(),
249
+ projmatrix.contiguous().data<float>(),
250
+ present.contiguous().data<bool>());
251
+ }
252
+
253
+ return present;
254
+ }
submodules/diff-surfel-rasterization/rasterize_points.h ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2023, Inria
3
+ * GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ * All rights reserved.
5
+ *
6
+ * This software is free for non-commercial, research and evaluation use
7
+ * under the terms of the LICENSE.md file.
8
+ *
9
+ * For inquiries contact george.drettakis@inria.fr
10
+ */
11
+
12
+ #pragma once
13
+ #include <torch/extension.h>
14
+ #include <cstdio>
15
+ #include <tuple>
16
+ #include <string>
17
+
18
+ std::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
19
+ RasterizeGaussiansCUDA(
20
+ const torch::Tensor& background,
21
+ const torch::Tensor& means3D,
22
+ const torch::Tensor& colors,
23
+ const torch::Tensor& opacity,
24
+ const torch::Tensor& scales,
25
+ const torch::Tensor& rotations,
26
+ const float scale_modifier,
27
+ const torch::Tensor& transMat_precomp,
28
+ const torch::Tensor& viewmatrix,
29
+ const torch::Tensor& projmatrix,
30
+ const float tan_fovx,
31
+ const float tan_fovy,
32
+ const int image_height,
33
+ const int image_width,
34
+ const torch::Tensor& sh,
35
+ const int degree,
36
+ const torch::Tensor& campos,
37
+ const bool prefiltered,
38
+ const bool debug);
39
+
40
+ std::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
41
+ RasterizeGaussiansBackwardCUDA(
42
+ const torch::Tensor& background,
43
+ const torch::Tensor& means3D,
44
+ const torch::Tensor& radii,
45
+ const torch::Tensor& colors,
46
+ const torch::Tensor& scales,
47
+ const torch::Tensor& rotations,
48
+ const float scale_modifier,
49
+ const torch::Tensor& transMat_precomp,
50
+ const torch::Tensor& viewmatrix,
51
+ const torch::Tensor& projmatrix,
52
+ const float tan_fovx,
53
+ const float tan_fovy,
54
+ const torch::Tensor& dL_dout_color,
55
+ const torch::Tensor& dL_dout_others,
56
+ const torch::Tensor& sh,
57
+ const int degree,
58
+ const torch::Tensor& campos,
59
+ const torch::Tensor& geomBuffer,
60
+ const int R,
61
+ const torch::Tensor& binningBuffer,
62
+ const torch::Tensor& imageBuffer,
63
+ const bool debug);
64
+
65
+ torch::Tensor markVisible(
66
+ torch::Tensor& means3D,
67
+ torch::Tensor& viewmatrix,
68
+ torch::Tensor& projmatrix);
submodules/diff-surfel-rasterization/setup.py ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #
2
+ # Copyright (C) 2023, Inria
3
+ # GRAPHDECO research group, https://team.inria.fr/graphdeco
4
+ # All rights reserved.
5
+ #
6
+ # This software is free for non-commercial, research and evaluation use
7
+ # under the terms of the LICENSE.md file.
8
+ #
9
+ # For inquiries contact george.drettakis@inria.fr
10
+ #
11
+
12
+ from setuptools import setup
13
+ from torch.utils.cpp_extension import CUDAExtension, BuildExtension
14
+ import os
15
+ os.path.dirname(os.path.abspath(__file__))
16
+
17
+ setup(
18
+ name="diff_surfel_rasterization",
19
+ packages=['diff_surfel_rasterization'],
20
+ version='0.0.1',
21
+ ext_modules=[
22
+ CUDAExtension(
23
+ name="diff_surfel_rasterization._C",
24
+ sources=[
25
+ "cuda_rasterizer/rasterizer_impl.cu",
26
+ "cuda_rasterizer/forward.cu",
27
+ "cuda_rasterizer/backward.cu",
28
+ "rasterize_points.cu",
29
+ "ext.cpp"],
30
+ extra_compile_args={"nvcc": ["-I" + os.path.join(os.path.dirname(os.path.abspath(__file__)), "third_party/glm/")]})
31
+ ],
32
+ cmdclass={
33
+ 'build_ext': BuildExtension
34
+ }
35
+ )
submodules/diff-surfel-rasterization/third_party/glm/.appveyor.yml ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ shallow_clone: true
2
+
3
+ platform:
4
+ - x86
5
+ - x64
6
+
7
+ configuration:
8
+ - Debug
9
+ - Release
10
+
11
+ image:
12
+ - Visual Studio 2013
13
+ - Visual Studio 2015
14
+ - Visual Studio 2017
15
+ - Visual Studio 2019
16
+
17
+ environment:
18
+ matrix:
19
+ - GLM_ARGUMENTS: -DGLM_TEST_FORCE_PURE=ON
20
+ - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
21
+ - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
22
+ - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON
23
+ - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON
24
+
25
+ matrix:
26
+ exclude:
27
+ - image: Visual Studio 2013
28
+ GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
29
+ - image: Visual Studio 2013
30
+ GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON
31
+ - image: Visual Studio 2013
32
+ GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON
33
+ - image: Visual Studio 2013
34
+ configuration: Debug
35
+ - image: Visual Studio 2015
36
+ GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
37
+ - image: Visual Studio 2015
38
+ GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON
39
+ - image: Visual Studio 2015
40
+ GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON
41
+ - image: Visual Studio 2015
42
+ platform: x86
43
+ - image: Visual Studio 2015
44
+ configuration: Debug
45
+ - image: Visual Studio 2017
46
+ platform: x86
47
+ - image: Visual Studio 2017
48
+ configuration: Debug
49
+ - image: Visual Studio 2019
50
+ platform: x64
51
+
52
+ branches:
53
+ only:
54
+ - master
55
+
56
+ before_build:
57
+ - ps: |
58
+ mkdir build
59
+ cd build
60
+
61
+ if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2013") {
62
+ $env:generator="Visual Studio 12 2013"
63
+ }
64
+ if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2015") {
65
+ $env:generator="Visual Studio 14 2015"
66
+ }
67
+ if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2017") {
68
+ $env:generator="Visual Studio 15 2017"
69
+ }
70
+ if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2019") {
71
+ $env:generator="Visual Studio 16 2019"
72
+ }
73
+ if ($env:PLATFORM -eq "x64") {
74
+ $env:generator="$env:generator Win64"
75
+ }
76
+ echo generator="$env:generator"
77
+ cmake .. -G "$env:generator" -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER/install" -DGLM_QUIET=ON -DGLM_TEST_ENABLE=ON "$env:GLM_ARGUMENTS"
78
+
79
+ build_script:
80
+ - cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal
81
+ - cmake --build . --target install --parallel --config %CONFIGURATION% -- /m /v:minimal
82
+
83
+ test_script:
84
+ - ctest --parallel 4 --verbose -C %CONFIGURATION%
85
+ - cd ..
86
+ - ps: |
87
+ mkdir build_test_cmake
88
+ cd build_test_cmake
89
+ cmake ..\test\cmake\ -G "$env:generator" -DCMAKE_PREFIX_PATH="$env:APPVEYOR_BUILD_FOLDER/install"
90
+ - cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal
91
+
92
+ deploy: off
submodules/diff-surfel-rasterization/third_party/glm/.gitignore ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Compiled Object files
2
+ *.slo
3
+ *.lo
4
+ *.o
5
+ *.obj
6
+
7
+ # Precompiled Headers
8
+ *.gch
9
+ *.pch
10
+
11
+ # Compiled Dynamic libraries
12
+ *.so
13
+ *.dylib
14
+ *.dll
15
+
16
+ # Fortran module files
17
+ *.mod
18
+
19
+ # Compiled Static libraries
20
+ *.lai
21
+ *.la
22
+ *.a
23
+ *.lib
24
+
25
+ # Executables
26
+ *.exe
27
+ *.out
28
+ *.app
29
+
30
+ # CMake
31
+ CMakeCache.txt
32
+ CMakeFiles
33
+ cmake_install.cmake
34
+ install_manifest.txt
35
+ *.cmake
36
+ !glmConfig.cmake
37
+ !glmConfig-version.cmake
38
+ # ^ May need to add future .cmake files as exceptions
39
+
40
+ # Test logs
41
+ Testing/*
42
+
43
+ # Test input
44
+ test/gtc/*.dds
45
+
46
+ # Project Files
47
+ Makefile
48
+ *.cbp
49
+ *.user
50
+
51
+ # Misc.
52
+ *.log
53
+
54
+ # local build(s)
55
+ build*
56
+
57
+ /.vs
58
+ /.vscode
59
+ /CMakeSettings.json
60
+ .DS_Store
61
+ *.swp
submodules/diff-surfel-rasterization/third_party/glm/.travis.yml ADDED
@@ -0,0 +1,388 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: cpp
2
+
3
+ branches:
4
+ only:
5
+ - master
6
+ - stable
7
+
8
+ jobs:
9
+ include:
10
+ - name: "Xcode 7.3 C++98 pure release"
11
+ os: osx
12
+ osx_image: xcode7.3
13
+ env:
14
+ - MATRIX_EVAL=""
15
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON"
16
+
17
+ - name: "Xcode 7.3 C++98 sse2 release"
18
+ os: osx
19
+ osx_image: xcode7.3
20
+ env:
21
+ - MATRIX_EVAL=""
22
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
23
+
24
+ - name: "Xcode 7.3 C++98 ms release"
25
+ os: osx
26
+ osx_image: xcode7.3
27
+ env:
28
+ - MATRIX_EVAL=""
29
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
30
+
31
+ - name: "XCode 7.3 C++11 pure release"
32
+ os: osx
33
+ osx_image: xcode7.3
34
+ env:
35
+ - MATRIX_EVAL=""
36
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON"
37
+
38
+ - name: "XCode 7.3 C++11 sse2 release"
39
+ os: osx
40
+ osx_image: xcode7.3
41
+ env:
42
+ - MATRIX_EVAL=""
43
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON"
44
+
45
+ - name: "XCode 10.3 C++11 sse2 release"
46
+ os: osx
47
+ osx_image: xcode10.3
48
+ env:
49
+ - MATRIX_EVAL=""
50
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON"
51
+
52
+ - name: "XCode 12.2 C++11 sse2 release"
53
+ os: osx
54
+ osx_image: xcode12.2
55
+ env:
56
+ - MATRIX_EVAL=""
57
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON"
58
+ - CTEST_ENV="--parallel 4 --output-on-failure"
59
+ - CMAKE_ENV="--parallel"
60
+
61
+ - name: "XCode 12.2 C++11 sse2 debug"
62
+ os: osx
63
+ osx_image: xcode12.2
64
+ env:
65
+ - MATRIX_EVAL=""
66
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON"
67
+ - CTEST_ENV="--parallel 4 --output-on-failure"
68
+ - CMAKE_ENV="--parallel"
69
+
70
+ - name: "XCode 12.2 C++11 avx debug"
71
+ os: osx
72
+ osx_image: xcode12.2
73
+ env:
74
+ - MATRIX_EVAL=""
75
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON"
76
+ - CTEST_ENV="--parallel 4 --output-on-failure"
77
+ - CMAKE_ENV="--parallel"
78
+
79
+ - name: "XCode 12.2 C++14 avx debug"
80
+ os: osx
81
+ osx_image: xcode12.2
82
+ env:
83
+ - MATRIX_EVAL=""
84
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON"
85
+ - CTEST_ENV="--parallel 4 --output-on-failure"
86
+ - CMAKE_ENV="--parallel"
87
+
88
+ - name: "XCode 12.2 C++14 pure debug"
89
+ os: osx
90
+ osx_image: xcode12.2
91
+ env:
92
+ - MATRIX_EVAL=""
93
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON"
94
+ - CTEST_ENV="--parallel 4 --output-on-failure"
95
+ - CMAKE_ENV="--parallel"
96
+
97
+ - name: "XCode 12.2 C++17 pure debug"
98
+ os: osx
99
+ osx_image: xcode12.2
100
+ env:
101
+ - MATRIX_EVAL=""
102
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON"
103
+ - CTEST_ENV="--parallel 4 --output-on-failure"
104
+ - CMAKE_ENV="--parallel"
105
+
106
+ - name: "XCode 12.2 C++17 sse2 debug"
107
+ os: osx
108
+ osx_image: xcode12.2
109
+ env:
110
+ - MATRIX_EVAL=""
111
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
112
+ - CTEST_ENV="--parallel 4 --output-on-failure"
113
+ - CMAKE_ENV="--parallel"
114
+
115
+ - name: "XCode 12.2 C++17 sse2 release"
116
+ os: osx
117
+ osx_image: xcode12.2
118
+ env:
119
+ - MATRIX_EVAL=""
120
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
121
+ - CTEST_ENV="--parallel 4 --output-on-failure"
122
+ - CMAKE_ENV="--parallel"
123
+
124
+ - name: "XCode 12.2 C++17 avx release"
125
+ os: osx
126
+ osx_image: xcode12.2
127
+ env:
128
+ - MATRIX_EVAL=""
129
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON"
130
+ - CTEST_ENV="--parallel 4 --output-on-failure"
131
+ - CMAKE_ENV="--parallel"
132
+
133
+ - name: "GCC 4.9 C++98 pure release"
134
+ os: linux
135
+ dist: Xenial
136
+ addons:
137
+ apt:
138
+ sources:
139
+ - ubuntu-toolchain-r-test
140
+ packages:
141
+ - g++-4.9
142
+ env:
143
+ - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
144
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON"
145
+ - CTEST_ENV="--parallel 4 --output-on-failure"
146
+ - CMAKE_ENV="--parallel"
147
+
148
+ - name: "GCC 4.9 C++98 pure debug"
149
+ os: linux
150
+ dist: Xenial
151
+ addons:
152
+ apt:
153
+ sources:
154
+ - ubuntu-toolchain-r-test
155
+ packages:
156
+ - g++-4.9
157
+ env:
158
+ - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
159
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON"
160
+ - CTEST_ENV="--parallel 4 --output-on-failure"
161
+ - CMAKE_ENV="--parallel"
162
+
163
+ - name: "GCC 4.9 C++98 ms debug"
164
+ os: linux
165
+ dist: Xenial
166
+ addons:
167
+ apt:
168
+ sources:
169
+ - ubuntu-toolchain-r-test
170
+ packages:
171
+ - g++-4.9
172
+ env:
173
+ - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
174
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
175
+ - CTEST_ENV="--parallel 4 --output-on-failure"
176
+ - CMAKE_ENV="--parallel"
177
+
178
+ - name: "GCC 4.9 C++11 ms debug"
179
+ os: linux
180
+ dist: Xenial
181
+ addons:
182
+ apt:
183
+ sources:
184
+ - ubuntu-toolchain-r-test
185
+ packages:
186
+ - g++-4.9
187
+ env:
188
+ - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
189
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
190
+ - CTEST_ENV="--parallel 4 --output-on-failure"
191
+ - CMAKE_ENV="--parallel"
192
+
193
+ - name: "GCC 4.9 C++11 pure debug"
194
+ os: linux
195
+ dist: Xenial
196
+ addons:
197
+ apt:
198
+ sources:
199
+ - ubuntu-toolchain-r-test
200
+ packages:
201
+ - g++-4.9
202
+ env:
203
+ - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
204
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON"
205
+ - CTEST_ENV="--parallel 4 --output-on-failure"
206
+ - CMAKE_ENV="--parallel"
207
+
208
+ - name: "GCC 6 C++14 pure debug"
209
+ os: linux
210
+ dist: bionic
211
+ addons:
212
+ apt:
213
+ sources:
214
+ - ubuntu-toolchain-r-test
215
+ packages:
216
+ - g++-6
217
+ env:
218
+ - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
219
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON"
220
+ - CTEST_ENV="--parallel 4 --output-on-failure"
221
+ - CMAKE_ENV="--parallel"
222
+
223
+ - name: "GCC 6 C++14 ms debug"
224
+ os: linux
225
+ dist: bionic
226
+ addons:
227
+ apt:
228
+ sources:
229
+ - ubuntu-toolchain-r-test
230
+ packages:
231
+ - g++-6
232
+ env:
233
+ - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
234
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
235
+ - CTEST_ENV="--parallel 4 --output-on-failure"
236
+ - CMAKE_ENV="--parallel"
237
+
238
+ - name: "GCC 7 C++17 ms debug"
239
+ os: linux
240
+ dist: bionic
241
+ addons:
242
+ apt:
243
+ sources:
244
+ - ubuntu-toolchain-r-test
245
+ packages:
246
+ - g++-7
247
+ env:
248
+ - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7"
249
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
250
+ - CTEST_ENV="--parallel 4 --output-on-failure"
251
+ - CMAKE_ENV="--parallel"
252
+
253
+ - name: "GCC 7 C++17 pure debug"
254
+ os: linux
255
+ dist: bionic
256
+ addons:
257
+ apt:
258
+ sources:
259
+ - ubuntu-toolchain-r-test
260
+ packages:
261
+ - g++-7
262
+ env:
263
+ - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7"
264
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
265
+ - CTEST_ENV="--parallel 4 --output-on-failure"
266
+ - CMAKE_ENV="--parallel"
267
+
268
+ - name: "GCC 10 C++17 pure debug"
269
+ os: linux
270
+ dist: bionic
271
+ addons:
272
+ apt:
273
+ sources:
274
+ - ubuntu-toolchain-r-test
275
+ packages:
276
+ - g++-10
277
+ env:
278
+ - MATRIX_EVAL="CC=gcc-10 && CXX=g++-10"
279
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
280
+ - CTEST_ENV="--parallel 4 --output-on-failure"
281
+ - CMAKE_ENV="--parallel"
282
+
283
+ - name: "GCC 10 C++17 pure release"
284
+ os: linux
285
+ dist: bionic
286
+ addons:
287
+ apt:
288
+ sources:
289
+ - ubuntu-toolchain-r-test
290
+ packages:
291
+ - g++-10
292
+ env:
293
+ - MATRIX_EVAL="CC=gcc-10 && CXX=g++-10"
294
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
295
+ - CTEST_ENV="--parallel 4 --output-on-failure"
296
+ - CMAKE_ENV="--parallel"
297
+
298
+ - name: "Clang C++14 pure release"
299
+ os: linux
300
+ dist: Xenial
301
+ env:
302
+ - MATRIX_EVAL="CC=clang && CXX=clang++"
303
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON"
304
+ - CTEST_ENV="--parallel 4 --output-on-failure"
305
+ - CMAKE_ENV="--parallel"
306
+
307
+ - name: "Clang C++14 pure debug"
308
+ os: linux
309
+ dist: Xenial
310
+ env:
311
+ - MATRIX_EVAL="CC=clang && CXX=clang++"
312
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON"
313
+ - CTEST_ENV="--parallel 4 --output-on-failure"
314
+ - CMAKE_ENV="--parallel"
315
+
316
+ - name: "Clang C++14 sse2 debug"
317
+ os: linux
318
+ dist: Xenial
319
+ env:
320
+ - MATRIX_EVAL="CC=clang && CXX=clang++"
321
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
322
+ - CTEST_ENV="--parallel 4 --output-on-failure"
323
+ - CMAKE_ENV="--parallel"
324
+
325
+ - name: "Clang C++14 sse2 debug"
326
+ os: linux
327
+ dist: focal
328
+ env:
329
+ - MATRIX_EVAL="CC=clang && CXX=clang++"
330
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
331
+ - CTEST_ENV="--parallel 4 --output-on-failure"
332
+ - CMAKE_ENV="--parallel"
333
+
334
+ - name: "Clang C++17 sse2 debug"
335
+ os: linux
336
+ dist: focal
337
+ env:
338
+ - MATRIX_EVAL="CC=clang && CXX=clang++"
339
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
340
+ - CTEST_ENV="--parallel 4 --output-on-failure"
341
+ - CMAKE_ENV="--parallel"
342
+
343
+ - name: "Clang C++17 avx2 debug"
344
+ os: linux
345
+ dist: focal
346
+ env:
347
+ - MATRIX_EVAL="CC=clang && CXX=clang++"
348
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX2=ON"
349
+ - CTEST_ENV="--parallel 4 --output-on-failure"
350
+ - CMAKE_ENV="--parallel"
351
+
352
+ - name: "Clang C++17 pure debug"
353
+ os: linux
354
+ dist: focal
355
+ env:
356
+ - MATRIX_EVAL="CC=clang && CXX=clang++"
357
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
358
+ - CTEST_ENV="--parallel 4 --output-on-failure"
359
+ - CMAKE_ENV="--parallel"
360
+
361
+ - name: "Clang C++17 pure release"
362
+ os: linux
363
+ dist: focal
364
+ env:
365
+ - MATRIX_EVAL="CC=clang && CXX=clang++"
366
+ - CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
367
+ - CTEST_ENV="--parallel 4 --output-on-failure"
368
+ - CMAKE_ENV="--parallel"
369
+
370
+ before_script:
371
+ - cmake --version
372
+ - eval "${MATRIX_EVAL}"
373
+
374
+ script:
375
+ - ${CC} --version
376
+ - mkdir ./build
377
+ - cd ./build
378
+ - cmake -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/install -DCMAKE_CXX_COMPILER=$COMPILER ${CMAKE_BUILD_ENV} ..
379
+ - cmake --build . ${CMAKE_ENV}
380
+ - ctest ${CTEST_ENV}
381
+ - cmake --build . --target install ${CMAKE_ENV}
382
+ - cd $TRAVIS_BUILD_DIR
383
+ - mkdir ./build_test_cmake
384
+ - cd ./build_test_cmake
385
+ - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -DCMAKE_PREFIX_PATH=$TRAVIS_BUILD_DIR/install
386
+ - cmake --build .
387
+
388
+
submodules/diff-surfel-rasterization/third_party/glm/CMakeLists.txt ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
2
+ cmake_policy(VERSION 3.2)
3
+
4
+
5
+ file(READ "glm/detail/setup.hpp" GLM_SETUP_FILE)
6
+ string(REGEX MATCH "#define[ ]+GLM_VERSION_MAJOR[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
7
+ set(GLM_VERSION_MAJOR "${CMAKE_MATCH_1}")
8
+ string(REGEX MATCH "#define[ ]+GLM_VERSION_MINOR[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
9
+ set(GLM_VERSION_MINOR "${CMAKE_MATCH_1}")
10
+ string(REGEX MATCH "#define[ ]+GLM_VERSION_PATCH[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
11
+ set(GLM_VERSION_PATCH "${CMAKE_MATCH_1}")
12
+ string(REGEX MATCH "#define[ ]+GLM_VERSION_REVISION[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
13
+ set(GLM_VERSION_REVISION "${CMAKE_MATCH_1}")
14
+
15
+ set(GLM_VERSION ${GLM_VERSION_MAJOR}.${GLM_VERSION_MINOR}.${GLM_VERSION_PATCH}.${GLM_VERSION_REVISION})
16
+ project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
17
+ message(STATUS "GLM: Version " ${GLM_VERSION})
18
+
19
+ add_subdirectory(glm)
20
+ add_library(glm::glm ALIAS glm)
21
+
22
+ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
23
+
24
+ include(CPack)
25
+ install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN "CMakeLists.txt" EXCLUDE)
26
+ install(EXPORT glm FILE glmConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm NAMESPACE glm::)
27
+ include(CMakePackageConfigHelpers)
28
+ write_basic_package_version_file("glmConfigVersion.cmake" COMPATIBILITY AnyNewerVersion)
29
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm)
30
+
31
+ include(CTest)
32
+ if(BUILD_TESTING)
33
+ add_subdirectory(test)
34
+ endif()
35
+
36
+ endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
37
+
38
+ if (NOT TARGET uninstall)
39
+ configure_file(cmake/cmake_uninstall.cmake.in
40
+ cmake_uninstall.cmake IMMEDIATE @ONLY)
41
+
42
+ add_custom_target(uninstall
43
+ "${CMAKE_COMMAND}" -P
44
+ "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake")
45
+ endif()
submodules/diff-surfel-rasterization/third_party/glm/cmake/cmake_uninstall.cmake.in ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
2
+ message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt")
3
+ endif()
4
+
5
+ file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files)
6
+ string(REGEX REPLACE "\n" ";" files "${files}")
7
+ foreach(file ${files})
8
+ message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
9
+ if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
10
+ exec_program(
11
+ "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
12
+ OUTPUT_VARIABLE rm_out
13
+ RETURN_VALUE rm_retval
14
+ )
15
+ if(NOT "${rm_retval}" STREQUAL 0)
16
+ message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
17
+ endif()
18
+ else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
19
+ message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
20
+ endif()
21
+ endforeach()
submodules/diff-surfel-rasterization/third_party/glm/copying.txt ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ================================================================================
2
+ OpenGL Mathematics (GLM)
3
+ --------------------------------------------------------------------------------
4
+ GLM is licensed under The Happy Bunny License or MIT License
5
+
6
+ ================================================================================
7
+ The Happy Bunny License (Modified MIT License)
8
+ --------------------------------------------------------------------------------
9
+ Copyright (c) 2005 - G-Truc Creation
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in
19
+ all copies or substantial portions of the Software.
20
+
21
+ Restrictions:
22
+ By making use of the Software for military purposes, you choose to make a
23
+ Bunny unhappy.
24
+
25
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
31
+ THE SOFTWARE.
32
+
33
+ ================================================================================
34
+ The MIT License
35
+ --------------------------------------------------------------------------------
36
+ Copyright (c) 2005 - G-Truc Creation
37
+
38
+ Permission is hereby granted, free of charge, to any person obtaining a copy
39
+ of this software and associated documentation files (the "Software"), to deal
40
+ in the Software without restriction, including without limitation the rights
41
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
42
+ copies of the Software, and to permit persons to whom the Software is
43
+ furnished to do so, subject to the following conditions:
44
+
45
+ The above copyright notice and this permission notice shall be included in
46
+ all copies or substantial portions of the Software.
47
+
48
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
49
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
52
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
54
+ THE SOFTWARE.
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00001_source.html ADDED
@@ -0,0 +1,493 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: _features.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.html">detail</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">_features.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#pragma once</span></div>
92
+ <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div>
93
+ <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// #define GLM_CXX98_EXCEPTIONS</span></div>
94
+ <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// #define GLM_CXX98_RTTI</span></div>
95
+ <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
96
+ <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// #define GLM_CXX11_RVALUE_REFERENCES</span></div>
97
+ <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// Rvalue references - GCC 4.3</span></div>
98
+ <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html</span></div>
99
+ <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div>
100
+ <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// GLM_CXX11_TRAILING_RETURN</span></div>
101
+ <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// Rvalue references for *this - GCC not supported</span></div>
102
+ <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm</span></div>
103
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div>
104
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
105
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// Initialization of class objects by rvalues - GCC any</span></div>
106
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html</span></div>
107
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
108
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
109
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// Non-static data member initializers - GCC 4.7</span></div>
110
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm</span></div>
111
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
112
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// #define GLM_CXX11_VARIADIC_TEMPLATE</span></div>
113
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// Variadic templates - GCC 4.3</span></div>
114
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf</span></div>
115
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
116
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">//</span></div>
117
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">// Extending variadic template template parameters - GCC 4.4</span></div>
118
+ <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf</span></div>
119
+ <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
120
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">// #define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>
121
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// Initializer lists - GCC 4.4</span></div>
122
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm</span></div>
123
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
124
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">// #define GLM_CXX11_STATIC_ASSERT</span></div>
125
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// Static assertions - GCC 4.3</span></div>
126
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html</span></div>
127
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
128
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
129
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// auto-typed variables - GCC 4.4</span></div>
130
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf</span></div>
131
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
132
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
133
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">// Multi-declarator auto - GCC 4.4</span></div>
134
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf</span></div>
135
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
136
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
137
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">// Removal of auto as a storage-class specifier - GCC 4.4</span></div>
138
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm</span></div>
139
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div>
140
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
141
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">// New function declarator syntax - GCC 4.4</span></div>
142
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm</span></div>
143
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
144
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">// #define GLM_CXX11_LAMBDAS</span></div>
145
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">// New wording for C++0x lambdas - GCC 4.5</span></div>
146
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf</span></div>
147
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div>
148
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">// #define GLM_CXX11_DECLTYPE</span></div>
149
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">// Declared type of an expression - GCC 4.3</span></div>
150
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf</span></div>
151
+ <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
152
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">//</span></div>
153
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// Right angle brackets - GCC 4.3</span></div>
154
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html</span></div>
155
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
156
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">//</span></div>
157
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">// Default template arguments for function templates DR226 GCC 4.3</span></div>
158
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226</span></div>
159
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
160
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">//</span></div>
161
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// Solving the SFINAE problem for expressions DR339 GCC 4.4</span></div>
162
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html</span></div>
163
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div>
164
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// #define GLM_CXX11_ALIAS_TEMPLATE</span></div>
165
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// Template aliases N2258 GCC 4.7</span></div>
166
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf</span></div>
167
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
168
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">//</span></div>
169
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// Extern templates N1987 Yes</span></div>
170
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm</span></div>
171
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div>
172
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">// #define GLM_CXX11_NULLPTR</span></div>
173
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">// Null pointer constant N2431 GCC 4.6</span></div>
174
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf</span></div>
175
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
176
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment">// #define GLM_CXX11_STRONG_ENUMS</span></div>
177
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment">// Strongly-typed enums N2347 GCC 4.4</span></div>
178
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf</span></div>
179
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
180
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment">//</span></div>
181
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">// Forward declarations for enums N2764 GCC 4.6</span></div>
182
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf</span></div>
183
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div>
184
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">//</span></div>
185
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">// Generalized attributes N2761 GCC 4.8</span></div>
186
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf</span></div>
187
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
188
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment">//</span></div>
189
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">// Generalized constant expressions N2235 GCC 4.6</span></div>
190
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf</span></div>
191
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
192
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment">//</span></div>
193
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment">// Alignment support N2341 GCC 4.8</span></div>
194
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf</span></div>
195
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div>
196
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment">// #define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>
197
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">// Delegating constructors N1986 GCC 4.7</span></div>
198
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf</span></div>
199
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div>
200
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment">//</span></div>
201
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">// Inheriting constructors N2540 GCC 4.8</span></div>
202
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm</span></div>
203
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div>
204
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment">// #define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>
205
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment">// Explicit conversion operators N2437 GCC 4.5</span></div>
206
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf</span></div>
207
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div>
208
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment">//</span></div>
209
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment">// New character types N2249 GCC 4.4</span></div>
210
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html</span></div>
211
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div>
212
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment">//</span></div>
213
+ <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment">// Unicode string literals N2442 GCC 4.5</span></div>
214
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>
215
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
216
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment">//</span></div>
217
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment">// Raw string literals N2442 GCC 4.5</span></div>
218
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>
219
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
220
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment">//</span></div>
221
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment">// Universal character name literals N2170 GCC 4.5</span></div>
222
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html</span></div>
223
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div>
224
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment">// #define GLM_CXX11_USER_LITERALS</span></div>
225
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment">// User-defined literals N2765 GCC 4.7</span></div>
226
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf</span></div>
227
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div>
228
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment">//</span></div>
229
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment">// Standard Layout Types N2342 GCC 4.5</span></div>
230
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm</span></div>
231
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div>
232
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment">// #define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>
233
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment">// #define GLM_CXX11_DELETED_FUNCTIONS</span></div>
234
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment">// Defaulted and deleted functions N2346 GCC 4.4</span></div>
235
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm</span></div>
236
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
237
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">//</span></div>
238
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment">// Extended friend declarations N1791 GCC 4.7</span></div>
239
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf</span></div>
240
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div>
241
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment">//</span></div>
242
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">// Extending sizeof N2253 GCC 4.4</span></div>
243
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html</span></div>
244
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div>
245
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment">// #define GLM_CXX11_INLINE_NAMESPACES</span></div>
246
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment">// Inline namespaces N2535 GCC 4.4</span></div>
247
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm</span></div>
248
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div>
249
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment">// #define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>
250
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">// Unrestricted unions N2544 GCC 4.6</span></div>
251
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf</span></div>
252
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div>
253
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>
254
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">// Local and unnamed types as template arguments N2657 GCC 4.5</span></div>
255
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm</span></div>
256
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div>
257
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment">// #define GLM_CXX11_RANGE_FOR</span></div>
258
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment">// Range-based for N2930 GCC 4.6</span></div>
259
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html</span></div>
260
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div>
261
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment">// #define GLM_CXX11_OVERRIDE_CONTROL</span></div>
262
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment">// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7</span></div>
263
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm</span></div>
264
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm</span></div>
265
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm</span></div>
266
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div>
267
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment">//</span></div>
268
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment">// Minimal support for garbage collection and reachability-based leak detection N2670 No</span></div>
269
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm</span></div>
270
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div>
271
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment">// #define GLM_CXX11_NOEXCEPT</span></div>
272
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment">// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)</span></div>
273
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html</span></div>
274
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div>
275
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment">//</span></div>
276
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment">// Defining move special member functions N3053 GCC 4.6</span></div>
277
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html</span></div>
278
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div>
279
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment">//</span></div>
280
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment">// Sequence points N2239 Yes</span></div>
281
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>
282
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div>
283
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment">//</span></div>
284
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment">// Atomic operations N2427 GCC 4.4</span></div>
285
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>
286
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div>
287
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment">//</span></div>
288
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment">// Strong Compare and Exchange N2748 GCC 4.5</span></div>
289
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html</span></div>
290
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div>
291
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment">//</span></div>
292
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment">// Bidirectional Fences N2752 GCC 4.8</span></div>
293
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm</span></div>
294
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div>
295
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment">//</span></div>
296
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment">// Memory model N2429 GCC 4.8</span></div>
297
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm</span></div>
298
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div>
299
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment">//</span></div>
300
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment">// Data-dependency ordering: atomics and memory model N2664 GCC 4.4</span></div>
301
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm</span></div>
302
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div>
303
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment">//</span></div>
304
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment">// Propagating exceptions N2179 GCC 4.4</span></div>
305
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html</span></div>
306
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div>
307
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment">//</span></div>
308
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment">// Abandoning a process and at_quick_exit N2440 GCC 4.8</span></div>
309
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm</span></div>
310
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
311
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment">//</span></div>
312
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment">// Allow atomics use in signal handlers N2547 Yes</span></div>
313
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm</span></div>
314
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div>
315
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment">//</span></div>
316
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment">// Thread-local storage N2659 GCC 4.8</span></div>
317
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm</span></div>
318
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div>
319
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment">//</span></div>
320
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment">// Dynamic initialization and destruction with concurrency N2660 GCC 4.3</span></div>
321
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm</span></div>
322
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div>
323
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment">//</span></div>
324
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment">// __func__ predefined identifier N2340 GCC 4.3</span></div>
325
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm</span></div>
326
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div>
327
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment">//</span></div>
328
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment">// C99 preprocessor N1653 GCC 4.3</span></div>
329
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm</span></div>
330
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div>
331
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="comment">//</span></div>
332
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment">// long long N1811 GCC 4.3</span></div>
333
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf</span></div>
334
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div>
335
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="comment">//</span></div>
336
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="comment">// Extended integral types N1988 Yes</span></div>
337
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf</span></div>
338
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div>
339
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="preprocessor">#if(GLM_COMPILER &amp; GLM_COMPILER_GCC)</span></div>
340
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div>
341
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="preprocessor"># define GLM_CXX11_STATIC_ASSERT</span></div>
342
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div>
343
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="preprocessor">#elif(GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>
344
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_exceptions))</span></div>
345
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="preprocessor"># define GLM_CXX98_EXCEPTIONS</span></div>
346
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="preprocessor"># endif</span></div>
347
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div>
348
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_rtti))</span></div>
349
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="preprocessor"># define GLM_CXX98_RTTI</span></div>
350
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="preprocessor"># endif</span></div>
351
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div>
352
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_access_control_sfinae))</span></div>
353
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="preprocessor"># define GLM_CXX11_ACCESS_CONTROL_SFINAE</span></div>
354
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor"># endif</span></div>
355
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div>
356
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_alias_templates))</span></div>
357
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="preprocessor"># define GLM_CXX11_ALIAS_TEMPLATE</span></div>
358
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="preprocessor"># endif</span></div>
359
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div>
360
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_alignas))</span></div>
361
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="preprocessor"># define GLM_CXX11_ALIGNAS</span></div>
362
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="preprocessor"># endif</span></div>
363
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div>
364
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_attributes))</span></div>
365
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor"># define GLM_CXX11_ATTRIBUTES</span></div>
366
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="preprocessor"># endif</span></div>
367
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div>
368
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_constexpr))</span></div>
369
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="preprocessor"># define GLM_CXX11_CONSTEXPR</span></div>
370
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="preprocessor"># endif</span></div>
371
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div>
372
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_decltype))</span></div>
373
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="preprocessor"># define GLM_CXX11_DECLTYPE</span></div>
374
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="preprocessor"># endif</span></div>
375
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div>
376
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_default_function_template_args))</span></div>
377
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="preprocessor"># define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS</span></div>
378
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="preprocessor"># endif</span></div>
379
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div>
380
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_defaulted_functions))</span></div>
381
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="preprocessor"># define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>
382
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="preprocessor"># endif</span></div>
383
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div>
384
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_delegating_constructors))</span></div>
385
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="preprocessor"># define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>
386
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="preprocessor"># endif</span></div>
387
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div>
388
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_deleted_functions))</span></div>
389
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="preprocessor"># define GLM_CXX11_DELETED_FUNCTIONS</span></div>
390
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="preprocessor"># endif</span></div>
391
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div>
392
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_explicit_conversions))</span></div>
393
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="preprocessor"># define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>
394
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="preprocessor"># endif</span></div>
395
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div>
396
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_generalized_initializers))</span></div>
397
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="preprocessor"># define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>
398
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="preprocessor"># endif</span></div>
399
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div>
400
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_implicit_moves))</span></div>
401
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="preprocessor"># define GLM_CXX11_IMPLICIT_MOVES</span></div>
402
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="preprocessor"># endif</span></div>
403
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div>
404
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_inheriting_constructors))</span></div>
405
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="preprocessor"># define GLM_CXX11_INHERITING_CONSTRUCTORS</span></div>
406
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="preprocessor"># endif</span></div>
407
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div>
408
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_inline_namespaces))</span></div>
409
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="preprocessor"># define GLM_CXX11_INLINE_NAMESPACES</span></div>
410
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="preprocessor"># endif</span></div>
411
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div>
412
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_lambdas))</span></div>
413
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="preprocessor"># define GLM_CXX11_LAMBDAS</span></div>
414
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="preprocessor"># endif</span></div>
415
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div>
416
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_local_type_template_args))</span></div>
417
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="preprocessor"># define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>
418
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="preprocessor"># endif</span></div>
419
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div>
420
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_noexcept))</span></div>
421
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="preprocessor"># define GLM_CXX11_NOEXCEPT</span></div>
422
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="preprocessor"># endif</span></div>
423
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;</div>
424
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_nonstatic_member_init))</span></div>
425
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="preprocessor"># define GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
426
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="preprocessor"># endif</span></div>
427
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div>
428
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_nullptr))</span></div>
429
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="preprocessor"># define GLM_CXX11_NULLPTR</span></div>
430
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="preprocessor"># endif</span></div>
431
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div>
432
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_override_control))</span></div>
433
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="preprocessor"># define GLM_CXX11_OVERRIDE_CONTROL</span></div>
434
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="preprocessor"># endif</span></div>
435
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div>
436
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_reference_qualified_functions))</span></div>
437
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="preprocessor"># define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS</span></div>
438
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="preprocessor"># endif</span></div>
439
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div>
440
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_range_for))</span></div>
441
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="preprocessor"># define GLM_CXX11_RANGE_FOR</span></div>
442
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="preprocessor"># endif</span></div>
443
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div>
444
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_raw_string_literals))</span></div>
445
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="preprocessor"># define GLM_CXX11_RAW_STRING_LITERALS</span></div>
446
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="preprocessor"># endif</span></div>
447
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;</div>
448
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_rvalue_references))</span></div>
449
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="preprocessor"># define GLM_CXX11_RVALUE_REFERENCES</span></div>
450
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="preprocessor"># endif</span></div>
451
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div>
452
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_static_assert))</span></div>
453
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="preprocessor"># define GLM_CXX11_STATIC_ASSERT</span></div>
454
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="preprocessor"># endif</span></div>
455
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div>
456
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_auto_type))</span></div>
457
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="preprocessor"># define GLM_CXX11_AUTO_TYPE</span></div>
458
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="preprocessor"># endif</span></div>
459
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div>
460
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_strong_enums))</span></div>
461
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="preprocessor"># define GLM_CXX11_STRONG_ENUMS</span></div>
462
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="preprocessor"># endif</span></div>
463
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div>
464
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_trailing_return))</span></div>
465
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="preprocessor"># define GLM_CXX11_TRAILING_RETURN</span></div>
466
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="preprocessor"># endif</span></div>
467
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div>
468
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_unicode_literals))</span></div>
469
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="preprocessor"># define GLM_CXX11_UNICODE_LITERALS</span></div>
470
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="preprocessor"># endif</span></div>
471
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;</div>
472
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_unrestricted_unions))</span></div>
473
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="preprocessor"># define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>
474
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="preprocessor"># endif</span></div>
475
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div>
476
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_user_literals))</span></div>
477
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="preprocessor"># define GLM_CXX11_USER_LITERALS</span></div>
478
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="preprocessor"># endif</span></div>
479
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div>
480
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="preprocessor"># if(__has_feature(cxx_variadic_templates))</span></div>
481
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="preprocessor"># define GLM_CXX11_VARIADIC_TEMPLATES</span></div>
482
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="preprocessor"># endif</span></div>
483
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div>
484
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="preprocessor">#endif//(GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>
485
+ </div><!-- fragment --></div><!-- contents -->
486
+ <!-- start footer part -->
487
+ <hr class="footer"/><address class="footer"><small>
488
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
489
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
490
+ </a> 1.8.10
491
+ </small></address>
492
+ </body>
493
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00002_source.html ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: _fixes.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.html">detail</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">_fixes.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div>
92
+ <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div>
93
+ <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#ifdef max</span></div>
94
+ <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#undef max</span></div>
95
+ <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#endif</span></div>
96
+ <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div>
97
+ <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifdef min</span></div>
98
+ <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#undef min</span></div>
99
+ <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#endif</span></div>
100
+ <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div>
101
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#ifdef isnan</span></div>
102
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#undef isnan</span></div>
103
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#endif</span></div>
104
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
105
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#ifdef isinf</span></div>
106
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#undef isinf</span></div>
107
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#endif</span></div>
108
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
109
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifdef log2</span></div>
110
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#undef log2</span></div>
111
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</span></div>
112
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
113
+ </div><!-- fragment --></div><!-- contents -->
114
+ <!-- start footer part -->
115
+ <hr class="footer"/><address class="footer"><small>
116
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
117
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
118
+ </a> 1.8.10
119
+ </small></address>
120
+ </body>
121
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00003_source.html ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: _noise.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.html">detail</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">_noise.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#pragma once</span></div>
92
+ <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div>
93
+ <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="preprocessor">#include &quot;../common.hpp&quot;</span></div>
94
+ <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div>
95
+ <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a>{</div>
96
+ <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="keyword">namespace </span>detail</div>
97
+ <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;{</div>
98
+ <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
99
+ <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; GLM_FUNC_QUALIFIER T mod289(T <span class="keyword">const</span>&amp; x)</div>
100
+ <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; {</div>
101
+ <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; <span class="keywordflow">return</span> x - <a class="code" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a>(x * (static_cast&lt;T&gt;(1.0) / static_cast&lt;T&gt;(289.0))) * <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(289.0);</div>
102
+ <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; }</div>
103
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div>
104
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
105
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; GLM_FUNC_QUALIFIER T permute(T <span class="keyword">const</span>&amp; x)</div>
106
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; {</div>
107
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>
108
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; }</div>
109
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div>
110
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
111
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; permute(vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; x)</div>
112
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div>
113
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>
114
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; }</div>
115
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
116
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
117
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; permute(vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; x)</div>
118
+ <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; {</div>
119
+ <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>
120
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; }</div>
121
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
122
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
123
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; permute(vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; x)</div>
124
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
125
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>
126
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
127
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
128
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
129
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; GLM_FUNC_QUALIFIER T taylorInvSqrt(T <span class="keyword">const</span>&amp; r)</div>
130
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
131
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(1.79284291400159) - <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(0.85373472095314) * r;</div>
132
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
133
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
134
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
135
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; taylorInvSqrt(vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; r)</div>
136
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
137
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(1.79284291400159) - <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(0.85373472095314) * r;</div>
138
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
139
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div>
140
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
141
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; taylorInvSqrt(vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; r)</div>
142
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
143
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(1.79284291400159) - <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(0.85373472095314) * r;</div>
144
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
145
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
146
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
147
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; taylorInvSqrt(vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; r)</div>
148
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
149
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(1.79284291400159) - <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(0.85373472095314) * r;</div>
150
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
151
+ <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
152
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
153
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; fade(vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; t)</div>
154
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
155
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">return</span> (t * t * t) * (t * (t * <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>
156
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
157
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div>
158
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
159
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; fade(vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; t)</div>
160
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
161
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">return</span> (t * t * t) * (t * (t * <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>
162
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
163
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div>
164
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
165
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; fade(vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; t)</div>
166
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
167
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> (t * t * t) * (t * (t * <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>
168
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div>
169
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}<span class="comment">//namespace detail</span></div>
170
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}<span class="comment">//namespace glm</span></div>
171
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div>
172
+ <div class="ttc" id="a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d"><div class="ttname"><a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">glm::floor</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floor(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>
173
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
174
+ </div><!-- fragment --></div><!-- contents -->
175
+ <!-- start footer part -->
176
+ <hr class="footer"/><address class="footer"><small>
177
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
178
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
179
+ </a> 1.8.10
180
+ </small></address>
181
+ </body>
182
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00004_source.html ADDED
The diff for this file is too large to render. See raw diff
 
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00005_source.html ADDED
The diff for this file is too large to render. See raw diff
 
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00006_source.html ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: _vectorize.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.html">detail</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">_vectorize.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#pragma once</span></div>
92
+ <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div>
93
+ <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a>{</div>
94
+ <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="keyword">namespace </span>detail</div>
95
+ <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;{</div>
96
+ <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
97
+ <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; <span class="keyword">struct </span>functor1{};</div>
98
+ <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div>
99
+ <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
100
+ <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; <span class="keyword">struct </span>functor1&lt;vec, 1, R, T, Q&gt;</div>
101
+ <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; {</div>
102
+ <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec&lt;1, R, Q&gt; call(R (*Func) (T x), vec&lt;1, T, Q&gt; <span class="keyword">const</span>&amp; v)</div>
103
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; {</div>
104
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="keywordflow">return</span> vec&lt;1, R, Q&gt;(Func(v.x));</div>
105
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; }</div>
106
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; };</div>
107
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
108
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
109
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">struct </span>functor1&lt;vec, 2, R, T, Q&gt;</div>
110
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; {</div>
111
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec&lt;2, R, Q&gt; call(R (*Func) (T x), vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; v)</div>
112
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div>
113
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> vec&lt;2, R, Q&gt;(Func(v.x), Func(v.y));</div>
114
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; }</div>
115
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; };</div>
116
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
117
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
118
+ <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">struct </span>functor1&lt;vec, 3, R, T, Q&gt;</div>
119
+ <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {</div>
120
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec&lt;3, R, Q&gt; call(R (*Func) (T x), vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; v)</div>
121
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
122
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> vec&lt;3, R, Q&gt;(Func(v.x), Func(v.y), Func(v.z));</div>
123
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div>
124
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; };</div>
125
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
126
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
127
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">struct </span>functor1&lt;vec, 4, R, T, Q&gt;</div>
128
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
129
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec&lt;4, R, Q&gt; call(R (*Func) (T x), vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; v)</div>
130
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
131
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> vec&lt;4, R, Q&gt;(Func(v.x), Func(v.y), Func(v.z), Func(v.w));</div>
132
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
133
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; };</div>
134
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
135
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
136
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">struct </span>functor2{};</div>
137
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
138
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
139
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">struct </span>functor2&lt;vec, 1, T, Q&gt;</div>
140
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
141
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;1, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;1, T, Q&gt; <span class="keyword">const</span>&amp; a, vec&lt;1, T, Q&gt; <span class="keyword">const</span>&amp; b)</div>
142
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
143
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> vec&lt;1, T, Q&gt;(Func(a.x, b.x));</div>
144
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
145
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; };</div>
146
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
147
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
148
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">struct </span>functor2&lt;vec, 2, T, Q&gt;</div>
149
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
150
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;2, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; a, vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; b)</div>
151
+ <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
152
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> vec&lt;2, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y));</div>
153
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
154
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; };</div>
155
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
156
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
157
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">struct </span>functor2&lt;vec, 3, T, Q&gt;</div>
158
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
159
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;3, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; a, vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; b)</div>
160
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
161
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">return</span> vec&lt;3, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>
162
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
163
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; };</div>
164
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div>
165
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
166
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">struct </span>functor2&lt;vec, 4, T, Q&gt;</div>
167
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div>
168
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;4, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; a, vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; b)</div>
169
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
170
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> vec&lt;4, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));</div>
171
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
172
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; };</div>
173
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
174
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
175
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">struct </span>functor2_vec_sca{};</div>
176
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
177
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
178
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">struct </span>functor2_vec_sca&lt;vec, 1, T, Q&gt;</div>
179
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div>
180
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;1, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;1, T, Q&gt; <span class="keyword">const</span>&amp; a, T b)</div>
181
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
182
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">return</span> vec&lt;1, T, Q&gt;(Func(a.x, b));</div>
183
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
184
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; };</div>
185
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
186
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
187
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">struct </span>functor2_vec_sca&lt;vec, 2, T, Q&gt;</div>
188
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
189
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;2, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; a, T b)</div>
190
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div>
191
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> vec&lt;2, T, Q&gt;(Func(a.x, b), Func(a.y, b));</div>
192
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
193
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; };</div>
194
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
195
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
196
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">struct </span>functor2_vec_sca&lt;vec, 3, T, Q&gt;</div>
197
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
198
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;3, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; a, T b)</div>
199
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
200
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> vec&lt;3, T, Q&gt;(Func(a.x, b), Func(a.y, b), Func(a.z, b));</div>
201
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
202
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; };</div>
203
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div>
204
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt; <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
205
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">struct </span>functor2_vec_sca&lt;vec, 4, T, Q&gt;</div>
206
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div>
207
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;4, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; a, T b)</div>
208
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
209
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> vec&lt;4, T, Q&gt;(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));</div>
210
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
211
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; };</div>
212
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div>
213
+ <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
214
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">struct </span>functor2_vec_int {};</div>
215
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
216
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
217
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">struct </span>functor2_vec_int&lt;1, T, Q&gt;</div>
218
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
219
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;1, int, Q&gt; call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec&lt;1, T, Q&gt; <span class="keyword">const</span>&amp; a, vec&lt;1, int, Q&gt; <span class="keyword">const</span>&amp; b)</div>
220
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
221
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> vec&lt;1, int, Q&gt;(Func(a.x, b.x));</div>
222
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
223
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; };</div>
224
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div>
225
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
226
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">struct </span>functor2_vec_int&lt;2, T, Q&gt;</div>
227
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
228
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;2, int, Q&gt; call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; a, vec&lt;2, int, Q&gt; <span class="keyword">const</span>&amp; b)</div>
229
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div>
230
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> vec&lt;2, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y));</div>
231
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
232
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; };</div>
233
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div>
234
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
235
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">struct </span>functor2_vec_int&lt;3, T, Q&gt;</div>
236
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div>
237
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;3, int, Q&gt; call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; a, vec&lt;3, int, Q&gt; <span class="keyword">const</span>&amp; b)</div>
238
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
239
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">return</span> vec&lt;3, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>
240
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
241
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; };</div>
242
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div>
243
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
244
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">struct </span>functor2_vec_int&lt;4, T, Q&gt;</div>
245
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div>
246
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec&lt;4, int, Q&gt; call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; a, vec&lt;4, int, Q&gt; <span class="keyword">const</span>&amp; b)</div>
247
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div>
248
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">return</span> vec&lt;4, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));</div>
249
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
250
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; };</div>
251
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;}<span class="comment">//namespace detail</span></div>
252
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;}<span class="comment">//namespace glm</span></div>
253
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
254
+ </div><!-- fragment --></div><!-- contents -->
255
+ <!-- start footer part -->
256
+ <hr class="footer"/><address class="footer"><small>
257
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
258
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
259
+ </a> 1.8.10
260
+ </small></address>
261
+ </body>
262
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00007.html ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: associated_min_max.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">associated_min_max.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00308.html">GLM_GTX_associated_min_max</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00007_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memTemplParams" colspan="2">template&lt;typename T , typename U &gt; </td></tr>
102
+ <tr class="memitem:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45">associatedMax</a> (T x, U a, T y, U b)</td></tr>
103
+ <tr class="memdesc:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45">More...</a><br /></td></tr>
104
+ <tr class="separator:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memSeparator" colspan="2">&#160;</td></tr>
105
+ <tr class="memitem:ga5c6758bc50aa7fbe700f87123a045aad"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
106
+ <tr class="memitem:ga5c6758bc50aa7fbe700f87123a045aad"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga5c6758bc50aa7fbe700f87123a045aad">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>
107
+ <tr class="memdesc:ga5c6758bc50aa7fbe700f87123a045aad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga5c6758bc50aa7fbe700f87123a045aad">More...</a><br /></td></tr>
108
+ <tr class="separator:ga5c6758bc50aa7fbe700f87123a045aad"><td class="memSeparator" colspan="2">&#160;</td></tr>
109
+ <tr class="memitem:ga0d169d6ce26b03248df175f39005d77f"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
110
+ <tr class="memitem:ga0d169d6ce26b03248df175f39005d77f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga0d169d6ce26b03248df175f39005d77f">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>
111
+ <tr class="memdesc:ga0d169d6ce26b03248df175f39005d77f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga0d169d6ce26b03248df175f39005d77f">More...</a><br /></td></tr>
112
+ <tr class="separator:ga0d169d6ce26b03248df175f39005d77f"><td class="memSeparator" colspan="2">&#160;</td></tr>
113
+ <tr class="memitem:ga4086269afabcb81dd7ded33cb3448653"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
114
+ <tr class="memitem:ga4086269afabcb81dd7ded33cb3448653"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga4086269afabcb81dd7ded33cb3448653">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>
115
+ <tr class="memdesc:ga4086269afabcb81dd7ded33cb3448653"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga4086269afabcb81dd7ded33cb3448653">More...</a><br /></td></tr>
116
+ <tr class="separator:ga4086269afabcb81dd7ded33cb3448653"><td class="memSeparator" colspan="2">&#160;</td></tr>
117
+ <tr class="memitem:gaec891e363d91abbf3a4443cf2f652209"><td class="memTemplParams" colspan="2">template&lt;typename T , typename U &gt; </td></tr>
118
+ <tr class="memitem:gaec891e363d91abbf3a4443cf2f652209"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gaec891e363d91abbf3a4443cf2f652209">associatedMax</a> (T x, U a, T y, U b, T z, U c)</td></tr>
119
+ <tr class="memdesc:gaec891e363d91abbf3a4443cf2f652209"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#gaec891e363d91abbf3a4443cf2f652209">More...</a><br /></td></tr>
120
+ <tr class="separator:gaec891e363d91abbf3a4443cf2f652209"><td class="memSeparator" colspan="2">&#160;</td></tr>
121
+ <tr class="memitem:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
122
+ <tr class="memitem:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>
123
+ <tr class="memdesc:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c">More...</a><br /></td></tr>
124
+ <tr class="separator:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
125
+ <tr class="memitem:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
126
+ <tr class="memitem:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>
127
+ <tr class="memdesc:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba">More...</a><br /></td></tr>
128
+ <tr class="separator:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="memSeparator" colspan="2">&#160;</td></tr>
129
+ <tr class="memitem:ga19f59d1141a51a3b2108a9807af78f7f"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
130
+ <tr class="memitem:ga19f59d1141a51a3b2108a9807af78f7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga19f59d1141a51a3b2108a9807af78f7f">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)</td></tr>
131
+ <tr class="memdesc:ga19f59d1141a51a3b2108a9807af78f7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#ga19f59d1141a51a3b2108a9807af78f7f">More...</a><br /></td></tr>
132
+ <tr class="separator:ga19f59d1141a51a3b2108a9807af78f7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
133
+ <tr class="memitem:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memTemplParams" colspan="2">template&lt;typename T , typename U &gt; </td></tr>
134
+ <tr class="memitem:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc">associatedMax</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>
135
+ <tr class="memdesc:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc">More...</a><br /></td></tr>
136
+ <tr class="separator:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memSeparator" colspan="2">&#160;</td></tr>
137
+ <tr class="memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
138
+ <tr class="memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>
139
+ <tr class="memdesc:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6">More...</a><br /></td></tr>
140
+ <tr class="separator:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
141
+ <tr class="memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
142
+ <tr class="memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>
143
+ <tr class="memdesc:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d">More...</a><br /></td></tr>
144
+ <tr class="separator:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
145
+ <tr class="memitem:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
146
+ <tr class="memitem:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>
147
+ <tr class="memdesc:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">More...</a><br /></td></tr>
148
+ <tr class="separator:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
149
+ <tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplParams" colspan="2">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>
150
+ <tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gacc01bd272359572fc28437ae214a02df">associatedMin</a> (T x, U a, T y, U b)</td></tr>
151
+ <tr class="memdesc:gacc01bd272359572fc28437ae214a02df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#gacc01bd272359572fc28437ae214a02df">More...</a><br /></td></tr>
152
+ <tr class="separator:gacc01bd272359572fc28437ae214a02df"><td class="memSeparator" colspan="2">&#160;</td></tr>
153
+ <tr class="memitem:gac2f0dff90948f2e44386a5eafd941d1c"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
154
+ <tr class="memitem:gac2f0dff90948f2e44386a5eafd941d1c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gac2f0dff90948f2e44386a5eafd941d1c">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>
155
+ <tr class="memdesc:gac2f0dff90948f2e44386a5eafd941d1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#gac2f0dff90948f2e44386a5eafd941d1c">More...</a><br /></td></tr>
156
+ <tr class="separator:gac2f0dff90948f2e44386a5eafd941d1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
157
+ <tr class="memitem:gacfec519c820331d023ef53a511749319"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
158
+ <tr class="memitem:gacfec519c820331d023ef53a511749319"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gacfec519c820331d023ef53a511749319">associatedMin</a> (T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)</td></tr>
159
+ <tr class="memdesc:gacfec519c820331d023ef53a511749319"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#gacfec519c820331d023ef53a511749319">More...</a><br /></td></tr>
160
+ <tr class="separator:gacfec519c820331d023ef53a511749319"><td class="memSeparator" colspan="2">&#160;</td></tr>
161
+ <tr class="memitem:ga4757c7cab2d809124a8525d0a9deeb37"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
162
+ <tr class="memitem:ga4757c7cab2d809124a8525d0a9deeb37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga4757c7cab2d809124a8525d0a9deeb37">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>
163
+ <tr class="memdesc:ga4757c7cab2d809124a8525d0a9deeb37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga4757c7cab2d809124a8525d0a9deeb37">More...</a><br /></td></tr>
164
+ <tr class="separator:ga4757c7cab2d809124a8525d0a9deeb37"><td class="memSeparator" colspan="2">&#160;</td></tr>
165
+ <tr class="memitem:gad0aa8f86259a26d839d34a3577a923fc"><td class="memTemplParams" colspan="2">template&lt;typename T , typename U &gt; </td></tr>
166
+ <tr class="memitem:gad0aa8f86259a26d839d34a3577a923fc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gad0aa8f86259a26d839d34a3577a923fc">associatedMin</a> (T x, U a, T y, U b, T z, U c)</td></tr>
167
+ <tr class="memdesc:gad0aa8f86259a26d839d34a3577a923fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#gad0aa8f86259a26d839d34a3577a923fc">More...</a><br /></td></tr>
168
+ <tr class="separator:gad0aa8f86259a26d839d34a3577a923fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
169
+ <tr class="memitem:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
170
+ <tr class="memitem:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>
171
+ <tr class="memdesc:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d">More...</a><br /></td></tr>
172
+ <tr class="separator:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="memSeparator" colspan="2">&#160;</td></tr>
173
+ <tr class="memitem:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memTemplParams" colspan="2">template&lt;typename T , typename U &gt; </td></tr>
174
+ <tr class="memitem:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6">associatedMin</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>
175
+ <tr class="memdesc:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6">More...</a><br /></td></tr>
176
+ <tr class="separator:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memSeparator" colspan="2">&#160;</td></tr>
177
+ <tr class="memitem:ga66b08118bc88f0494bcacb7cdb940556"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
178
+ <tr class="memitem:ga66b08118bc88f0494bcacb7cdb940556"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga66b08118bc88f0494bcacb7cdb940556">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>
179
+ <tr class="memdesc:ga66b08118bc88f0494bcacb7cdb940556"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga66b08118bc88f0494bcacb7cdb940556">More...</a><br /></td></tr>
180
+ <tr class="separator:ga66b08118bc88f0494bcacb7cdb940556"><td class="memSeparator" colspan="2">&#160;</td></tr>
181
+ <tr class="memitem:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
182
+ <tr class="memitem:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68">associatedMin</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>
183
+ <tr class="memdesc:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68">More...</a><br /></td></tr>
184
+ <tr class="separator:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="memSeparator" colspan="2">&#160;</td></tr>
185
+ <tr class="memitem:ga2db7e351994baee78540a562d4bb6d3b"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>
186
+ <tr class="memitem:ga2db7e351994baee78540a562d4bb6d3b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>
187
+ <tr class="memdesc:ga2db7e351994baee78540a562d4bb6d3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">More...</a><br /></td></tr>
188
+ <tr class="separator:ga2db7e351994baee78540a562d4bb6d3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
189
+ </table>
190
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
191
+ <div class="textblock"><p><a class="el" href="a00308.html">GLM_GTX_associated_min_max</a> </p>
192
+ <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
193
+ <dd>
194
+ gtx_extented_min_max (dependence) </dd></dl>
195
+
196
+ <p>Definition in file <a class="el" href="a00007_source.html">associated_min_max.hpp</a>.</p>
197
+ </div></div><!-- contents -->
198
+ <!-- start footer part -->
199
+ <hr class="footer"/><address class="footer"><small>
200
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
201
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
202
+ </a> 1.8.10
203
+ </small></address>
204
+ </body>
205
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00007_source.html ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: associated_min_max.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">associated_min_max.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00007.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#pragma once</span></div>
93
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div>
94
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// Dependency:</span></div>
95
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;../glm.hpp&quot;</span></div>
96
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div>
97
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>
98
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
99
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>
100
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor"># else</span></div>
101
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_associated_min_max extension included&quot;)</span></div>
102
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"># endif</span></div>
103
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
104
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
105
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
106
+ <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
107
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
108
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
109
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; GLM_FUNC_DECL U <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(T x, U a, T y, U b);</div>
110
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
111
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
112
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; GLM_FUNC_DECL vec&lt;2, U, Q&gt; <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
113
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
114
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b);</div>
115
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
116
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
117
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
118
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; T x, <span class="keyword">const</span> vec&lt;L, U, Q&gt;&amp; a,</div>
119
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; T y, <span class="keyword">const</span> vec&lt;L, U, Q&gt;&amp; b);</div>
120
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
121
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
122
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
123
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, U a,</div>
124
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, U b);</div>
125
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div>
126
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div>
127
+ <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; GLM_FUNC_DECL U <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
128
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; T x, U a,</div>
129
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; T y, U b,</div>
130
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; T z, U c);</div>
131
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
132
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
133
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
134
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
135
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b,</div>
136
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; c);</div>
137
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div>
138
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div>
139
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; GLM_FUNC_DECL U <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
140
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; T x, U a,</div>
141
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; T y, U b,</div>
142
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; T z, U c,</div>
143
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; T w, U d);</div>
144
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
145
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
146
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
147
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
148
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b,</div>
149
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; c,</div>
150
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; w, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; d);</div>
151
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
152
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
153
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
154
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; T x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
155
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; T y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b,</div>
156
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; T z, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; c,</div>
157
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; T w, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; d);</div>
158
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div>
159
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
160
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
161
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, U a,</div>
162
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, U b,</div>
163
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; z, U c,</div>
164
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; w, U d);</div>
165
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div>
166
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div>
167
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; GLM_FUNC_DECL U <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(T x, U a, T y, U b);</div>
168
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div>
169
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
170
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; GLM_FUNC_DECL vec&lt;2, U, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
171
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
172
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b);</div>
173
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div>
174
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
175
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
176
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; T x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
177
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; T y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b);</div>
178
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div>
179
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
180
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
181
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, U a,</div>
182
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, U b);</div>
183
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div>
184
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div>
185
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; GLM_FUNC_DECL U <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
186
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; T x, U a,</div>
187
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; T y, U b,</div>
188
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; T z, U c);</div>
189
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div>
190
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
191
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
192
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
193
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b,</div>
194
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; c);</div>
195
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div>
196
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
197
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
198
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; T x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
199
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; T y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b,</div>
200
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; T z, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; c);</div>
201
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div>
202
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
203
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
204
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, U a,</div>
205
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, U b,</div>
206
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; z, U c);</div>
207
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div>
208
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div>
209
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; GLM_FUNC_DECL U <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
210
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; T x, U a,</div>
211
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; T y, U b,</div>
212
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; T z, U c,</div>
213
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; T w, U d);</div>
214
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div>
215
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
216
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
217
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
218
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b,</div>
219
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; c,</div>
220
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; w, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; d);</div>
221
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div>
222
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
223
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
224
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; T x, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a,</div>
225
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; T y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; b,</div>
226
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; T z, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; c,</div>
227
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; T w, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; d);</div>
228
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div>
229
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
230
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
231
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, U a,</div>
232
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, U b,</div>
233
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; z, U c,</div>
234
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; w, U d);</div>
235
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div>
236
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;} <span class="comment">//namespace glm</span></div>
237
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div>
238
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="preprocessor">#include &quot;associated_min_max.inl&quot;</span></div>
239
+ <div class="ttc" id="a00308_html_gab9c3dd74cac899d2c625b5767ea3b3fb"><div class="ttname"><a href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">glm::associatedMax</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, U, Q &gt; associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</div><div class="ttdoc">Maximum comparison between 4 variables and returns 4 associated variable values. </div></div>
240
+ <div class="ttc" id="a00308_html_ga2db7e351994baee78540a562d4bb6d3b"><div class="ttname"><a href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">glm::associatedMin</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, U, Q &gt; associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</div><div class="ttdoc">Minimum comparison between 4 variables and returns 4 associated variable values. </div></div>
241
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
242
+ </div><!-- fragment --></div><!-- contents -->
243
+ <!-- start footer part -->
244
+ <hr class="footer"/><address class="footer"><small>
245
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
246
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
247
+ </a> 1.8.10
248
+ </small></address>
249
+ </body>
250
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00008.html ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: bit.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">bit.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00309.html">GLM_GTX_bit</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00008_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
102
+ <tr class="memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05">highestBitValue</a> (genIUType Value)</td></tr>
103
+ <tr class="separator:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memSeparator" colspan="2">&#160;</td></tr>
104
+ <tr class="memitem:ga898ef075ccf809a1e480faab48fe96bf"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
105
+ <tr class="memitem:ga898ef075ccf809a1e480faab48fe96bf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">highestBitValue</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>
106
+ <tr class="memdesc:ga898ef075ccf809a1e480faab48fe96bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find the highest bit set to 1 in a integer variable and return its value. <a href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">More...</a><br /></td></tr>
107
+ <tr class="separator:ga898ef075ccf809a1e480faab48fe96bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
108
+ <tr class="memitem:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
109
+ <tr class="memitem:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f">lowestBitValue</a> (genIUType Value)</td></tr>
110
+ <tr class="separator:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
111
+ <tr class="memitem:ga8cda2459871f574a0aecbe702ac93291"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
112
+ <tr class="memitem:ga8cda2459871f574a0aecbe702ac93291"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga8cda2459871f574a0aecbe702ac93291">powerOfTwoAbove</a> (genIUType Value)</td></tr>
113
+ <tr class="memdesc:ga8cda2459871f574a0aecbe702ac93291"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the power of two number which value is just higher the input value. <a href="a00309.html#ga8cda2459871f574a0aecbe702ac93291">More...</a><br /></td></tr>
114
+ <tr class="separator:ga8cda2459871f574a0aecbe702ac93291"><td class="memSeparator" colspan="2">&#160;</td></tr>
115
+ <tr class="memitem:ga2bbded187c5febfefc1e524ba31b3fab"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
116
+ <tr class="memitem:ga2bbded187c5febfefc1e524ba31b3fab"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">powerOfTwoAbove</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>
117
+ <tr class="memdesc:ga2bbded187c5febfefc1e524ba31b3fab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the power of two number which value is just higher the input value. <a href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">More...</a><br /></td></tr>
118
+ <tr class="separator:ga2bbded187c5febfefc1e524ba31b3fab"><td class="memSeparator" colspan="2">&#160;</td></tr>
119
+ <tr class="memitem:ga3de7df63c589325101a2817a56f8e29d"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
120
+ <tr class="memitem:ga3de7df63c589325101a2817a56f8e29d"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga3de7df63c589325101a2817a56f8e29d">powerOfTwoBelow</a> (genIUType Value)</td></tr>
121
+ <tr class="memdesc:ga3de7df63c589325101a2817a56f8e29d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the power of two number which value is just lower the input value. <a href="a00309.html#ga3de7df63c589325101a2817a56f8e29d">More...</a><br /></td></tr>
122
+ <tr class="separator:ga3de7df63c589325101a2817a56f8e29d"><td class="memSeparator" colspan="2">&#160;</td></tr>
123
+ <tr class="memitem:gaf78ddcc4152c051b2a21e68fecb10980"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
124
+ <tr class="memitem:gaf78ddcc4152c051b2a21e68fecb10980"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">powerOfTwoBelow</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>
125
+ <tr class="memdesc:gaf78ddcc4152c051b2a21e68fecb10980"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the power of two number which value is just lower the input value. <a href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">More...</a><br /></td></tr>
126
+ <tr class="separator:gaf78ddcc4152c051b2a21e68fecb10980"><td class="memSeparator" colspan="2">&#160;</td></tr>
127
+ <tr class="memitem:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
128
+ <tr class="memitem:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga5f65973a5d2ea38c719e6a663149ead9">powerOfTwoNearest</a> (genIUType Value)</td></tr>
129
+ <tr class="memdesc:ga5f65973a5d2ea38c719e6a663149ead9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the power of two number which value is the closet to the input value. <a href="a00309.html#ga5f65973a5d2ea38c719e6a663149ead9">More...</a><br /></td></tr>
130
+ <tr class="separator:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memSeparator" colspan="2">&#160;</td></tr>
131
+ <tr class="memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
132
+ <tr class="memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">powerOfTwoNearest</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>
133
+ <tr class="memdesc:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the power of two number which value is the closet to the input value. <a href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">More...</a><br /></td></tr>
134
+ <tr class="separator:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
135
+ </table>
136
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
137
+ <div class="textblock"><p><a class="el" href="a00309.html">GLM_GTX_bit</a> </p>
138
+ <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
139
+
140
+ <p>Definition in file <a class="el" href="a00008_source.html">bit.hpp</a>.</p>
141
+ </div></div><!-- contents -->
142
+ <!-- start footer part -->
143
+ <hr class="footer"/><address class="footer"><small>
144
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
145
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
146
+ </a> 1.8.10
147
+ </small></address>
148
+ </body>
149
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00008_source.html ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: bit.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">bit.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00008.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#pragma once</span></div>
93
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
94
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// Dependencies</span></div>
95
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;../gtc/bitfield.hpp&quot;</span></div>
96
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
97
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>
98
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
99
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>
100
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor"># else</span></div>
101
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_bit extension included&quot;)</span></div>
102
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor"># endif</span></div>
103
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div>
104
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
105
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
106
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
107
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
108
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
109
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; GLM_FUNC_DECL genIUType <a class="code" href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">highestBitValue</a>(genIUType Value);</div>
110
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
111
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
112
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; GLM_FUNC_DECL genIUType <a class="code" href="a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f">lowestBitValue</a>(genIUType Value);</div>
113
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
114
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
115
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">highestBitValue</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; value);</div>
116
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
117
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
118
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">powerOfTwoAbove</a>(genIUType Value);</div>
119
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
120
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
121
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">powerOfTwoAbove</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; value);</div>
122
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
123
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
124
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">powerOfTwoBelow</a>(genIUType Value);</div>
125
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
126
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
127
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">powerOfTwoBelow</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; value);</div>
128
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div>
129
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
130
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">powerOfTwoNearest</a>(genIUType Value);</div>
131
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
132
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
133
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">powerOfTwoNearest</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; value);</div>
134
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div>
135
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;} <span class="comment">//namespace glm</span></div>
136
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
137
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div>
138
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#include &quot;bit.inl&quot;</span></div>
139
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div>
140
+ <div class="ttc" id="a00309_html_ga898ef075ccf809a1e480faab48fe96bf"><div class="ttname"><a href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">glm::highestBitValue</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; highestBitValue(vec&lt; L, T, Q &gt; const &amp;value)</div><div class="ttdoc">Find the highest bit set to 1 in a integer variable and return its value. </div></div>
141
+ <div class="ttc" id="a00309_html_gaf78ddcc4152c051b2a21e68fecb10980"><div class="ttname"><a href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">glm::powerOfTwoBelow</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoBelow(vec&lt; L, T, Q &gt; const &amp;value)</div><div class="ttdoc">Return the power of two number which value is just lower the input value. </div></div>
142
+ <div class="ttc" id="a00309_html_ga2bbded187c5febfefc1e524ba31b3fab"><div class="ttname"><a href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">glm::powerOfTwoAbove</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoAbove(vec&lt; L, T, Q &gt; const &amp;value)</div><div class="ttdoc">Return the power of two number which value is just higher the input value. </div></div>
143
+ <div class="ttc" id="a00309_html_gac87e65d11e16c3d6b91c3bcfaef7da0b"><div class="ttname"><a href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">glm::powerOfTwoNearest</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoNearest(vec&lt; L, T, Q &gt; const &amp;value)</div><div class="ttdoc">Return the power of two number which value is the closet to the input value. </div></div>
144
+ <div class="ttc" id="a00309_html_ga2ff6568089f3a9b67f5c30918855fc6f"><div class="ttname"><a href="a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f">glm::lowestBitValue</a></div><div class="ttdeci">GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value)</div></div>
145
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
146
+ </div><!-- fragment --></div><!-- contents -->
147
+ <!-- start footer part -->
148
+ <hr class="footer"/><address class="footer"><small>
149
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
150
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
151
+ </a> 1.8.10
152
+ </small></address>
153
+ </body>
154
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00009.html ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: bitfield.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.html">gtc</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">bitfield.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00288.html">GLM_GTC_bitfield</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00009_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:ga091d934233a2e121df91b8c7230357c8"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL <a class="el" href="a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611">glm::u8vec2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga091d934233a2e121df91b8c7230357c8">bitfieldDeinterleave</a> (<a class="el" href="a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e">glm::uint16</a> x)</td></tr>
102
+ <tr class="memdesc:ga091d934233a2e121df91b8c7230357c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deinterleaves the bits of x. <a href="a00288.html#ga091d934233a2e121df91b8c7230357c8">More...</a><br /></td></tr>
103
+ <tr class="separator:ga091d934233a2e121df91b8c7230357c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
104
+ <tr class="memitem:ga7d1cc24dfbcdd932c3a2abbb76235f98"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL <a class="el" href="a00304.html#ga2a78447eb9d66a114b193f4a25899c16">glm::u16vec2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98">bitfieldDeinterleave</a> (<a class="el" href="a00263.html#ga1134b580f8da4de94ca6b1de4d37975e">glm::uint32</a> x)</td></tr>
105
+ <tr class="memdesc:ga7d1cc24dfbcdd932c3a2abbb76235f98"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deinterleaves the bits of x. <a href="a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98">More...</a><br /></td></tr>
106
+ <tr class="separator:ga7d1cc24dfbcdd932c3a2abbb76235f98"><td class="memSeparator" colspan="2">&#160;</td></tr>
107
+ <tr class="memitem:ga8dbb8c87092f33bd815dd8a840be5d60"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL <a class="el" href="a00304.html#ga2a266e46ee218d0c680f12b35c500cc0">glm::u32vec2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">bitfieldDeinterleave</a> (<a class="el" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a> x)</td></tr>
108
+ <tr class="memdesc:ga8dbb8c87092f33bd815dd8a840be5d60"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deinterleaves the bits of x. <a href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">More...</a><br /></td></tr>
109
+ <tr class="separator:ga8dbb8c87092f33bd815dd8a840be5d60"><td class="memSeparator" colspan="2">&#160;</td></tr>
110
+ <tr class="memitem:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
111
+ <tr class="memitem:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a">bitfieldFillOne</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>
112
+ <tr class="memdesc:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to 1 a range of bits. <a href="a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a">More...</a><br /></td></tr>
113
+ <tr class="separator:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
114
+ <tr class="memitem:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
115
+ <tr class="memitem:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">bitfieldFillOne</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>
116
+ <tr class="memdesc:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to 1 a range of bits. <a href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">More...</a><br /></td></tr>
117
+ <tr class="separator:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
118
+ <tr class="memitem:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
119
+ <tr class="memitem:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee">bitfieldFillZero</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>
120
+ <tr class="memdesc:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to 0 a range of bits. <a href="a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee">More...</a><br /></td></tr>
121
+ <tr class="separator:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memSeparator" colspan="2">&#160;</td></tr>
122
+ <tr class="memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
123
+ <tr class="memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">bitfieldFillZero</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>
124
+ <tr class="memdesc:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to 0 a range of bits. <a href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">More...</a><br /></td></tr>
125
+ <tr class="separator:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
126
+ <tr class="memitem:ga24cad0069f9a0450abd80b3e89501adf"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga24cad0069f9a0450abd80b3e89501adf">bitfieldInterleave</a> (int8 x, int8 y)</td></tr>
127
+ <tr class="memdesc:ga24cad0069f9a0450abd80b3e89501adf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga24cad0069f9a0450abd80b3e89501adf">More...</a><br /></td></tr>
128
+ <tr class="separator:ga24cad0069f9a0450abd80b3e89501adf"><td class="memSeparator" colspan="2">&#160;</td></tr>
129
+ <tr class="memitem:ga9a4976a529aec2cee56525e1165da484"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga9a4976a529aec2cee56525e1165da484">bitfieldInterleave</a> (uint8 x, uint8 y)</td></tr>
130
+ <tr class="memdesc:ga9a4976a529aec2cee56525e1165da484"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga9a4976a529aec2cee56525e1165da484">More...</a><br /></td></tr>
131
+ <tr class="separator:ga9a4976a529aec2cee56525e1165da484"><td class="memSeparator" colspan="2">&#160;</td></tr>
132
+ <tr class="memitem:ga4a76bbca39c40153f3203d0a1926e142"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga4a76bbca39c40153f3203d0a1926e142">bitfieldInterleave</a> (u8vec2 const &amp;v)</td></tr>
133
+ <tr class="memdesc:ga4a76bbca39c40153f3203d0a1926e142"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga4a76bbca39c40153f3203d0a1926e142">More...</a><br /></td></tr>
134
+ <tr class="separator:ga4a76bbca39c40153f3203d0a1926e142"><td class="memSeparator" colspan="2">&#160;</td></tr>
135
+ <tr class="memitem:gac51c33a394593f0631fa3aa5bb778809"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#gac51c33a394593f0631fa3aa5bb778809">bitfieldInterleave</a> (int16 x, int16 y)</td></tr>
136
+ <tr class="memdesc:gac51c33a394593f0631fa3aa5bb778809"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#gac51c33a394593f0631fa3aa5bb778809">More...</a><br /></td></tr>
137
+ <tr class="separator:gac51c33a394593f0631fa3aa5bb778809"><td class="memSeparator" colspan="2">&#160;</td></tr>
138
+ <tr class="memitem:ga94f3646a5667f4be56f8dcf3310e963f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga94f3646a5667f4be56f8dcf3310e963f">bitfieldInterleave</a> (uint16 x, uint16 y)</td></tr>
139
+ <tr class="memdesc:ga94f3646a5667f4be56f8dcf3310e963f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga94f3646a5667f4be56f8dcf3310e963f">More...</a><br /></td></tr>
140
+ <tr class="separator:ga94f3646a5667f4be56f8dcf3310e963f"><td class="memSeparator" colspan="2">&#160;</td></tr>
141
+ <tr class="memitem:ga406c4ee56af4ca37a73f449f154eca3e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga406c4ee56af4ca37a73f449f154eca3e">bitfieldInterleave</a> (u16vec2 const &amp;v)</td></tr>
142
+ <tr class="memdesc:ga406c4ee56af4ca37a73f449f154eca3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga406c4ee56af4ca37a73f449f154eca3e">More...</a><br /></td></tr>
143
+ <tr class="separator:ga406c4ee56af4ca37a73f449f154eca3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
144
+ <tr class="memitem:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a">bitfieldInterleave</a> (int32 x, int32 y)</td></tr>
145
+ <tr class="memdesc:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a">More...</a><br /></td></tr>
146
+ <tr class="separator:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="memSeparator" colspan="2">&#160;</td></tr>
147
+ <tr class="memitem:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd">bitfieldInterleave</a> (uint32 x, uint32 y)</td></tr>
148
+ <tr class="memdesc:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd">More...</a><br /></td></tr>
149
+ <tr class="separator:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
150
+ <tr class="memitem:ga8cb17574d60abd6ade84bc57c10e8f78"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78">bitfieldInterleave</a> (u32vec2 const &amp;v)</td></tr>
151
+ <tr class="memdesc:ga8cb17574d60abd6ade84bc57c10e8f78"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78">More...</a><br /></td></tr>
152
+ <tr class="separator:ga8cb17574d60abd6ade84bc57c10e8f78"><td class="memSeparator" colspan="2">&#160;</td></tr>
153
+ <tr class="memitem:ga8fdb724dccd4a07d57efc01147102137"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga8fdb724dccd4a07d57efc01147102137">bitfieldInterleave</a> (int8 x, int8 y, int8 z)</td></tr>
154
+ <tr class="memdesc:ga8fdb724dccd4a07d57efc01147102137"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00288.html#ga8fdb724dccd4a07d57efc01147102137">More...</a><br /></td></tr>
155
+ <tr class="separator:ga8fdb724dccd4a07d57efc01147102137"><td class="memSeparator" colspan="2">&#160;</td></tr>
156
+ <tr class="memitem:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z)</td></tr>
157
+ <tr class="memdesc:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93">More...</a><br /></td></tr>
158
+ <tr class="separator:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="memSeparator" colspan="2">&#160;</td></tr>
159
+ <tr class="memitem:gaa901c36a842fa5d126ea650549f17b24"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#gaa901c36a842fa5d126ea650549f17b24">bitfieldInterleave</a> (int16 x, int16 y, int16 z)</td></tr>
160
+ <tr class="memdesc:gaa901c36a842fa5d126ea650549f17b24"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00288.html#gaa901c36a842fa5d126ea650549f17b24">More...</a><br /></td></tr>
161
+ <tr class="separator:gaa901c36a842fa5d126ea650549f17b24"><td class="memSeparator" colspan="2">&#160;</td></tr>
162
+ <tr class="memitem:ga3afd6d38881fe3948c53d4214d2197fd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga3afd6d38881fe3948c53d4214d2197fd">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z)</td></tr>
163
+ <tr class="memdesc:ga3afd6d38881fe3948c53d4214d2197fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00288.html#ga3afd6d38881fe3948c53d4214d2197fd">More...</a><br /></td></tr>
164
+ <tr class="separator:ga3afd6d38881fe3948c53d4214d2197fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
165
+ <tr class="memitem:gad2075d96a6640121edaa98ea534102ca"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#gad2075d96a6640121edaa98ea534102ca">bitfieldInterleave</a> (int32 x, int32 y, int32 z)</td></tr>
166
+ <tr class="memdesc:gad2075d96a6640121edaa98ea534102ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00288.html#gad2075d96a6640121edaa98ea534102ca">More...</a><br /></td></tr>
167
+ <tr class="separator:gad2075d96a6640121edaa98ea534102ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
168
+ <tr class="memitem:gab19fbc739fc0cf7247978602c36f7da8"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#gab19fbc739fc0cf7247978602c36f7da8">bitfieldInterleave</a> (uint32 x, uint32 y, uint32 z)</td></tr>
169
+ <tr class="memdesc:gab19fbc739fc0cf7247978602c36f7da8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00288.html#gab19fbc739fc0cf7247978602c36f7da8">More...</a><br /></td></tr>
170
+ <tr class="separator:gab19fbc739fc0cf7247978602c36f7da8"><td class="memSeparator" colspan="2">&#160;</td></tr>
171
+ <tr class="memitem:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d">bitfieldInterleave</a> (int8 x, int8 y, int8 z, int8 w)</td></tr>
172
+ <tr class="memdesc:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y, z and w. <a href="a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d">More...</a><br /></td></tr>
173
+ <tr class="separator:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
174
+ <tr class="memitem:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z, uint8 w)</td></tr>
175
+ <tr class="memdesc:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y, z and w. <a href="a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36">More...</a><br /></td></tr>
176
+ <tr class="separator:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="memSeparator" colspan="2">&#160;</td></tr>
177
+ <tr class="memitem:ga180a63161e1319fbd5a53c84d0429c7a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga180a63161e1319fbd5a53c84d0429c7a">bitfieldInterleave</a> (int16 x, int16 y, int16 z, int16 w)</td></tr>
178
+ <tr class="memdesc:ga180a63161e1319fbd5a53c84d0429c7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y, z and w. <a href="a00288.html#ga180a63161e1319fbd5a53c84d0429c7a">More...</a><br /></td></tr>
179
+ <tr class="separator:ga180a63161e1319fbd5a53c84d0429c7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
180
+ <tr class="memitem:gafca8768671a14c8016facccb66a89f26"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z, uint16 w)</td></tr>
181
+ <tr class="memdesc:gafca8768671a14c8016facccb66a89f26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interleaves the bits of x, y, z and w. <a href="a00288.html#gafca8768671a14c8016facccb66a89f26">More...</a><br /></td></tr>
182
+ <tr class="separator:gafca8768671a14c8016facccb66a89f26"><td class="memSeparator" colspan="2">&#160;</td></tr>
183
+ <tr class="memitem:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
184
+ <tr class="memitem:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga2eb49678a344ce1495bdb5586d9896b9">bitfieldRotateLeft</a> (genIUType In, int Shift)</td></tr>
185
+ <tr class="memdesc:ga2eb49678a344ce1495bdb5586d9896b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rotate all bits to the left. <a href="a00288.html#ga2eb49678a344ce1495bdb5586d9896b9">More...</a><br /></td></tr>
186
+ <tr class="separator:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
187
+ <tr class="memitem:gae186317091b1a39214ebf79008d44a1e"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
188
+ <tr class="memitem:gae186317091b1a39214ebf79008d44a1e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#gae186317091b1a39214ebf79008d44a1e">bitfieldRotateLeft</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>
189
+ <tr class="memdesc:gae186317091b1a39214ebf79008d44a1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rotate all bits to the left. <a href="a00288.html#gae186317091b1a39214ebf79008d44a1e">More...</a><br /></td></tr>
190
+ <tr class="separator:gae186317091b1a39214ebf79008d44a1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
191
+ <tr class="memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
192
+ <tr class="memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca">bitfieldRotateRight</a> (genIUType In, int Shift)</td></tr>
193
+ <tr class="memdesc:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rotate all bits to the right. <a href="a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca">More...</a><br /></td></tr>
194
+ <tr class="separator:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
195
+ <tr class="memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
196
+ <tr class="memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">bitfieldRotateRight</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>
197
+ <tr class="memdesc:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rotate all bits to the right. <a href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">More...</a><br /></td></tr>
198
+ <tr class="separator:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="memSeparator" colspan="2">&#160;</td></tr>
199
+ <tr class="memitem:gad7eba518a0b71662114571ee76939f8a"><td class="memTemplParams" colspan="2">template&lt;typename genIUType &gt; </td></tr>
200
+ <tr class="memitem:gad7eba518a0b71662114571ee76939f8a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#gad7eba518a0b71662114571ee76939f8a">mask</a> (genIUType Bits)</td></tr>
201
+ <tr class="memdesc:gad7eba518a0b71662114571ee76939f8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build a mask of 'count' bits. <a href="a00288.html#gad7eba518a0b71662114571ee76939f8a">More...</a><br /></td></tr>
202
+ <tr class="separator:gad7eba518a0b71662114571ee76939f8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
203
+ <tr class="memitem:ga2e64e3b922a296033b825311e7f5fff1"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
204
+ <tr class="memitem:ga2e64e3b922a296033b825311e7f5fff1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">mask</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>
205
+ <tr class="memdesc:ga2e64e3b922a296033b825311e7f5fff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build a mask of 'count' bits. <a href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">More...</a><br /></td></tr>
206
+ <tr class="separator:ga2e64e3b922a296033b825311e7f5fff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
207
+ </table>
208
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
209
+ <div class="textblock"><p><a class="el" href="a00288.html">GLM_GTC_bitfield</a> </p>
210
+ <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
211
+ <dd>
212
+ <a class="el" href="a00288.html" title="Include <glm/gtc/bitfield.hpp> to use the features of this extension. ">GLM_GTC_bitfield</a> (dependence) </dd></dl>
213
+
214
+ <p>Definition in file <a class="el" href="a00009_source.html">bitfield.hpp</a>.</p>
215
+ </div></div><!-- contents -->
216
+ <!-- start footer part -->
217
+ <hr class="footer"/><address class="footer"><small>
218
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
219
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
220
+ </a> 1.8.10
221
+ </small></address>
222
+ </body>
223
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00009_source.html ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: bitfield.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.html">gtc</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">bitfield.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00009.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;../detail/setup.hpp&quot;</span></div>
93
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div>
94
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#pragma once</span></div>
95
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
96
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// Dependencies</span></div>
97
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>
98
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>
99
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;../detail/qualifier.hpp&quot;</span></div>
100
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;../detail/_vectorize.hpp&quot;</span></div>
101
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="a00174.html">type_precision.hpp</a>&quot;</span></div>
102
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div>
103
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
104
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>
105
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTC_bitfield extension included&quot;)</span></div>
106
+ <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
107
+ <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
108
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
109
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
110
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
111
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
112
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">mask</a>(genIUType Bits);</div>
113
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
114
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
115
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">mask</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; v);</div>
116
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
117
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
118
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">bitfieldRotateRight</a>(genIUType In, <span class="keywordtype">int</span> Shift);</div>
119
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
120
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
121
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">bitfieldRotateRight</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; In, <span class="keywordtype">int</span> Shift);</div>
122
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
123
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
124
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#gae186317091b1a39214ebf79008d44a1e">bitfieldRotateLeft</a>(genIUType In, <span class="keywordtype">int</span> Shift);</div>
125
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
126
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
127
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00288.html#gae186317091b1a39214ebf79008d44a1e">bitfieldRotateLeft</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; In, <span class="keywordtype">int</span> Shift);</div>
128
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
129
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
130
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">bitfieldFillOne</a>(genIUType Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
131
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div>
132
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
133
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">bitfieldFillOne</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
134
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div>
135
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genIUType&gt;</div>
136
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">bitfieldFillZero</a>(genIUType Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
137
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
138
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
139
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">bitfieldFillZero</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
140
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div>
141
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; GLM_FUNC_DECL int16 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y);</div>
142
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div>
143
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; GLM_FUNC_DECL uint16 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y);</div>
144
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div>
145
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; GLM_FUNC_DECL uint16 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(<a class="code" href="a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611">u8vec2</a> <span class="keyword">const</span>&amp; v);</div>
146
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div>
147
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; GLM_FUNC_DECL <a class="code" href="a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611">glm::u8vec2</a> <a class="code" href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">bitfieldDeinterleave</a>(<a class="code" href="a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e">glm::uint16</a> x);</div>
148
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div>
149
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; GLM_FUNC_DECL int32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y);</div>
150
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div>
151
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; GLM_FUNC_DECL uint32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y);</div>
152
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div>
153
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; GLM_FUNC_DECL uint32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(<a class="code" href="a00304.html#ga2a78447eb9d66a114b193f4a25899c16">u16vec2</a> <span class="keyword">const</span>&amp; v);</div>
154
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div>
155
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; GLM_FUNC_DECL <a class="code" href="a00304.html#ga2a78447eb9d66a114b193f4a25899c16">glm::u16vec2</a> <a class="code" href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">bitfieldDeinterleave</a>(<a class="code" href="a00263.html#ga1134b580f8da4de94ca6b1de4d37975e">glm::uint32</a> x);</div>
156
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div>
157
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; GLM_FUNC_DECL <a class="code" href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int32 x, int32 y);</div>
158
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
159
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint32 x, uint32 y);</div>
160
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div>
161
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(<a class="code" href="a00304.html#ga2a266e46ee218d0c680f12b35c500cc0">u32vec2</a> <span class="keyword">const</span>&amp; v);</div>
162
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div>
163
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; GLM_FUNC_DECL <a class="code" href="a00304.html#ga2a266e46ee218d0c680f12b35c500cc0">glm::u32vec2</a> <a class="code" href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">bitfieldDeinterleave</a>(<a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a> x);</div>
164
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div>
165
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; GLM_FUNC_DECL int32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y, int8 z);</div>
166
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div>
167
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; GLM_FUNC_DECL uint32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z);</div>
168
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div>
169
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; GLM_FUNC_DECL <a class="code" href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y, int16 z);</div>
170
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div>
171
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z);</div>
172
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
173
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; GLM_FUNC_DECL <a class="code" href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int32 x, int32 y, int32 z);</div>
174
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div>
175
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint32 x, uint32 y, uint32 z);</div>
176
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div>
177
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; GLM_FUNC_DECL int32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y, int8 z, int8 w);</div>
178
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div>
179
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; GLM_FUNC_DECL uint32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z, uint8 w);</div>
180
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div>
181
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; GLM_FUNC_DECL <a class="code" href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y, int16 z, int16 w);</div>
182
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div>
183
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z, uint16 w);</div>
184
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div>
185
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;} <span class="comment">//namespace glm</span></div>
186
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div>
187
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor">#include &quot;bitfield.inl&quot;</span></div>
188
+ <div class="ttc" id="a00263_html_ga1134b580f8da4de94ca6b1de4d37975e"><div class="ttname"><a href="a00263.html#ga1134b580f8da4de94ca6b1de4d37975e">glm::uint32</a></div><div class="ttdeci">detail::uint32 uint32</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00151_source.html#l00064">scalar_uint_sized.hpp:64</a></div></div>
189
+ <div class="ttc" id="a00288_html_gafca8768671a14c8016facccb66a89f26"><div class="ttname"><a href="a00288.html#gafca8768671a14c8016facccb66a89f26">glm::bitfieldInterleave</a></div><div class="ttdeci">GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)</div><div class="ttdoc">Interleaves the bits of x, y, z and w. </div></div>
190
+ <div class="ttc" id="a00288_html_ga8dbb8c87092f33bd815dd8a840be5d60"><div class="ttname"><a href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">glm::bitfieldDeinterleave</a></div><div class="ttdeci">GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x)</div><div class="ttdoc">Deinterleaves the bits of x. </div></div>
191
+ <div class="ttc" id="a00288_html_ga0d16c9acef4be79ea9b47c082a0cf7c2"><div class="ttname"><a href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">glm::bitfieldFillZero</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldFillZero(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</div><div class="ttdoc">Set to 0 a range of bits. </div></div>
192
+ <div class="ttc" id="a00263_html_ga05f6b0ae8f6a6e135b0e290c25fe0e4e"><div class="ttname"><a href="a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e">glm::uint16</a></div><div class="ttdeci">detail::uint16 uint16</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00151_source.html#l00061">scalar_uint_sized.hpp:61</a></div></div>
193
+ <div class="ttc" id="a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611"><div class="ttname"><a href="a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611">glm::u8vec2</a></div><div class="ttdeci">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class="ttdoc">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00035_source.html#l00340">fwd.hpp:340</a></div></div>
194
+ <div class="ttc" id="a00288_html_gae186317091b1a39214ebf79008d44a1e"><div class="ttname"><a href="a00288.html#gae186317091b1a39214ebf79008d44a1e">glm::bitfieldRotateLeft</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldRotateLeft(vec&lt; L, T, Q &gt; const &amp;In, int Shift)</div><div class="ttdoc">Rotate all bits to the left. </div></div>
195
+ <div class="ttc" id="a00288_html_ga2e64e3b922a296033b825311e7f5fff1"><div class="ttname"><a href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">glm::mask</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; mask(vec&lt; L, T, Q &gt; const &amp;v)</div><div class="ttdoc">Build a mask of &#39;count&#39; bits. </div></div>
196
+ <div class="ttc" id="a00263_html_gab630f76c26b50298187f7889104d4b9c"><div class="ttname"><a href="a00263.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a></div><div class="ttdeci">detail::uint64 uint64</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00151_source.html#l00067">scalar_uint_sized.hpp:67</a></div></div>
197
+ <div class="ttc" id="a00288_html_ga3e96dd1f0a4bc892f063251ed118c0c1"><div class="ttname"><a href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">glm::bitfieldFillOne</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldFillOne(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</div><div class="ttdoc">Set to 1 a range of bits. </div></div>
198
+ <div class="ttc" id="a00174_html"><div class="ttname"><a href="a00174.html">type_precision.hpp</a></div><div class="ttdoc">GLM_GTC_type_precision </div></div>
199
+ <div class="ttc" id="a00260_html_gaff5189f97f9e842d9636a0f240001b2e"><div class="ttname"><a href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">glm::int64</a></div><div class="ttdeci">detail::int64 int64</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00146_source.html#l00067">scalar_int_sized.hpp:67</a></div></div>
200
+ <div class="ttc" id="a00304_html_ga2a266e46ee218d0c680f12b35c500cc0"><div class="ttname"><a href="a00304.html#ga2a266e46ee218d0c680f12b35c500cc0">glm::u32vec2</a></div><div class="ttdeci">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class="ttdoc">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00035_source.html#l00380">fwd.hpp:380</a></div></div>
201
+ <div class="ttc" id="a00288_html_ga590488e1fc00a6cfe5d3bcaf93fbfe88"><div class="ttname"><a href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">glm::bitfieldRotateRight</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldRotateRight(vec&lt; L, T, Q &gt; const &amp;In, int Shift)</div><div class="ttdoc">Rotate all bits to the right. </div></div>
202
+ <div class="ttc" id="a00304_html_ga2a78447eb9d66a114b193f4a25899c16"><div class="ttname"><a href="a00304.html#ga2a78447eb9d66a114b193f4a25899c16">glm::u16vec2</a></div><div class="ttdeci">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class="ttdoc">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00035_source.html#l00360">fwd.hpp:360</a></div></div>
203
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
204
+ </div><!-- fragment --></div><!-- contents -->
205
+ <!-- start footer part -->
206
+ <hr class="footer"/><address class="footer"><small>
207
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
208
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
209
+ </a> 1.8.10
210
+ </small></address>
211
+ </body>
212
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00010.html ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: closest_point.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">closest_point.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00310.html">GLM_GTX_closest_point</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00010_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:ga36529c278ef716986151d58d151d697d"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
102
+ <tr class="memitem:ga36529c278ef716986151d58d151d697d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00310.html#ga36529c278ef716986151d58d151d697d">closestPointOnLine</a> (vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)</td></tr>
103
+ <tr class="memdesc:ga36529c278ef716986151d58d151d697d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find the point on a straight line which is the closet of a point. <a href="a00310.html#ga36529c278ef716986151d58d151d697d">More...</a><br /></td></tr>
104
+ <tr class="separator:ga36529c278ef716986151d58d151d697d"><td class="memSeparator" colspan="2">&#160;</td></tr>
105
+ <tr class="memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"></a>
106
+ template&lt;typename T , qualifier Q&gt; </td></tr>
107
+ <tr class="memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a> (vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)</td></tr>
108
+ <tr class="memdesc:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">2d lines work as well <br /></td></tr>
109
+ <tr class="separator:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
110
+ </table>
111
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
112
+ <div class="textblock"><p><a class="el" href="a00310.html">GLM_GTX_closest_point</a> </p>
113
+ <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
114
+
115
+ <p>Definition in file <a class="el" href="a00010_source.html">closest_point.hpp</a>.</p>
116
+ </div></div><!-- contents -->
117
+ <!-- start footer part -->
118
+ <hr class="footer"/><address class="footer"><small>
119
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
120
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
121
+ </a> 1.8.10
122
+ </small></address>
123
+ </body>
124
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00010_source.html ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: closest_point.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">closest_point.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00010.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#pragma once</span></div>
93
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
94
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// Dependency:</span></div>
95
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;../glm.hpp&quot;</span></div>
96
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
97
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>
98
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
99
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>
100
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor"># else</span></div>
101
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_closest_point extension included&quot;)</span></div>
102
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor"># endif</span></div>
103
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div>
104
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
105
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
106
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
107
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
108
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
109
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a>(</div>
110
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; point,</div>
111
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; a,</div>
112
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; b);</div>
113
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
114
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
115
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class="code" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a>(</div>
116
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; point,</div>
117
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; a,</div>
118
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; vec&lt;2, T, Q&gt; <span class="keyword">const</span>&amp; b);</div>
119
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
120
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}<span class="comment">// namespace glm</span></div>
121
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
122
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &quot;closest_point.inl&quot;</span></div>
123
+ <div class="ttc" id="a00310_html_ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><div class="ttname"><a href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">glm::closestPointOnLine</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 2, T, Q &gt; closestPointOnLine(vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)</div><div class="ttdoc">2d lines work as well </div></div>
124
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
125
+ </div><!-- fragment --></div><!-- contents -->
126
+ <!-- start footer part -->
127
+ <hr class="footer"/><address class="footer"><small>
128
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
129
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
130
+ </a> 1.8.10
131
+ </small></address>
132
+ </body>
133
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00011.html ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: color_encoding.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">color_encoding.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00311.html">GLM_GTX_color_encoding</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00011_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad12f4f65022b2c80e33fcba2ced0dc48"></a>
102
+ template&lt;typename T , qualifier Q&gt; </td></tr>
103
+ <tr class="memitem:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48">convertD65XYZToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>
104
+ <tr class="memdesc:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a D65 YUV color to D50 YUV. <br /></td></tr>
105
+ <tr class="separator:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="memSeparator" colspan="2">&#160;</td></tr>
106
+ <tr class="memitem:ga5265386fc3ac29e4c580d37ed470859c"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5265386fc3ac29e4c580d37ed470859c"></a>
107
+ template&lt;typename T , qualifier Q&gt; </td></tr>
108
+ <tr class="memitem:ga5265386fc3ac29e4c580d37ed470859c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#ga5265386fc3ac29e4c580d37ed470859c">convertD65XYZToLinearSRGB</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>
109
+ <tr class="memdesc:ga5265386fc3ac29e4c580d37ed470859c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a D65 YUV color to linear sRGB. <br /></td></tr>
110
+ <tr class="separator:ga5265386fc3ac29e4c580d37ed470859c"><td class="memSeparator" colspan="2">&#160;</td></tr>
111
+ <tr class="memitem:ga1522ba180e3d83d554a734056da031f9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1522ba180e3d83d554a734056da031f9"></a>
112
+ template&lt;typename T , qualifier Q&gt; </td></tr>
113
+ <tr class="memitem:ga1522ba180e3d83d554a734056da031f9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#ga1522ba180e3d83d554a734056da031f9">convertLinearSRGBToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>
114
+ <tr class="memdesc:ga1522ba180e3d83d554a734056da031f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a linear sRGB color to D50 YUV. <br /></td></tr>
115
+ <tr class="separator:ga1522ba180e3d83d554a734056da031f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
116
+ <tr class="memitem:gaf9e130d9d4ccf51cc99317de7449f369"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf9e130d9d4ccf51cc99317de7449f369"></a>
117
+ template&lt;typename T , qualifier Q&gt; </td></tr>
118
+ <tr class="memitem:gaf9e130d9d4ccf51cc99317de7449f369"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#gaf9e130d9d4ccf51cc99317de7449f369">convertLinearSRGBToD65XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>
119
+ <tr class="memdesc:gaf9e130d9d4ccf51cc99317de7449f369"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a linear sRGB color to D65 YUV. <br /></td></tr>
120
+ <tr class="separator:gaf9e130d9d4ccf51cc99317de7449f369"><td class="memSeparator" colspan="2">&#160;</td></tr>
121
+ </table>
122
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
123
+ <div class="textblock"><p><a class="el" href="a00311.html">GLM_GTX_color_encoding</a> </p>
124
+ <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
125
+ <dd>
126
+ <a class="el" href="a00311.html" title="Include <glm/gtx/color_encoding.hpp> to use the features of this extension. ">GLM_GTX_color_encoding</a> (dependence) </dd></dl>
127
+
128
+ <p>Definition in file <a class="el" href="a00011_source.html">color_encoding.hpp</a>.</p>
129
+ </div></div><!-- contents -->
130
+ <!-- start footer part -->
131
+ <hr class="footer"/><address class="footer"><small>
132
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
133
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
134
+ </a> 1.8.10
135
+ </small></address>
136
+ </body>
137
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00011_source.html ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: color_encoding.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">color_encoding.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00011.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#pragma once</span></div>
93
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div>
94
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// Dependencies</span></div>
95
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;../detail/setup.hpp&quot;</span></div>
96
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../detail/qualifier.hpp&quot;</span></div>
97
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;../vec3.hpp&quot;</span></div>
98
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div>
99
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
100
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>
101
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
102
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>
103
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"># else</span></div>
104
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTC_color_encoding extension included&quot;)</span></div>
105
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor"># endif</span></div>
106
+ <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
107
+ <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
108
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
109
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
110
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
111
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
112
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00311.html#gaf9e130d9d4ccf51cc99317de7449f369">convertLinearSRGBToD65XYZ</a>(vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; ColorLinearSRGB);</div>
113
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
114
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
115
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00311.html#ga1522ba180e3d83d554a734056da031f9">convertLinearSRGBToD50XYZ</a>(vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; ColorLinearSRGB);</div>
116
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
117
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
118
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00311.html#ga5265386fc3ac29e4c580d37ed470859c">convertD65XYZToLinearSRGB</a>(vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; ColorD65XYZ);</div>
119
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
120
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
121
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48">convertD65XYZToD50XYZ</a>(vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; ColorD65XYZ);</div>
122
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
123
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;} <span class="comment">//namespace glm</span></div>
124
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
125
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &quot;color_encoding.inl&quot;</span></div>
126
+ <div class="ttc" id="a00311_html_ga5265386fc3ac29e4c580d37ed470859c"><div class="ttname"><a href="a00311.html#ga5265386fc3ac29e4c580d37ed470859c">glm::convertD65XYZToLinearSRGB</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertD65XYZToLinearSRGB(vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</div><div class="ttdoc">Convert a D65 YUV color to linear sRGB. </div></div>
127
+ <div class="ttc" id="a00311_html_ga1522ba180e3d83d554a734056da031f9"><div class="ttname"><a href="a00311.html#ga1522ba180e3d83d554a734056da031f9">glm::convertLinearSRGBToD50XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertLinearSRGBToD50XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</div><div class="ttdoc">Convert a linear sRGB color to D50 YUV. </div></div>
128
+ <div class="ttc" id="a00311_html_gaf9e130d9d4ccf51cc99317de7449f369"><div class="ttname"><a href="a00311.html#gaf9e130d9d4ccf51cc99317de7449f369">glm::convertLinearSRGBToD65XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertLinearSRGBToD65XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</div><div class="ttdoc">Convert a linear sRGB color to D65 YUV. </div></div>
129
+ <div class="ttc" id="a00311_html_gad12f4f65022b2c80e33fcba2ced0dc48"><div class="ttname"><a href="a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48">glm::convertD65XYZToD50XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertD65XYZToD50XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</div><div class="ttdoc">Convert a D65 YUV color to D50 YUV. </div></div>
130
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
131
+ </div><!-- fragment --></div><!-- contents -->
132
+ <!-- start footer part -->
133
+ <hr class="footer"/><address class="footer"><small>
134
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
135
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
136
+ </a> 1.8.10
137
+ </small></address>
138
+ </body>
139
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00012.html ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: color_space.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.html">gtc</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">gtc/color_space.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00289.html">GLM_GTC_color_space</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00012_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:ga42239e7b3da900f7ef37cec7e2476579"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
102
+ <tr class="memitem:ga42239e7b3da900f7ef37cec7e2476579"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#ga42239e7b3da900f7ef37cec7e2476579">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear)</td></tr>
103
+ <tr class="memdesc:ga42239e7b3da900f7ef37cec7e2476579"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a linear color to sRGB color using a standard gamma correction. <a href="a00289.html#ga42239e7b3da900f7ef37cec7e2476579">More...</a><br /></td></tr>
104
+ <tr class="separator:ga42239e7b3da900f7ef37cec7e2476579"><td class="memSeparator" colspan="2">&#160;</td></tr>
105
+ <tr class="memitem:gaace0a21167d13d26116c283009af57f6"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
106
+ <tr class="memitem:gaace0a21167d13d26116c283009af57f6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)</td></tr>
107
+ <tr class="memdesc:gaace0a21167d13d26116c283009af57f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a linear color to sRGB color using a custom gamma correction. <a href="a00289.html#gaace0a21167d13d26116c283009af57f6">More...</a><br /></td></tr>
108
+ <tr class="separator:gaace0a21167d13d26116c283009af57f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
109
+ <tr class="memitem:ga16c798b7a226b2c3079dedc55083d187"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
110
+ <tr class="memitem:ga16c798b7a226b2c3079dedc55083d187"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#ga16c798b7a226b2c3079dedc55083d187">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB)</td></tr>
111
+ <tr class="memdesc:ga16c798b7a226b2c3079dedc55083d187"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a sRGB color to linear color using a standard gamma correction. <a href="a00289.html#ga16c798b7a226b2c3079dedc55083d187">More...</a><br /></td></tr>
112
+ <tr class="separator:ga16c798b7a226b2c3079dedc55083d187"><td class="memSeparator" colspan="2">&#160;</td></tr>
113
+ <tr class="memitem:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad1b91f27a9726c9cb403f9fee6e2e200"></a>
114
+ template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
115
+ <tr class="memitem:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)</td></tr>
116
+ <tr class="memdesc:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a sRGB color to linear color using a custom gamma correction. <br /></td></tr>
117
+ <tr class="separator:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="memSeparator" colspan="2">&#160;</td></tr>
118
+ </table>
119
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
120
+ <div class="textblock"><p><a class="el" href="a00289.html">GLM_GTC_color_space</a> </p>
121
+ <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
122
+ <dd>
123
+ <a class="el" href="a00289.html" title="Include <glm/gtc/color_space.hpp> to use the features of this extension. ">GLM_GTC_color_space</a> (dependence) </dd></dl>
124
+
125
+ <p>Definition in file <a class="el" href="a00012_source.html">gtc/color_space.hpp</a>.</p>
126
+ </div></div><!-- contents -->
127
+ <!-- start footer part -->
128
+ <hr class="footer"/><address class="footer"><small>
129
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
130
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
131
+ </a> 1.8.10
132
+ </small></address>
133
+ </body>
134
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00012_source.html ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: color_space.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.html">gtc</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">gtc/color_space.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00012.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#pragma once</span></div>
93
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div>
94
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// Dependencies</span></div>
95
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;../detail/setup.hpp&quot;</span></div>
96
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../detail/qualifier.hpp&quot;</span></div>
97
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;../exponential.hpp&quot;</span></div>
98
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;../vec3.hpp&quot;</span></div>
99
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;../vec4.hpp&quot;</span></div>
100
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div>
101
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div>
102
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>
103
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTC_color_space extension included&quot;)</span></div>
104
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</span></div>
105
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
106
+ <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
107
+ <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
108
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
109
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
110
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; ColorLinear);</div>
111
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
112
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
113
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; ColorLinear, T Gamma);</div>
114
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
115
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
116
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; ColorSRGB);</div>
117
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
118
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb</span></div>
119
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
120
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; ColorSRGB, T Gamma);</div>
121
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
122
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;} <span class="comment">//namespace glm</span></div>
123
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
124
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &quot;color_space.inl&quot;</span></div>
125
+ <div class="ttc" id="a00289_html_gaace0a21167d13d26116c283009af57f6"><div class="ttname"><a href="a00289.html#gaace0a21167d13d26116c283009af57f6">glm::convertLinearToSRGB</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)</div><div class="ttdoc">Convert a linear color to sRGB color using a custom gamma correction. </div></div>
126
+ <div class="ttc" id="a00289_html_gad1b91f27a9726c9cb403f9fee6e2e200"><div class="ttname"><a href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">glm::convertSRGBToLinear</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)</div><div class="ttdoc">Convert a sRGB color to linear color using a custom gamma correction. </div></div>
127
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
128
+ </div><!-- fragment --></div><!-- contents -->
129
+ <!-- start footer part -->
130
+ <hr class="footer"/><address class="footer"><small>
131
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
132
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
133
+ </a> 1.8.10
134
+ </small></address>
135
+ </body>
136
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00013.html ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: color_space.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">gtx/color_space.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00312.html">GLM_GTX_color_space</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00013_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
102
+ <tr class="memitem:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">hsvColor</a> (vec&lt; 3, T, Q &gt; const &amp;rgbValue)</td></tr>
103
+ <tr class="memdesc:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a color from RGB color space to its color in HSV color space. <a href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">More...</a><br /></td></tr>
104
+ <tr class="separator:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
105
+ <tr class="memitem:gad028e0a4f1a9c812b39439b746295b34"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
106
+ <tr class="memitem:gad028e0a4f1a9c812b39439b746295b34"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">luminosity</a> (vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>
107
+ <tr class="memdesc:gad028e0a4f1a9c812b39439b746295b34"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. <a href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">More...</a><br /></td></tr>
108
+ <tr class="separator:gad028e0a4f1a9c812b39439b746295b34"><td class="memSeparator" colspan="2">&#160;</td></tr>
109
+ <tr class="memitem:ga5f9193be46f45f0655c05a0cdca006db"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
110
+ <tr class="memitem:ga5f9193be46f45f0655c05a0cdca006db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a> (vec&lt; 3, T, Q &gt; const &amp;hsvValue)</td></tr>
111
+ <tr class="memdesc:ga5f9193be46f45f0655c05a0cdca006db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a color from HSV color space to its color in RGB color space. <a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">More...</a><br /></td></tr>
112
+ <tr class="separator:ga5f9193be46f45f0655c05a0cdca006db"><td class="memSeparator" colspan="2">&#160;</td></tr>
113
+ <tr class="memitem:ga01a97152b44e1550edcac60bd849e884"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
114
+ <tr class="memitem:ga01a97152b44e1550edcac60bd849e884"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga01a97152b44e1550edcac60bd849e884">saturation</a> (T const s)</td></tr>
115
+ <tr class="memdesc:ga01a97152b44e1550edcac60bd849e884"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build a saturation matrix. <a href="a00312.html#ga01a97152b44e1550edcac60bd849e884">More...</a><br /></td></tr>
116
+ <tr class="separator:ga01a97152b44e1550edcac60bd849e884"><td class="memSeparator" colspan="2">&#160;</td></tr>
117
+ <tr class="memitem:ga2156cea600e90148ece5bc96fd6db43a"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
118
+ <tr class="memitem:ga2156cea600e90148ece5bc96fd6db43a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga2156cea600e90148ece5bc96fd6db43a">saturation</a> (T const s, vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>
119
+ <tr class="memdesc:ga2156cea600e90148ece5bc96fd6db43a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Modify the saturation of a color. <a href="a00312.html#ga2156cea600e90148ece5bc96fd6db43a">More...</a><br /></td></tr>
120
+ <tr class="separator:ga2156cea600e90148ece5bc96fd6db43a"><td class="memSeparator" colspan="2">&#160;</td></tr>
121
+ <tr class="memitem:gaba0eacee0736dae860e9371cc1ae4785"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
122
+ <tr class="memitem:gaba0eacee0736dae860e9371cc1ae4785"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a> (T const s, vec&lt; 4, T, Q &gt; const &amp;color)</td></tr>
123
+ <tr class="memdesc:gaba0eacee0736dae860e9371cc1ae4785"><td class="mdescLeft">&#160;</td><td class="mdescRight">Modify the saturation of a color. <a href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">More...</a><br /></td></tr>
124
+ <tr class="separator:gaba0eacee0736dae860e9371cc1ae4785"><td class="memSeparator" colspan="2">&#160;</td></tr>
125
+ </table>
126
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
127
+ <div class="textblock"><p><a class="el" href="a00312.html">GLM_GTX_color_space</a> </p>
128
+ <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
129
+
130
+ <p>Definition in file <a class="el" href="a00013_source.html">gtx/color_space.hpp</a>.</p>
131
+ </div></div><!-- contents -->
132
+ <!-- start footer part -->
133
+ <hr class="footer"/><address class="footer"><small>
134
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
135
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
136
+ </a> 1.8.10
137
+ </small></address>
138
+ </body>
139
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00013_source.html ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: color_space.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">gtx/color_space.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00013.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#pragma once</span></div>
93
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
94
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// Dependency:</span></div>
95
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;../glm.hpp&quot;</span></div>
96
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
97
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>
98
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
99
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>
100
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor"># else</span></div>
101
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_color_space extension included&quot;)</span></div>
102
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor"># endif</span></div>
103
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div>
104
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
105
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
106
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
107
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
108
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
109
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a>(</div>
110
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; hsvValue);</div>
111
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
112
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
113
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">hsvColor</a>(</div>
114
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; rgbValue);</div>
115
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
116
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
117
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a>(</div>
118
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; T <span class="keyword">const</span> s);</div>
119
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
120
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
121
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a>(</div>
122
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; T <span class="keyword">const</span> s,</div>
123
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; color);</div>
124
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
125
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
126
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a>(</div>
127
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; T <span class="keyword">const</span> s,</div>
128
+ <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; vec&lt;4, T, Q&gt; <span class="keyword">const</span>&amp; color);</div>
129
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div>
130
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
131
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; GLM_FUNC_DECL T <a class="code" href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">luminosity</a>(</div>
132
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; color);</div>
133
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
134
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}<span class="comment">//namespace glm</span></div>
135
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
136
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#include &quot;color_space.inl&quot;</span></div>
137
+ <div class="ttc" id="a00312_html_gad028e0a4f1a9c812b39439b746295b34"><div class="ttname"><a href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">glm::luminosity</a></div><div class="ttdeci">GLM_FUNC_DECL T luminosity(vec&lt; 3, T, Q &gt; const &amp;color)</div><div class="ttdoc">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </div></div>
138
+ <div class="ttc" id="a00312_html_gaba0eacee0736dae860e9371cc1ae4785"><div class="ttname"><a href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">glm::saturation</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; saturation(T const s, vec&lt; 4, T, Q &gt; const &amp;color)</div><div class="ttdoc">Modify the saturation of a color. </div></div>
139
+ <div class="ttc" id="a00312_html_ga5f9193be46f45f0655c05a0cdca006db"><div class="ttname"><a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">glm::rgbColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgbColor(vec&lt; 3, T, Q &gt; const &amp;hsvValue)</div><div class="ttdoc">Converts a color from HSV color space to its color in RGB color space. </div></div>
140
+ <div class="ttc" id="a00312_html_ga789802bec2d4fe0f9741c731b4a8a7d8"><div class="ttname"><a href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">glm::hsvColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; hsvColor(vec&lt; 3, T, Q &gt; const &amp;rgbValue)</div><div class="ttdoc">Converts a color from RGB color space to its color in HSV color space. </div></div>
141
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
142
+ </div><!-- fragment --></div><!-- contents -->
143
+ <!-- start footer part -->
144
+ <hr class="footer"/><address class="footer"><small>
145
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
146
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
147
+ </a> 1.8.10
148
+ </small></address>
149
+ </body>
150
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00014.html ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: color_space_YCoCg.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">color_space_YCoCg.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00313.html">GLM_GTX_color_space_YCoCg</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00014_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
102
+ <tr class="memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">rgb2YCoCg</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>
103
+ <tr class="memdesc:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a color from RGB color space to YCoCg color space. <a href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">More...</a><br /></td></tr>
104
+ <tr class="separator:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
105
+ <tr class="memitem:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
106
+ <tr class="memitem:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">rgb2YCoCgR</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>
107
+ <tr class="memdesc:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a color from RGB color space to YCoCgR color space. <a href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">More...</a><br /></td></tr>
108
+ <tr class="separator:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memSeparator" colspan="2">&#160;</td></tr>
109
+ <tr class="memitem:ga163596b804c7241810b2534a99eb1343"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
110
+ <tr class="memitem:ga163596b804c7241810b2534a99eb1343"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga163596b804c7241810b2534a99eb1343">YCoCg2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>
111
+ <tr class="memdesc:ga163596b804c7241810b2534a99eb1343"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a color from YCoCg color space to RGB color space. <a href="a00313.html#ga163596b804c7241810b2534a99eb1343">More...</a><br /></td></tr>
112
+ <tr class="separator:ga163596b804c7241810b2534a99eb1343"><td class="memSeparator" colspan="2">&#160;</td></tr>
113
+ <tr class="memitem:gaf8d30574c8576838097d8e20c295384a"><td class="memTemplParams" colspan="2">template&lt;typename T , qualifier Q&gt; </td></tr>
114
+ <tr class="memitem:gaf8d30574c8576838097d8e20c295384a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#gaf8d30574c8576838097d8e20c295384a">YCoCgR2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>
115
+ <tr class="memdesc:gaf8d30574c8576838097d8e20c295384a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a color from YCoCgR color space to RGB color space. <a href="a00313.html#gaf8d30574c8576838097d8e20c295384a">More...</a><br /></td></tr>
116
+ <tr class="separator:gaf8d30574c8576838097d8e20c295384a"><td class="memSeparator" colspan="2">&#160;</td></tr>
117
+ </table>
118
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
119
+ <div class="textblock"><p><a class="el" href="a00313.html">GLM_GTX_color_space_YCoCg</a> </p>
120
+ <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
121
+
122
+ <p>Definition in file <a class="el" href="a00014_source.html">color_space_YCoCg.hpp</a>.</p>
123
+ </div></div><!-- contents -->
124
+ <!-- start footer part -->
125
+ <hr class="footer"/><address class="footer"><small>
126
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
127
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
128
+ </a> 1.8.10
129
+ </small></address>
130
+ </body>
131
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00014_source.html ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: color_space_YCoCg.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">color_space_YCoCg.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00014.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#pragma once</span></div>
93
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
94
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// Dependency:</span></div>
95
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;../glm.hpp&quot;</span></div>
96
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
97
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>
98
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
99
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>
100
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor"># else</span></div>
101
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: GLM_GTX_color_space_YCoCg extension included&quot;)</span></div>
102
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor"># endif</span></div>
103
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div>
104
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
105
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
106
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
107
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
108
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
109
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">rgb2YCoCg</a>(</div>
110
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; <a class="code" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a>);</div>
111
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
112
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
113
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00313.html#ga163596b804c7241810b2534a99eb1343">YCoCg2rgb</a>(</div>
114
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; YCoCgColor);</div>
115
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
116
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
117
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">rgb2YCoCgR</a>(</div>
118
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; <a class="code" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a>);</div>
119
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div>
120
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, qualifier Q&gt;</div>
121
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class="code" href="a00313.html#gaf8d30574c8576838097d8e20c295384a">YCoCgR2rgb</a>(</div>
122
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; vec&lt;3, T, Q&gt; <span class="keyword">const</span>&amp; YCoCgColor);</div>
123
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
124
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}<span class="comment">//namespace glm</span></div>
125
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
126
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#include &quot;color_space_YCoCg.inl&quot;</span></div>
127
+ <div class="ttc" id="a00313_html_gaf8d30574c8576838097d8e20c295384a"><div class="ttname"><a href="a00313.html#gaf8d30574c8576838097d8e20c295384a">glm::YCoCgR2rgb</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; YCoCgR2rgb(vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</div><div class="ttdoc">Convert a color from YCoCgR color space to RGB color space. </div></div>
128
+ <div class="ttc" id="a00313_html_ga163596b804c7241810b2534a99eb1343"><div class="ttname"><a href="a00313.html#ga163596b804c7241810b2534a99eb1343">glm::YCoCg2rgb</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; YCoCg2rgb(vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</div><div class="ttdoc">Convert a color from YCoCg color space to RGB color space. </div></div>
129
+ <div class="ttc" id="a00312_html_ga5f9193be46f45f0655c05a0cdca006db"><div class="ttname"><a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">glm::rgbColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgbColor(vec&lt; 3, T, Q &gt; const &amp;hsvValue)</div><div class="ttdoc">Converts a color from HSV color space to its color in RGB color space. </div></div>
130
+ <div class="ttc" id="a00313_html_ga0606353ec2a9b9eaa84f1b02ec391bc5"><div class="ttname"><a href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">glm::rgb2YCoCg</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgb2YCoCg(vec&lt; 3, T, Q &gt; const &amp;rgbColor)</div><div class="ttdoc">Convert a color from RGB color space to YCoCg color space. </div></div>
131
+ <div class="ttc" id="a00313_html_ga0389772e44ca0fd2ba4a79bdd8efe898"><div class="ttname"><a href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">glm::rgb2YCoCgR</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgb2YCoCgR(vec&lt; 3, T, Q &gt; const &amp;rgbColor)</div><div class="ttdoc">Convert a color from RGB color space to YCoCgR color space. </div></div>
132
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
133
+ </div><!-- fragment --></div><!-- contents -->
134
+ <!-- start footer part -->
135
+ <hr class="footer"/><address class="footer"><small>
136
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
137
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
138
+ </a> 1.8.10
139
+ </small></address>
140
+ </body>
141
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00015.html ADDED
@@ -0,0 +1,267 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: common.hpp File Reference</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="summary">
88
+ <a href="#func-members">Functions</a> </div>
89
+ <div class="headertitle">
90
+ <div class="title">common.hpp File Reference</div> </div>
91
+ </div><!--header-->
92
+ <div class="contents">
93
+
94
+ <p><a class="el" href="a00280.html">Core features</a>
95
+ <a href="#details">More...</a></p>
96
+
97
+ <p><a href="a00015_source.html">Go to the source code of this file.</a></p>
98
+ <table class="memberdecls">
99
+ <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
100
+ Functions</h2></td></tr>
101
+ <tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
102
+ <tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga439e60a72eadecfeda2df5449c613a64">abs</a> (genType x)</td></tr>
103
+ <tr class="memdesc:ga439e60a72eadecfeda2df5449c613a64"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns x if x &gt;= 0; otherwise, it returns -x. <a href="a00241.html#ga439e60a72eadecfeda2df5449c613a64">More...</a><br /></td></tr>
104
+ <tr class="separator:ga439e60a72eadecfeda2df5449c613a64"><td class="memSeparator" colspan="2">&#160;</td></tr>
105
+ <tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
106
+ <tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
107
+ <tr class="memdesc:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns x if x &gt;= 0; otherwise, it returns -x. <a href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">More...</a><br /></td></tr>
108
+ <tr class="separator:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memSeparator" colspan="2">&#160;</td></tr>
109
+ <tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
110
+ <tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">ceil</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
111
+ <tr class="memdesc:gafb9d2a645a23aca12d4d6de0104b7657"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a value equal to the nearest integer that is greater than or equal to x. <a href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">More...</a><br /></td></tr>
112
+ <tr class="separator:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memSeparator" colspan="2">&#160;</td></tr>
113
+ <tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
114
+ <tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>
115
+ <tr class="memdesc:ga7cd77683da6361e297c56443fc70806d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#ga7cd77683da6361e297c56443fc70806d">More...</a><br /></td></tr>
116
+ <tr class="separator:ga7cd77683da6361e297c56443fc70806d"><td class="memSeparator" colspan="2">&#160;</td></tr>
117
+ <tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
118
+ <tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafba2e0674deb5953878d89483cd6323d">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>
119
+ <tr class="memdesc:gafba2e0674deb5953878d89483cd6323d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#gafba2e0674deb5953878d89483cd6323d">More...</a><br /></td></tr>
120
+ <tr class="separator:gafba2e0674deb5953878d89483cd6323d"><td class="memSeparator" colspan="2">&#160;</td></tr>
121
+ <tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
122
+ <tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>
123
+ <tr class="memdesc:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">More...</a><br /></td></tr>
124
+ <tr class="separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
125
+ <tr class="memitem:ga1425c1c3160ec51214b03a0469a3013d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga1425c1c3160ec51214b03a0469a3013d">floatBitsToInt</a> (float const &amp;v)</td></tr>
126
+ <tr class="memdesc:ga1425c1c3160ec51214b03a0469a3013d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a signed integer value representing the encoding of a floating-point value. <a href="a00241.html#ga1425c1c3160ec51214b03a0469a3013d">More...</a><br /></td></tr>
127
+ <tr class="separator:ga1425c1c3160ec51214b03a0469a3013d"><td class="memSeparator" colspan="2">&#160;</td></tr>
128
+ <tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplParams" colspan="2">template&lt;length_t L, qualifier Q&gt; </td></tr>
129
+ <tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>
130
+ <tr class="memdesc:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a signed integer value representing the encoding of a floating-point value. <a href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">More...</a><br /></td></tr>
131
+ <tr class="separator:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
132
+ <tr class="memitem:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga70e0271c34af52f3100c7960e18c3f2b">floatBitsToUint</a> (float const &amp;v)</td></tr>
133
+ <tr class="memdesc:ga70e0271c34af52f3100c7960e18c3f2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a unsigned integer value representing the encoding of a floating-point value. <a href="a00241.html#ga70e0271c34af52f3100c7960e18c3f2b">More...</a><br /></td></tr>
134
+ <tr class="separator:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
135
+ <tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplParams" colspan="2">template&lt;length_t L, qualifier Q&gt; </td></tr>
136
+ <tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>
137
+ <tr class="memdesc:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a unsigned integer value representing the encoding of a floating-point value. <a href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">More...</a><br /></td></tr>
138
+ <tr class="separator:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memSeparator" colspan="2">&#160;</td></tr>
139
+ <tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
140
+ <tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
141
+ <tr class="memdesc:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a value equal to the nearest integer that is less then or equal to x. <a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">More...</a><br /></td></tr>
142
+ <tr class="separator:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memSeparator" colspan="2">&#160;</td></tr>
143
+ <tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
144
+ <tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a> (genType const &amp;a, genType const &amp;b, genType const &amp;c)</td></tr>
145
+ <tr class="memdesc:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes and returns a * b + c. <a href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">More...</a><br /></td></tr>
146
+ <tr class="separator:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
147
+ <tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
148
+ <tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a> (genType x)</td></tr>
149
+ <tr class="memdesc:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return x - floor(x). <a href="a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7">More...</a><br /></td></tr>
150
+ <tr class="separator:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
151
+ <tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
152
+ <tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
153
+ <tr class="memdesc:ga2df623004f634b440d61e018d62c751b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return x - floor(x). <a href="a00241.html#ga2df623004f634b440d61e018d62c751b">More...</a><br /></td></tr>
154
+ <tr class="separator:ga2df623004f634b440d61e018d62c751b"><td class="memSeparator" colspan="2">&#160;</td></tr>
155
+ <tr class="memitem:gaddf5ef73283c171730e0bcc11833fa81"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
156
+ <tr class="memitem:gaddf5ef73283c171730e0bcc11833fa81"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a> (genType x, int &amp;exp)</td></tr>
157
+ <tr class="memdesc:gaddf5ef73283c171730e0bcc11833fa81"><td class="mdescLeft">&#160;</td><td class="mdescRight">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) <a href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">More...</a><br /></td></tr>
158
+ <tr class="separator:gaddf5ef73283c171730e0bcc11833fa81"><td class="memSeparator" colspan="2">&#160;</td></tr>
159
+ <tr class="memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">intBitsToFloat</a> (int const &amp;v)</td></tr>
160
+ <tr class="memdesc:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. <a href="a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">More...</a><br /></td></tr>
161
+ <tr class="separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
162
+ <tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplParams" colspan="2">template&lt;length_t L, qualifier Q&gt; </td></tr>
163
+ <tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a> (vec&lt; L, int, Q &gt; const &amp;v)</td></tr>
164
+ <tr class="memdesc:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. <a href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">More...</a><br /></td></tr>
165
+ <tr class="separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
166
+ <tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
167
+ <tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga2885587c23a106301f20443896365b62">isinf</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
168
+ <tr class="memdesc:ga2885587c23a106301f20443896365b62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. <a href="a00241.html#ga2885587c23a106301f20443896365b62">More...</a><br /></td></tr>
169
+ <tr class="separator:ga2885587c23a106301f20443896365b62"><td class="memSeparator" colspan="2">&#160;</td></tr>
170
+ <tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
171
+ <tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga29ef934c00306490de837b4746b4e14d">isnan</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
172
+ <tr class="memdesc:ga29ef934c00306490de837b4746b4e14d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. <a href="a00241.html#ga29ef934c00306490de837b4746b4e14d">More...</a><br /></td></tr>
173
+ <tr class="separator:ga29ef934c00306490de837b4746b4e14d"><td class="memSeparator" colspan="2">&#160;</td></tr>
174
+ <tr class="memitem:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
175
+ <tr class="memitem:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a> (genType const &amp;x, int const &amp;exp)</td></tr>
176
+ <tr class="memdesc:gac3010e0a0c35a1b514540f2fb579c58c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) <a href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">More...</a><br /></td></tr>
177
+ <tr class="separator:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memSeparator" colspan="2">&#160;</td></tr>
178
+ <tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
179
+ <tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gae02d42887fc5570451f880e3c624b9ac">max</a> (genType x, genType y)</td></tr>
180
+ <tr class="memdesc:gae02d42887fc5570451f880e3c624b9ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns y if x &lt; y; otherwise, it returns x. <a href="a00241.html#gae02d42887fc5570451f880e3c624b9ac">More...</a><br /></td></tr>
181
+ <tr class="separator:gae02d42887fc5570451f880e3c624b9ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
182
+ <tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
183
+ <tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31">max</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>
184
+ <tr class="memdesc:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns y if x &lt; y; otherwise, it returns x. <a href="a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31">More...</a><br /></td></tr>
185
+ <tr class="separator:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memSeparator" colspan="2">&#160;</td></tr>
186
+ <tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
187
+ <tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>
188
+ <tr class="memdesc:gac1fec0c3303b572a6d4697a637213870"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns y if x &lt; y; otherwise, it returns x. <a href="a00241.html#gac1fec0c3303b572a6d4697a637213870">More...</a><br /></td></tr>
189
+ <tr class="separator:gac1fec0c3303b572a6d4697a637213870"><td class="memSeparator" colspan="2">&#160;</td></tr>
190
+ <tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
191
+ <tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga6cf8098827054a270ee36b18e30d471d">min</a> (genType x, genType y)</td></tr>
192
+ <tr class="memdesc:ga6cf8098827054a270ee36b18e30d471d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns y if y &lt; x; otherwise, it returns x. <a href="a00241.html#ga6cf8098827054a270ee36b18e30d471d">More...</a><br /></td></tr>
193
+ <tr class="separator:ga6cf8098827054a270ee36b18e30d471d"><td class="memSeparator" colspan="2">&#160;</td></tr>
194
+ <tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
195
+ <tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa7d015eba1f9f48519251f4abe69b14d">min</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>
196
+ <tr class="memdesc:gaa7d015eba1f9f48519251f4abe69b14d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns y if y &lt; x; otherwise, it returns x. <a href="a00241.html#gaa7d015eba1f9f48519251f4abe69b14d">More...</a><br /></td></tr>
197
+ <tr class="separator:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memSeparator" colspan="2">&#160;</td></tr>
198
+ <tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
199
+ <tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>
200
+ <tr class="memdesc:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns y if y &lt; x; otherwise, it returns x. <a href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">More...</a><br /></td></tr>
201
+ <tr class="separator:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memSeparator" colspan="2">&#160;</td></tr>
202
+ <tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplParams" colspan="2">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>
203
+ <tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTypeT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>
204
+ <tr class="memdesc:ga8e93f374aae27d1a88b921860351f8d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">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. <a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">More...</a><br /></td></tr>
205
+ <tr class="separator:ga8e93f374aae27d1a88b921860351f8d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
206
+ <tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
207
+ <tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>
208
+ <tr class="memdesc:ga9b197a452cd52db3c5c18bac72bd7798"><td class="mdescLeft">&#160;</td><td class="mdescRight">Modulus. <a href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">More...</a><br /></td></tr>
209
+ <tr class="separator:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memSeparator" colspan="2">&#160;</td></tr>
210
+ <tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
211
+ <tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a> (genType x, genType &amp;i)</td></tr>
212
+ <tr class="memdesc:ga85e33f139b8db1b39b590a5713b9e679"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). <a href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">More...</a><br /></td></tr>
213
+ <tr class="separator:ga85e33f139b8db1b39b590a5713b9e679"><td class="memSeparator" colspan="2">&#160;</td></tr>
214
+ <tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
215
+ <tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">round</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
216
+ <tr class="memdesc:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a value equal to the nearest integer to x. <a href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">More...</a><br /></td></tr>
217
+ <tr class="separator:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
218
+ <tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
219
+ <tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga76b81785045a057989a84d99aeeb1578">roundEven</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
220
+ <tr class="memdesc:ga76b81785045a057989a84d99aeeb1578"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a value equal to the nearest integer to x. <a href="a00241.html#ga76b81785045a057989a84d99aeeb1578">More...</a><br /></td></tr>
221
+ <tr class="separator:ga76b81785045a057989a84d99aeeb1578"><td class="memSeparator" colspan="2">&#160;</td></tr>
222
+ <tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
223
+ <tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">sign</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
224
+ <tr class="memdesc:ga1e2e5cfff800056540e32f6c9b604b28"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0. <a href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">More...</a><br /></td></tr>
225
+ <tr class="separator:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memSeparator" colspan="2">&#160;</td></tr>
226
+ <tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
227
+ <tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>
228
+ <tr class="memdesc:ga562edf7eca082cc5b7a0aaf180436daf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 &lt; x &lt; edge1. <a href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">More...</a><br /></td></tr>
229
+ <tr class="separator:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memSeparator" colspan="2">&#160;</td></tr>
230
+ <tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplParams" colspan="2">template&lt;typename genType &gt; </td></tr>
231
+ <tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga015a1261ff23e12650211aa872863cce">step</a> (genType edge, genType x)</td></tr>
232
+ <tr class="memdesc:ga015a1261ff23e12650211aa872863cce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType. <a href="a00241.html#ga015a1261ff23e12650211aa872863cce">More...</a><br /></td></tr>
233
+ <tr class="separator:ga015a1261ff23e12650211aa872863cce"><td class="memSeparator" colspan="2">&#160;</td></tr>
234
+ <tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
235
+ <tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8f9a911a48ef244b51654eaefc81c551">step</a> (T edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
236
+ <tr class="memdesc:ga8f9a911a48ef244b51654eaefc81c551"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns 0.0 if x &lt; edge, otherwise it returns 1.0. <a href="a00241.html#ga8f9a911a48ef244b51654eaefc81c551">More...</a><br /></td></tr>
237
+ <tr class="separator:ga8f9a911a48ef244b51654eaefc81c551"><td class="memSeparator" colspan="2">&#160;</td></tr>
238
+ <tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
239
+ <tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a> (vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
240
+ <tr class="memdesc:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns 0.0 if x &lt; edge, otherwise it returns 1.0. <a href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">More...</a><br /></td></tr>
241
+ <tr class="separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
242
+ <tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplParams" colspan="2">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>
243
+ <tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">trunc</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>
244
+ <tr class="memdesc:gaf9375e3e06173271d49e6ffa3a334259"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. <a href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">More...</a><br /></td></tr>
245
+ <tr class="separator:gaf9375e3e06173271d49e6ffa3a334259"><td class="memSeparator" colspan="2">&#160;</td></tr>
246
+ <tr class="memitem:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#gab2bae0d15dcdca6093f88f76b3975d97">uintBitsToFloat</a> (uint const &amp;v)</td></tr>
247
+ <tr class="memdesc:gab2bae0d15dcdca6093f88f76b3975d97"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. <a href="a00241.html#gab2bae0d15dcdca6093f88f76b3975d97">More...</a><br /></td></tr>
248
+ <tr class="separator:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memSeparator" colspan="2">&#160;</td></tr>
249
+ <tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplParams" colspan="2">template&lt;length_t L, qualifier Q&gt; </td></tr>
250
+ <tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a> (vec&lt; L, uint, Q &gt; const &amp;v)</td></tr>
251
+ <tr class="memdesc:ga97f46b5f7b42fe44482e13356eb394ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. <a href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">More...</a><br /></td></tr>
252
+ <tr class="separator:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
253
+ </table>
254
+ <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
255
+ <div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
256
+ <dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
257
+
258
+ <p>Definition in file <a class="el" href="a00015_source.html">common.hpp</a>.</p>
259
+ </div></div><!-- contents -->
260
+ <!-- start footer part -->
261
+ <hr class="footer"/><address class="footer"><small>
262
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
263
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
264
+ </a> 1.8.10
265
+ </small></address>
266
+ </body>
267
+ </html>
submodules/diff-surfel-rasterization/third_party/glm/doc/api/a00015_source.html ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.10"/>
7
+ <title>0.9.9 API documentation: common.hpp Source File</title>
8
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+ <script type="text/javascript" src="jquery.js"></script>
10
+ <script type="text/javascript" src="dynsections.js"></script>
11
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+ <script type="text/javascript" src="search/searchdata.js"></script>
13
+ <script type="text/javascript" src="search/search.js"></script>
14
+ <script type="text/javascript">
15
+ $(document).ready(function() { init_search(); });
16
+ </script>
17
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+ </head>
19
+ <body>
20
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+ <div id="titlearea">
22
+ <table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+ <td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
26
+ <td id="projectalign" style="padding-left: 0.5em;">
27
+ <div id="projectname">0.9.9 API documentation
28
+ </div>
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <!-- end header part -->
35
+ <!-- Generated by Doxygen 1.8.10 -->
36
+ <script type="text/javascript">
37
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
38
+ </script>
39
+ <div id="navrow1" class="tabs">
40
+ <ul class="tablist">
41
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
42
+ <li><a href="modules.html"><span>Modules</span></a></li>
43
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+ <li>
45
+ <div id="MSearchBox" class="MSearchBoxInactive">
46
+ <span class="left">
47
+ <img id="MSearchSelect" src="search/mag_sel.png"
48
+ onmouseover="return searchBox.OnSearchSelectShow()"
49
+ onmouseout="return searchBox.OnSearchSelectHide()"
50
+ alt=""/>
51
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+ onfocus="searchBox.OnSearchFieldFocus(true)"
53
+ onblur="searchBox.OnSearchFieldFocus(false)"
54
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+ </span><span class="right">
56
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+ </span>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+ </div>
62
+ <div id="navrow2" class="tabs2">
63
+ <ul class="tablist">
64
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+ </ul>
66
+ </div>
67
+ <!-- window showing the filter options -->
68
+ <div id="MSearchSelectWindow"
69
+ onmouseover="return searchBox.OnSearchSelectShow()"
70
+ onmouseout="return searchBox.OnSearchSelectHide()"
71
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+ </div>
73
+
74
+ <!-- iframe showing the search results (closed by default) -->
75
+ <div id="MSearchResultsWindow">
76
+ <iframe src="javascript:void(0)" frameborder="0"
77
+ name="MSearchResults" id="MSearchResults">
78
+ </iframe>
79
+ </div>
80
+
81
+ <div id="nav-path" class="navpath">
82
+ <ul>
83
+ <li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
84
+ </div>
85
+ </div><!-- top -->
86
+ <div class="header">
87
+ <div class="headertitle">
88
+ <div class="title">common.hpp</div> </div>
89
+ </div><!--header-->
90
+ <div class="contents">
91
+ <a href="a00015.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
92
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#pragma once</span></div>
93
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div>
94
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;detail/qualifier.hpp&quot;</span></div>
95
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;detail/_fixes.hpp&quot;</span></div>
96
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div>
97
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
98
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
99
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
100
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
101
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a>(genType x);</div>
102
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
103
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
104
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
105
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
106
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
107
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">sign</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
108
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
109
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
110
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
111
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
112
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
113
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">trunc</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
114
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div>
115
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
116
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">round</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
117
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div>
118
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
119
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga76b81785045a057989a84d99aeeb1578">roundEven</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
120
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div>
121
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
122
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">ceil</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
123
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div>
124
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
125
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a>(genType x);</div>
126
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div>
127
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
128
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
129
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div>
130
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
131
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(genType x, genType y);</div>
132
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div>
133
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
134
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, T y);</div>
135
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div>
136
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
137
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y);</div>
138
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div>
139
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
140
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a>(genType x, genType&amp; i);</div>
141
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div>
142
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
143
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(genType x, genType y);</div>
144
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div>
145
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
146
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, T y);</div>
147
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div>
148
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
149
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y);</div>
150
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div>
151
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
152
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(genType x, genType y);</div>
153
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div>
154
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
155
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, T y);</div>
156
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
157
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
158
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y);</div>
159
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div>
160
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
161
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(genType x, genType minVal, genType maxVal);</div>
162
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div>
163
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
164
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, T minVal, T maxVal);</div>
165
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div>
166
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
167
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; minVal, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; maxVal);</div>
168
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div>
169
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genTypeT, <span class="keyword">typename</span> genTypeU&gt;</div>
170
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; GLM_FUNC_DECL genTypeT <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(genTypeT x, genTypeT y, genTypeU a);</div>
171
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div>
172
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
173
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class="keyword">const</span>&amp; a);</div>
174
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div>
175
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q&gt;</div>
176
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; y, U a);</div>
177
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div>
178
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
179
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; GLM_FUNC_DECL genType <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(genType edge, genType x);</div>
180
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div>
181
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
182
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(T edge, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
183
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div>
184
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
185
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; edge, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
186
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div>
187
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
188
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(genType edge0, genType edge1, genType x);</div>
189
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div>
190
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
191
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(T edge0, T edge1, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
192
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div>
193
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
194
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; edge0, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; edge1, vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
195
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div>
196
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
197
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class="code" href="a00241.html#ga29ef934c00306490de837b4746b4e14d">isnan</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
198
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div>
199
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
200
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class="code" href="a00241.html#ga2885587c23a106301f20443896365b62">isinf</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; x);</div>
201
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;</div>
202
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a>(<span class="keywordtype">float</span> <span class="keyword">const</span>&amp; v);</div>
203
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div>
204
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keyword">template</span>&lt;length_t L, qualifier Q&gt;</div>
205
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class="code" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a>(vec&lt;L, float, Q&gt; <span class="keyword">const</span>&amp; v);</div>
206
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;</div>
207
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; GLM_FUNC_DECL uint <a class="code" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a>(<span class="keywordtype">float</span> <span class="keyword">const</span>&amp; v);</div>
208
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;</div>
209
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">template</span>&lt;length_t L, qualifier Q&gt;</div>
210
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class="code" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a>(vec&lt;L, float, Q&gt; <span class="keyword">const</span>&amp; v);</div>
211
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div>
212
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a>(<span class="keywordtype">int</span> <span class="keyword">const</span>&amp; v);</div>
213
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div>
214
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">template</span>&lt;length_t L, qualifier Q&gt;</div>
215
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; GLM_FUNC_DECL vec&lt;L, float, Q&gt; <a class="code" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a>(vec&lt;L, int, Q&gt; <span class="keyword">const</span>&amp; v);</div>
216
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;</div>
217
+ <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a>(uint <span class="keyword">const</span>&amp; v);</div>
218
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div>
219
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keyword">template</span>&lt;length_t L, qualifier Q&gt;</div>
220
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; GLM_FUNC_DECL vec&lt;L, float, Q&gt; <a class="code" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a>(vec&lt;L, uint, Q&gt; <span class="keyword">const</span>&amp; v);</div>
221
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div>
222
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
223
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; GLM_FUNC_DECL genType <a class="code" href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a>(genType <span class="keyword">const</span>&amp; a, genType <span class="keyword">const</span>&amp; b, genType <span class="keyword">const</span>&amp; c);</div>
224
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;</div>
225
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
226
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; GLM_FUNC_DECL genType <a class="code" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a>(genType x, <span class="keywordtype">int</span>&amp; <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
227
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; </div>
228
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
229
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; v, vec&lt;L, int, Q&gt;&amp; <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
230
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div>
231
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> genType&gt;</div>
232
+ <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; GLM_FUNC_DECL genType <a class="code" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a>(genType <span class="keyword">const</span>&amp; x, <span class="keywordtype">int</span> <span class="keyword">const</span>&amp; <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
233
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; </div>
234
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keyword">template</span>&lt;length_t L, <span class="keyword">typename</span> T, qualifier Q&gt;</div>
235
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class="code" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a>(vec&lt;L, T, Q&gt; <span class="keyword">const</span>&amp; v, vec&lt;L, int, Q&gt; <span class="keyword">const</span>&amp; <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
236
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;</div>
237
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;}<span class="comment">//namespace glm</span></div>
238
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;</div>
239
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="preprocessor">#include &quot;detail/func_common.inl&quot;</span></div>
240
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;</div>
241
+ <div class="ttc" id="a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d"><div class="ttname"><a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">glm::floor</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floor(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>
242
+ <div class="ttc" id="a00241_html_gad0f444d4b81cc53c3b6edf5aa25078c2"><div class="ttname"><a href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">glm::fma</a></div><div class="ttdeci">GLM_FUNC_DECL genType fma(genType const &amp;a, genType const &amp;b, genType const &amp;c)</div><div class="ttdoc">Computes and returns a * b + c. </div></div>
243
+ <div class="ttc" id="a00241_html_gaf9375e3e06173271d49e6ffa3a334259"><div class="ttname"><a href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">glm::trunc</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; trunc(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...</div></div>
244
+ <div class="ttc" id="a00241_html_ga9b197a452cd52db3c5c18bac72bd7798"><div class="ttname"><a href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">glm::mod</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; mod(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class="ttdoc">Modulus. </div></div>
245
+ <div class="ttc" id="a00241_html_gaa0f2f12e9108b09e22a3f0b2008a0b5d"><div class="ttname"><a href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; clamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</div><div class="ttdoc">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>
246
+ <div class="ttc" id="a00241_html_gafa03aca8c4713e1cc892aa92ca135a7e"><div class="ttname"><a href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">glm::round</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; round(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
247
+ <div class="ttc" id="a00241_html_ga97f46b5f7b42fe44482e13356eb394ae"><div class="ttname"><a href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">glm::uintBitsToFloat</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, float, Q &gt; uintBitsToFloat(vec&lt; L, uint, Q &gt; const &amp;v)</div><div class="ttdoc">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...</div></div>
248
+ <div class="ttc" id="a00241_html_ga1e2e5cfff800056540e32f6c9b604b28"><div class="ttname"><a href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">glm::sign</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sign(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. </div></div>
249
+ <div class="ttc" id="a00241_html_ga2885587c23a106301f20443896365b62"><div class="ttname"><a href="a00241.html#ga2885587c23a106301f20443896365b62">glm::isinf</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isinf(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>
250
+ <div class="ttc" id="a00241_html_ga76b81785045a057989a84d99aeeb1578"><div class="ttname"><a href="a00241.html#ga76b81785045a057989a84d99aeeb1578">glm::roundEven</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; roundEven(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
251
+ <div class="ttc" id="a00241_html_ga85e33f139b8db1b39b590a5713b9e679"><div class="ttname"><a href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">glm::modf</a></div><div class="ttdeci">GLM_FUNC_DECL genType modf(genType x, genType &amp;i)</div><div class="ttdoc">Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...</div></div>
252
+ <div class="ttc" id="a00241_html_gafb9d2a645a23aca12d4d6de0104b7657"><div class="ttname"><a href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">glm::ceil</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; ceil(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is greater than or equal to x. </div></div>
253
+ <div class="ttc" id="a00241_html_ga31f49ef9e7d1beb003160c5e009b0c48"><div class="ttname"><a href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">glm::min</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; min(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class="ttdoc">Returns y if y < x; otherwise, it returns x. </div></div>
254
+ <div class="ttc" id="a00241_html_ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><div class="ttname"><a href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">glm::intBitsToFloat</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, float, Q &gt; intBitsToFloat(vec&lt; L, int, Q &gt; const &amp;v)</div><div class="ttdoc">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...</div></div>
255
+ <div class="ttc" id="a00241_html_ga29ef934c00306490de837b4746b4e14d"><div class="ttname"><a href="a00241.html#ga29ef934c00306490de837b4746b4e14d">glm::isnan</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isnan(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns true if x holds a NaN (not a number) representation in the underlying implementation&#39;s set of...</div></div>
256
+ <div class="ttc" id="a00242_html_ga071566cadc7505455e611f2a0353f4d4"><div class="ttname"><a href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">glm::exp</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; exp(vec&lt; L, T, Q &gt; const &amp;v)</div><div class="ttdoc">Returns the natural exponentiation of x, i.e., e^x. </div></div>
257
+ <div class="ttc" id="a00241_html_ga49418ba4c8a60fbbb5d57b705f3e26db"><div class="ttname"><a href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">glm::floatBitsToUint</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; floatBitsToUint(vec&lt; L, float, Q &gt; const &amp;v)</div><div class="ttdoc">Returns a unsigned integer value representing the encoding of a floating-point value. </div></div>
258
+ <div class="ttc" id="a00241_html_ga562edf7eca082cc5b7a0aaf180436daf"><div class="ttname"><a href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">glm::smoothstep</a></div><div class="ttdeci">GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)</div><div class="ttdoc">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...</div></div>
259
+ <div class="ttc" id="a00241_html_ga81d3abddd0ef0c8de579bc541ecadab6"><div class="ttname"><a href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">glm::abs</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; abs(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns x if x >= 0; otherwise, it returns -x. </div></div>
260
+ <div class="ttc" id="a00241_html_gac1fec0c3303b572a6d4697a637213870"><div class="ttname"><a href="a00241.html#gac1fec0c3303b572a6d4697a637213870">glm::max</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class="ttdoc">Returns y if x < y; otherwise, it returns x. </div></div>
261
+ <div class="ttc" id="a00241_html_gaf4a5fc81619c7d3e8b22f53d4a098c7f"><div class="ttname"><a href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">glm::step</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; step(vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Returns 0.0 if x < edge, otherwise it returns 1.0. </div></div>
262
+ <div class="ttc" id="a00241_html_ga2df623004f634b440d61e018d62c751b"><div class="ttname"><a href="a00241.html#ga2df623004f634b440d61e018d62c751b">glm::fract</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fract(vec&lt; L, T, Q &gt; const &amp;x)</div><div class="ttdoc">Return x - floor(x). </div></div>
263
+ <div class="ttc" id="a00241_html_gac3010e0a0c35a1b514540f2fb579c58c"><div class="ttname"><a href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">glm::ldexp</a></div><div class="ttdeci">GLM_FUNC_DECL genType ldexp(genType const &amp;x, int const &amp;exp)</div><div class="ttdoc">Builds a floating-point number from x and the corresponding integral exponent of two in exp...</div></div>
264
+ <div class="ttc" id="a00241_html_ga99f7d62f78ac5ea3b49bae715c9488ed"><div class="ttname"><a href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">glm::floatBitsToInt</a></div><div class="ttdeci">GLM_FUNC_DECL vec&lt; L, int, Q &gt; floatBitsToInt(vec&lt; L, float, Q &gt; const &amp;v)</div><div class="ttdoc">Returns a signed integer value representing the encoding of a floating-point value. </div></div>
265
+ <div class="ttc" id="a00241_html_ga8e93f374aae27d1a88b921860351f8d4"><div class="ttname"><a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)</div><div class="ttdoc">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>
266
+ <div class="ttc" id="a00241_html_gaddf5ef73283c171730e0bcc11833fa81"><div class="ttname"><a href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">glm::frexp</a></div><div class="ttdeci">GLM_FUNC_DECL genType frexp(genType x, int &amp;exp)</div><div class="ttdoc">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...</div></div>
267
+ <div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
268
+ </div><!-- fragment --></div><!-- contents -->
269
+ <!-- start footer part -->
270
+ <hr class="footer"/><address class="footer"><small>
271
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
272
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
273
+ </a> 1.8.10
274
+ </small></address>
275
+ </body>
276
+ </html>