Julien Blanchon commited on
Commit
2398fdd
·
1 Parent(s): 1ab70ec

Move binaries to Git LFS

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +5 -0
  2. .gitignore +186 -0
  3. LICENSE +21 -0
  4. assets/docs/image-gs.bib +7 -0
  5. assets/images/Intel-logo.png +3 -0
  6. assets/images/NYU-logo.png +3 -0
  7. environment.yml +20 -0
  8. gsplat/MANIFEST.in +6 -0
  9. gsplat/README.md +0 -0
  10. gsplat/pyproject.toml +34 -0
  11. gsplat/setup.py +139 -0
  12. gsplat/src/gsplat/__init__.py +133 -0
  13. gsplat/src/gsplat/cuda/__init__.py +39 -0
  14. gsplat/src/gsplat/cuda/_backend.py +33 -0
  15. gsplat/src/gsplat/cuda/csrc/backward.cu +578 -0
  16. gsplat/src/gsplat/cuda/csrc/backward.cuh +74 -0
  17. gsplat/src/gsplat/cuda/csrc/backward2d.cu +101 -0
  18. gsplat/src/gsplat/cuda/csrc/backward2d.cuh +34 -0
  19. gsplat/src/gsplat/cuda/csrc/bindings.cu +814 -0
  20. gsplat/src/gsplat/cuda/csrc/bindings.h +224 -0
  21. gsplat/src/gsplat/cuda/csrc/config.h +24 -0
  22. gsplat/src/gsplat/cuda/csrc/ext.cpp +28 -0
  23. gsplat/src/gsplat/cuda/csrc/forward.cu +588 -0
  24. gsplat/src/gsplat/cuda/csrc/forward.cuh +85 -0
  25. gsplat/src/gsplat/cuda/csrc/forward2d.cuh +16 -0
  26. gsplat/src/gsplat/cuda/csrc/foward2d.cu +60 -0
  27. gsplat/src/gsplat/cuda/csrc/helpers.cuh +300 -0
  28. gsplat/src/gsplat/cuda/csrc/third_party/glm/.appveyor.yml +92 -0
  29. gsplat/src/gsplat/cuda/csrc/third_party/glm/.github/workflows/make_light_release.yml +42 -0
  30. gsplat/src/gsplat/cuda/csrc/third_party/glm/.gitignore +61 -0
  31. gsplat/src/gsplat/cuda/csrc/third_party/glm/.travis.yml +388 -0
  32. gsplat/src/gsplat/cuda/csrc/third_party/glm/CMakeLists.txt +45 -0
  33. gsplat/src/gsplat/cuda/csrc/third_party/glm/cmake/cmake_uninstall.cmake.in +21 -0
  34. gsplat/src/gsplat/cuda/csrc/third_party/glm/copying.txt +54 -0
  35. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00001_source.html +493 -0
  36. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00002_source.html +121 -0
  37. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00003_source.html +182 -0
  38. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00004_source.html +0 -0
  39. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00005_source.html +0 -0
  40. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00006_source.html +262 -0
  41. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00007.html +205 -0
  42. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00007_source.html +250 -0
  43. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00008.html +149 -0
  44. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00008_source.html +154 -0
  45. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00009.html +223 -0
  46. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00009_source.html +212 -0
  47. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00010.html +124 -0
  48. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00010_source.html +133 -0
  49. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00011.html +137 -0
  50. gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00011_source.html +139 -0
.gitattributes ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ *.whl filter=lfs diff=lfs merge=lfs -text
2
+ *.ttf filter=lfs diff=lfs merge=lfs -text
3
+ *.png filter=lfs diff=lfs merge=lfs -text
4
+ *.jpg filter=lfs diff=lfs merge=lfs -text
5
+ *.pdf filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Project files
2
+ figures/
3
+ animations/
4
+ media/
5
+ models/
6
+ results/
7
+ .vscode/
8
+ .DS_Store
9
+ *.code-workspace
10
+
11
+ # Byte-compiled / optimized / DLL files
12
+ __pycache__/
13
+ *.py[cod]
14
+ *$py.class
15
+
16
+ # C extensions
17
+ # *.so
18
+
19
+ # Distribution / packaging
20
+ .Python
21
+ build/
22
+ develop-eggs/
23
+ dist/
24
+ downloads/
25
+ eggs/
26
+ .eggs/
27
+ lib/
28
+ lib64/
29
+ parts/
30
+ sdist/
31
+ var/
32
+ wheels/
33
+ share/python-wheels/
34
+ *.egg-info/
35
+ .installed.cfg
36
+ *.egg
37
+ MANIFEST
38
+
39
+ # PyInstaller
40
+ # Usually these files are written by a python script from a template
41
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
42
+ *.manifest
43
+ *.spec
44
+
45
+ # Installer logs
46
+ pip-log.txt
47
+ pip-delete-this-directory.txt
48
+
49
+ # Unit test / coverage reports
50
+ htmlcov/
51
+ .tox/
52
+ .nox/
53
+ .coverage
54
+ .coverage.*
55
+ .cache
56
+ nosetests.xml
57
+ coverage.xml
58
+ *.cover
59
+ *.py,cover
60
+ .hypothesis/
61
+ .pytest_cache/
62
+ cover/
63
+
64
+ # Translations
65
+ *.mo
66
+ *.pot
67
+
68
+ # Django stuff:
69
+ *.log
70
+ local_settings.py
71
+ db.sqlite3
72
+ db.sqlite3-journal
73
+
74
+ # Flask stuff:
75
+ instance/
76
+ .webassets-cache
77
+
78
+ # Scrapy stuff:
79
+ .scrapy
80
+
81
+ # Sphinx documentation
82
+ docs/_build/
83
+
84
+ # PyBuilder
85
+ .pybuilder/
86
+ target/
87
+
88
+ # Jupyter Notebook
89
+ .ipynb_checkpoints
90
+
91
+ # IPython
92
+ profile_default/
93
+ ipython_config.py
94
+
95
+ # pyenv
96
+ # For a library or package, you might want to ignore these files since the code is
97
+ # intended to run in multiple environments; otherwise, check them in:
98
+ # .python-version
99
+
100
+ # pipenv
101
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
102
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
103
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
104
+ # install all needed dependencies.
105
+ #Pipfile.lock
106
+
107
+ # UV
108
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
109
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
110
+ # commonly ignored for libraries.
111
+ #uv.lock
112
+
113
+ # poetry
114
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
115
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
116
+ # commonly ignored for libraries.
117
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
118
+ #poetry.lock
119
+
120
+ # pdm
121
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
122
+ #pdm.lock
123
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
124
+ # in version control.
125
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
126
+ .pdm.toml
127
+ .pdm-python
128
+ .pdm-build/
129
+
130
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
131
+ __pypackages__/
132
+
133
+ # Celery stuff
134
+ celerybeat-schedule
135
+ celerybeat.pid
136
+
137
+ # SageMath parsed files
138
+ *.sage.py
139
+
140
+ # Environments
141
+ .env
142
+ .venv
143
+ env/
144
+ venv/
145
+ ENV/
146
+ env.bak/
147
+ venv.bak/
148
+
149
+ # Spyder project settings
150
+ .spyderproject
151
+ .spyproject
152
+
153
+ # Rope project settings
154
+ .ropeproject
155
+
156
+ # mkdocs documentation
157
+ /site
158
+
159
+ # mypy
160
+ .mypy_cache/
161
+ .dmypy.json
162
+ dmypy.json
163
+
164
+ # Pyre type checker
165
+ .pyre/
166
+
167
+ # pytype static type analyzer
168
+ .pytype/
169
+
170
+ # Cython debug symbols
171
+ cython_debug/
172
+
173
+ # PyCharm
174
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
175
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
176
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
177
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
178
+ #.idea/
179
+
180
+ # Ruff stuff:
181
+ .ruff_cache/
182
+
183
+ # PyPI configuration file
184
+ .pypirc
185
+
186
+ !gsplat/dist/gsplat-0.1.0-cp310-cp310-linux_x86_64.whl
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2025 NYU Immersive Computing Lab
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
assets/docs/image-gs.bib ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ @inproceedings{zhang2025image,
2
+ title={Image-gs: Content-adaptive image representation via 2d gaussians},
3
+ author={Zhang, Yunxiang and Li, Bingxuan and Kuznetsov, Alexandr and Jindal, Akshay and Diolatzis, Stavros and Chen, Kenneth and Sochenov, Anton and Kaplanyan, Anton and Sun, Qi},
4
+ booktitle={Proceedings of the Special Interest Group on Computer Graphics and Interactive Techniques Conference Conference Papers},
5
+ pages={1--11},
6
+ year={2025}
7
+ }
assets/images/Intel-logo.png ADDED

Git LFS Details

  • SHA256: a065d64c7d7c487b171a1d4b2cca43aab60f475d414eda96cb35939a4ec822a0
  • Pointer size: 130 Bytes
  • Size of remote file: 53.3 kB
assets/images/NYU-logo.png ADDED

Git LFS Details

  • SHA256: f8fc4334d8fb3fee864523e6cdfee705af1014fbcf03e0d34f17675b9d477e8c
  • Pointer size: 130 Bytes
  • Size of remote file: 14.1 kB
environment.yml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: image-gs
2
+ channels:
3
+ - nvidia
4
+ - pytorch
5
+ - defaults
6
+ dependencies:
7
+ - python=3.11.10
8
+ - pip=24.2
9
+ - pytorch=2.4.1
10
+ - torchvision=0.19.1
11
+ - torchaudio=2.4.1
12
+ - pytorch-cuda=12.4
13
+ - pip:
14
+ - lpips==0.1.4
15
+ - matplotlib==3.9.2
16
+ - numpy==2.0.2
17
+ - pytorch-msssim==1.0.0
18
+ - scikit-image==0.24.0
19
+ - scipy==1.13.1
20
+ - torchmetrics==1.5.2
gsplat/MANIFEST.in ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ include README.md
2
+ include LICENSE
3
+ recursive-include src/gsplat/cuda/csrc *.cu *.cpp *.cuh *.h
4
+ recursive-include src/gsplat/cuda/csrc/third_party *.hpp *.inl *.txt *.md
5
+ global-exclude *.pyc
6
+ global-exclude __pycache__
gsplat/README.md ADDED
File without changes
gsplat/pyproject.toml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [project]
2
+ name = "gsplat"
3
+ version = "0.1.0"
4
+ description = "Python package for differentiable rasterization of gaussians"
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ keywords = ["gaussian", "splatting", "cuda"]
8
+ dependencies = [
9
+ "jaxtyping>=0.3.2",
10
+ "rich>=14.1.0",
11
+ "torch>=2.6.0",
12
+ "numpy>=2.2.6",
13
+ ]
14
+
15
+ [build-system]
16
+ requires = ["setuptools>=77.0.0", "wheel", "torch>=2.6.0", "numpy>=2.2.6"]
17
+ build-backend = "setuptools.build_meta"
18
+
19
+ [dependency-groups]
20
+ dev = [
21
+ "black>=25.1.0",
22
+ "build>=1.3.0",
23
+ "isort>=6.0.1",
24
+ "ninja>=1.13.0",
25
+ "pylint>=3.3.8",
26
+ "pytest>=8.4.2",
27
+ "pytest-xdist>=3.8.0",
28
+ "pyyaml>=6.0.2",
29
+ "twine>=6.2.0",
30
+ "typeguard>=4.4.4",
31
+ ]
32
+
33
+ [tool.uv]
34
+ package = true
gsplat/setup.py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import glob
2
+ import os
3
+ import os.path as osp
4
+ import platform
5
+ import sys
6
+
7
+ from setuptools import find_packages, setup
8
+
9
+ __version__ = "1.4.0"
10
+ # exec(open("gsplat/version.py", "r").read())
11
+
12
+ URL = "https://github.com/nerfstudio-project/gsplat" # TODO
13
+
14
+ BUILD_NO_CUDA = os.getenv("BUILD_NO_CUDA", "0") == "1"
15
+ WITH_SYMBOLS = os.getenv("WITH_SYMBOLS", "0") == "1"
16
+ LINE_INFO = os.getenv("LINE_INFO", "0") == "1"
17
+
18
+
19
+ def get_ext():
20
+ from torch.utils.cpp_extension import BuildExtension
21
+
22
+ return BuildExtension.with_options(no_python_abi_suffix=True, use_ninja=False)
23
+
24
+
25
+ def get_extensions():
26
+ import torch
27
+ from torch.__config__ import parallel_info
28
+ from torch.utils.cpp_extension import CUDAExtension
29
+
30
+ # Set default CUDA architectures if not specified
31
+ if "TORCH_CUDA_ARCH_LIST" not in os.environ:
32
+ # T4 GPU (7.5), A100 (8.0), RTX 30xx (8.6)
33
+ os.environ["TORCH_CUDA_ARCH_LIST"] = "7.5;8.0;8.6"
34
+
35
+ extensions_dir = osp.join("src", "gsplat", "cuda", "csrc")
36
+ sources = glob.glob(osp.join(extensions_dir, "*.cu")) + glob.glob(
37
+ osp.join(extensions_dir, "*.cpp")
38
+ )
39
+
40
+ # remove generated 'hip' files, in case of rebuilds
41
+ sources = [path for path in sources if "hip" not in path]
42
+
43
+ undef_macros = []
44
+ define_macros = []
45
+
46
+ if sys.platform == "win32":
47
+ define_macros += [("gsplat_EXPORTS", None)]
48
+
49
+ extra_compile_args = {"cxx": ["-O3"]}
50
+ if not os.name == "nt": # Not on Windows:
51
+ extra_compile_args["cxx"] += ["-Wno-sign-compare"]
52
+ extra_link_args = [] if WITH_SYMBOLS else ["-s"]
53
+
54
+ info = parallel_info()
55
+ if (
56
+ "backend: OpenMP" in info
57
+ and "OpenMP not found" not in info
58
+ and sys.platform != "darwin"
59
+ ):
60
+ extra_compile_args["cxx"] += ["-DAT_PARALLEL_OPENMP"]
61
+ if sys.platform == "win32":
62
+ extra_compile_args["cxx"] += ["/openmp"]
63
+ else:
64
+ extra_compile_args["cxx"] += ["-fopenmp"]
65
+ else:
66
+ print("Compiling without OpenMP...")
67
+
68
+ # Compile for mac arm64
69
+ if sys.platform == "darwin" and platform.machine() == "arm64":
70
+ extra_compile_args["cxx"] += ["-arch", "arm64"]
71
+ extra_link_args += ["-arch", "arm64"]
72
+
73
+ nvcc_flags = os.getenv("NVCC_FLAGS", "")
74
+ nvcc_flags = [] if nvcc_flags == "" else nvcc_flags.split(" ")
75
+ nvcc_flags += ["-O3", "--use_fast_math"]
76
+ if LINE_INFO:
77
+ nvcc_flags += ["-lineinfo"]
78
+ if torch.version.hip:
79
+ # USE_ROCM was added to later versions of PyTorch.
80
+ # Define here to support older PyTorch versions as well:
81
+ define_macros += [("USE_ROCM", None)]
82
+ undef_macros += ["__HIP_NO_HALF_CONVERSIONS__"]
83
+ else:
84
+ nvcc_flags += ["--expt-relaxed-constexpr"]
85
+ extra_compile_args["nvcc"] = nvcc_flags
86
+ if sys.platform == "win32":
87
+ extra_compile_args["nvcc"] += ["-DWIN32_LEAN_AND_MEAN"]
88
+
89
+ extension = CUDAExtension(
90
+ "csrc",
91
+ sources,
92
+ include_dirs=[
93
+ extensions_dir, # Include the csrc directory itself for headers
94
+ osp.join(extensions_dir, "third_party", "glm"),
95
+ ],
96
+ define_macros=define_macros,
97
+ undef_macros=undef_macros,
98
+ extra_compile_args=extra_compile_args,
99
+ extra_link_args=extra_link_args,
100
+ )
101
+
102
+ return [extension]
103
+
104
+
105
+ setup(
106
+ name="gsplat",
107
+ version=__version__,
108
+ description=" Python package for differentiable rasterization of gaussians",
109
+ url=URL,
110
+ download_url=f"{URL}/archive/gsplat-{__version__}.tar.gz",
111
+ python_requires=">=3.7",
112
+ # install_requires=[
113
+ # "jaxtyping",
114
+ # "rich>=12",
115
+ # "torch",
116
+ # "typing_extensions; python_version<'3.8'",
117
+ # ],
118
+ # extras_require={
119
+ # # dev dependencies. Install them by `pip install gsplat[dev]`
120
+ # "dev": [
121
+ # "black[jupyter]==22.3.0",
122
+ # "isort==5.10.1",
123
+ # "pylint==2.13.4",
124
+ # "pytest==7.1.2",
125
+ # "pytest-xdist==2.5.0",
126
+ # "typeguard>=2.13.3",
127
+ # "pyyaml==6.0",
128
+ # "build",
129
+ # "twine",
130
+ # "ninja",
131
+ # ],
132
+ # },
133
+ ext_modules=get_extensions() if not BUILD_NO_CUDA else [],
134
+ cmdclass={"build_ext": get_ext()} if not BUILD_NO_CUDA else {},
135
+ packages=find_packages(where="src"),
136
+ package_dir={"": "src"},
137
+ # https://github.com/pypa/setuptools/issues/1461#issuecomment-954725244
138
+ include_package_data=True,
139
+ )
gsplat/src/gsplat/__init__.py ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any
2
+ import torch
3
+ from .project_gaussians_2d_scale_rot import project_gaussians_2d_scale_rot
4
+ from .rasterize_sum import rasterize_gaussians_sum
5
+ from .rasterize_no_tiles import rasterize_gaussians_no_tiles
6
+ from .utils import (
7
+ map_gaussian_to_intersects,
8
+ bin_and_sort_gaussians,
9
+ compute_cumulative_intersects,
10
+ compute_cov2d_bounds,
11
+ get_tile_bin_edges,
12
+ )
13
+ import warnings
14
+
15
+
16
+ __all__ = [
17
+ "project_gaussians_2d_scale_rot",
18
+ "rasterize_gaussians_sum",
19
+ "rasterize_gaussians_no_tiles",
20
+ # utils
21
+ "bin_and_sort_gaussians",
22
+ "compute_cumulative_intersects",
23
+ "compute_cov2d_bounds",
24
+ "get_tile_bin_edges",
25
+ "map_gaussian_to_intersects",
26
+ "ProjectGaussians2dScaleRot",
27
+ "RasterizeGaussiansSum",
28
+ "BinAndSortGaussians",
29
+ "ComputeCumulativeIntersects",
30
+ "ComputeCov2dBounds",
31
+ "GetTileBinEdges",
32
+ "MapGaussiansToIntersects",
33
+ ]
34
+
35
+ # Define these for backwards compatibility
36
+
37
+
38
+ class MapGaussiansToIntersects(torch.autograd.Function):
39
+ @staticmethod
40
+ def forward(ctx, *args, **kwargs):
41
+ warnings.warn(
42
+ "MapGaussiansToIntersects is deprecated, use map_gaussian_to_intersects instead",
43
+ DeprecationWarning,
44
+ )
45
+ return map_gaussian_to_intersects(*args, **kwargs)
46
+
47
+ @staticmethod
48
+ def backward(ctx: Any, *grad_outputs: Any) -> Any:
49
+ raise NotImplementedError
50
+
51
+
52
+ class ComputeCumulativeIntersects(torch.autograd.Function):
53
+ @staticmethod
54
+ def forward(ctx, *args, **kwargs):
55
+ warnings.warn(
56
+ "ComputeCumulativeIntersects is deprecated, use compute_cumulative_intersects instead",
57
+ DeprecationWarning,
58
+ )
59
+ return compute_cumulative_intersects(*args, **kwargs)
60
+
61
+ @staticmethod
62
+ def backward(ctx: Any, *grad_outputs: Any) -> Any:
63
+ raise NotImplementedError
64
+
65
+
66
+ class ComputeCov2dBounds(torch.autograd.Function):
67
+ @staticmethod
68
+ def forward(ctx, *args, **kwargs):
69
+ warnings.warn(
70
+ "ComputeCov2dBounds is deprecated, use compute_cov2d_bounds instead",
71
+ DeprecationWarning,
72
+ )
73
+ return compute_cov2d_bounds(*args, **kwargs)
74
+
75
+ @staticmethod
76
+ def backward(ctx: Any, *grad_outputs: Any) -> Any:
77
+ raise NotImplementedError
78
+
79
+
80
+ class GetTileBinEdges(torch.autograd.Function):
81
+ @staticmethod
82
+ def forward(ctx, *args, **kwargs):
83
+ warnings.warn(
84
+ "GetTileBinEdges is deprecated, use get_tile_bin_edges instead",
85
+ DeprecationWarning,
86
+ )
87
+ return get_tile_bin_edges(*args, **kwargs)
88
+
89
+ @staticmethod
90
+ def backward(ctx: Any, *grad_outputs: Any) -> Any:
91
+ raise NotImplementedError
92
+
93
+
94
+ class BinAndSortGaussians(torch.autograd.Function):
95
+ @staticmethod
96
+ def forward(ctx, *args, **kwargs):
97
+ warnings.warn(
98
+ "BinAndSortGaussians is deprecated, use bin_and_sort_gaussians instead",
99
+ DeprecationWarning,
100
+ )
101
+ return bin_and_sort_gaussians(*args, **kwargs)
102
+
103
+ @staticmethod
104
+ def backward(ctx: Any, *grad_outputs: Any) -> Any:
105
+ raise NotImplementedError
106
+
107
+
108
+ class ProjectGaussians2dScaleRot(torch.autograd.Function):
109
+ @staticmethod
110
+ def forward(ctx, *args, **kwargs):
111
+ warnings.warn(
112
+ "ProjectGaussians2dScaleRot is deprecated, use project_gaussians_2d_scale_rot instead",
113
+ DeprecationWarning,
114
+ )
115
+ return project_gaussians_2d_scale_rot(*args, **kwargs)
116
+
117
+ @staticmethod
118
+ def backward(ctx: Any, *grad_outputs: Any) -> Any:
119
+ raise NotImplementedError
120
+
121
+
122
+ class RasterizeGaussiansSum(torch.autograd.Function):
123
+ @staticmethod
124
+ def forward(ctx, *args, **kwargs):
125
+ warnings.warn(
126
+ "RasterizeGaussiansSum is deprecated, use rasterize_gaussians instead",
127
+ DeprecationWarning,
128
+ )
129
+ return rasterize_gaussians_sum(*args, **kwargs)
130
+
131
+ @staticmethod
132
+ def backward(ctx: Any, *grad_outputs: Any) -> Any:
133
+ raise NotImplementedError
gsplat/src/gsplat/cuda/__init__.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Callable
2
+
3
+
4
+ def _make_lazy_cuda_func(name: str) -> Callable:
5
+ def call_cuda(*args, **kwargs):
6
+ # pylint: disable=import-outside-toplevel
7
+ from ._backend import _C
8
+
9
+ return getattr(_C, name)(*args, **kwargs)
10
+
11
+ return call_cuda
12
+
13
+
14
+ nd_rasterize_forward = _make_lazy_cuda_func("nd_rasterize_forward")
15
+ nd_rasterize_backward = _make_lazy_cuda_func("nd_rasterize_backward")
16
+
17
+ nd_rasterize_forward_no_tiles = _make_lazy_cuda_func("nd_rasterize_forward_no_tiles")
18
+ nd_rasterize_backward_no_tiles = _make_lazy_cuda_func("nd_rasterize_backward_no_tiles")
19
+
20
+ nd_rasterize_forward_simple = _make_lazy_cuda_func("nd_rasterize_forward_simple")
21
+ nd_rasterize_backward_simple = _make_lazy_cuda_func("nd_rasterize_backward_simple")
22
+
23
+ nd_rasterize_forward_topk_norm = _make_lazy_cuda_func("nd_rasterize_forward_topk_norm")
24
+ nd_rasterize_backward_topk_norm = _make_lazy_cuda_func(
25
+ "nd_rasterize_backward_topk_norm"
26
+ )
27
+
28
+ rasterize_forward = _make_lazy_cuda_func("rasterize_forward")
29
+ rasterize_backward = _make_lazy_cuda_func("rasterize_backward")
30
+
31
+ compute_cov2d_bounds = _make_lazy_cuda_func("compute_cov2d_bounds")
32
+ project_gaussians_2d_scale_rot_forward = _make_lazy_cuda_func(
33
+ "project_gaussians_2d_scale_rot_forward"
34
+ )
35
+ project_gaussians_2d_scale_rot_backward = _make_lazy_cuda_func(
36
+ "project_gaussians_2d_scale_rot_backward"
37
+ )
38
+ map_gaussian_to_intersects = _make_lazy_cuda_func("map_gaussian_to_intersects")
39
+ get_tile_bin_edges = _make_lazy_cuda_func("get_tile_bin_edges")
gsplat/src/gsplat/cuda/_backend.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Backend module for gsplat CUDA extensions.
3
+
4
+ This module imports the pre-compiled CUDA extension that was built during installation.
5
+ No more JIT compilation - the extension is built once during pip install.
6
+ """
7
+
8
+ from rich.console import Console
9
+
10
+
11
+ _C = None
12
+
13
+ try:
14
+ # Import the pre-compiled CUDA extension built during installation
15
+ import csrc as _C
16
+
17
+ except ImportError as e:
18
+ Console().print(f"[red]Failed to import gsplat CUDA extension: {e}[/red]")
19
+ Console().print(
20
+ "[yellow]This likely means the package was not properly compiled during installation.[/yellow]"
21
+ )
22
+ Console().print(
23
+ "[yellow]Try reinstalling gsplat with: pip install --force-reinstall --no-deps gsplat[/yellow]"
24
+ )
25
+ raise RuntimeError(
26
+ "gsplat CUDA extension not found. Please reinstall the package with CUDA support."
27
+ ) from e
28
+
29
+ if _C is None:
30
+ raise RuntimeError("gsplat CUDA extension failed to load")
31
+
32
+
33
+ __all__ = ["_C"]
gsplat/src/gsplat/cuda/csrc/backward.cu ADDED
@@ -0,0 +1,578 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "backward.cuh"
2
+ #include "helpers.cuh"
3
+ #include <cooperative_groups.h>
4
+ #include <cooperative_groups/reduce.h>
5
+ namespace cg = cooperative_groups;
6
+
7
+ inline __device__ void warpSum3(float3& val, cg::thread_block_tile<32>& tile){
8
+ val.x = cg::reduce(tile, val.x, cg::plus<float>());
9
+ val.y = cg::reduce(tile, val.y, cg::plus<float>());
10
+ val.z = cg::reduce(tile, val.z, cg::plus<float>());
11
+ }
12
+
13
+ inline __device__ void warpSum2(float2& val, cg::thread_block_tile<32>& tile){
14
+ val.x = cg::reduce(tile, val.x, cg::plus<float>());
15
+ val.y = cg::reduce(tile, val.y, cg::plus<float>());
16
+ }
17
+
18
+ inline __device__ void warpSum(float& val, cg::thread_block_tile<32>& tile){
19
+ val = cg::reduce(tile, val, cg::plus<float>());
20
+ }
21
+
22
+ __global__ void nd_rasterize_backward_kernel(
23
+ const dim3 tile_bounds,
24
+ const dim3 img_size,
25
+ const unsigned channels,
26
+ const int32_t* __restrict__ gaussians_ids_sorted,
27
+ const int2* __restrict__ tile_bins,
28
+ const float2* __restrict__ xys,
29
+ const float3* __restrict__ conics,
30
+ const float* __restrict__ rgbs,
31
+ const float* __restrict__ v_output,
32
+ float2* __restrict__ v_xy,
33
+ float3* __restrict__ v_conic,
34
+ float* __restrict__ v_rgb
35
+ ) {
36
+
37
+ auto block = cg::this_thread_block();
38
+ int32_t tile_id =
39
+ block.group_index().y * tile_bounds.x + block.group_index().x;
40
+ unsigned i =
41
+ block.group_index().y * block.group_dim().y + block.thread_index().y;
42
+ unsigned j =
43
+ block.group_index().x * block.group_dim().x + block.thread_index().x;
44
+
45
+ const float px = (float)j;
46
+ const float py = (float)i;
47
+ // clamp this value to the last pixel
48
+ const int32_t pix_id = min(i * img_size.x + j, img_size.x * img_size.y - 1);
49
+
50
+ // keep not rasterizing threads around for reading data
51
+ const bool inside = (i < img_size.y && j < img_size.x);
52
+
53
+ // have all threads in tile process the same gaussians in batches
54
+ // first collect gaussians between range.x and range.y in batches
55
+ // which gaussians to look through in this tile
56
+ const int2 range = tile_bins[tile_id];
57
+ const int num_batches = (range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE;
58
+
59
+ __shared__ int32_t id_batch[BLOCK_SIZE];
60
+ __shared__ float2 xy_batch[BLOCK_SIZE];
61
+ __shared__ float3 conic_batch[BLOCK_SIZE];
62
+ __shared__ float rgbs_batch[BLOCK_SIZE][MAX_CHANNELS];
63
+
64
+ // df/d_out for this pixel
65
+ const float *v_out = &(v_output[channels * pix_id]);
66
+
67
+ // collect and process batches of gaussians
68
+ // each thread loads one gaussian at a time before rasterizing
69
+
70
+ bool valid = inside;
71
+ const int tr = block.thread_rank();
72
+ cg::thread_block_tile<32> warp = cg::tiled_partition<32>(block);
73
+ for (int b = 0; b < num_batches; ++b) {
74
+ // resync all threads before writing next batch of shared mem
75
+ block.sync();
76
+
77
+ // each thread fetch 1 gaussian from front to back
78
+ int batch_start = range.x + BLOCK_SIZE * b;
79
+ int idx = batch_start + tr;
80
+ if (idx < range.y) {
81
+ int32_t g_id = gaussians_ids_sorted[idx];
82
+ id_batch[tr] = g_id;
83
+ const float2 xy = xys[g_id];
84
+ xy_batch[tr] = {xy.x, xy.y};
85
+ conic_batch[tr] = conics[g_id];
86
+ for (int c = 0; c < channels; ++c)
87
+ rgbs_batch[tr][c] = rgbs[channels * g_id + c];
88
+ }
89
+
90
+ // wait for other threads to collect the gaussians in batch
91
+ block.sync();
92
+
93
+ // process gaussians in the current batch for this pixel
94
+ int batch_size = min(BLOCK_SIZE, range.y - batch_start);
95
+ for (int t = 0; t < batch_size; ++t) {
96
+
97
+ float3 conic = conic_batch[t];
98
+ float2 xy = xy_batch[t];
99
+ float2 delta = {xy.x - px, xy.y - py};
100
+ float sigma = 0.5f * (conic.x * delta.x * delta.x +
101
+ conic.z * delta.y * delta.y) +
102
+ conic.y * delta.x * delta.y;
103
+ float d = __expf(-sigma);
104
+ if (sigma < 0.f || isnan(sigma) || isinf(sigma)) {
105
+ valid = 0;
106
+ }
107
+
108
+ float v_rgb_local[MAX_CHANNELS] = {0.f};
109
+ float3 v_conic_local = {0.f, 0.f, 0.f};
110
+ float2 v_xy_local = {0.f, 0.f};
111
+
112
+ if (valid) {
113
+ // update v_rgb for this gaussian
114
+ for (int c = 0; c < channels; ++c)
115
+ v_rgb_local[c] = d * v_out[c];
116
+
117
+ const float* rgb = rgbs_batch[t];
118
+ // update v_sigma for this gaussian
119
+ float v_sigma = 0.f;
120
+ for (int c = 0; c < channels; ++c)
121
+ v_sigma += rgb[c] * v_out[c];
122
+ v_sigma *= -d;
123
+
124
+ // update v_conic for this gaussian
125
+ v_conic_local = {0.5f * v_sigma * delta.x * delta.x,
126
+ v_sigma * delta.x * delta.y,
127
+ 0.5f * v_sigma * delta.y * delta.y};
128
+ // update v_xy for this gaussian
129
+ v_xy_local = {v_sigma * (conic.x * delta.x + conic.y * delta.y),
130
+ v_sigma * (conic.y * delta.x + conic.z * delta.y)};
131
+ }
132
+
133
+ // sum across the warp
134
+ for (int c = 0; c < channels; ++c)
135
+ warpSum(v_rgb_local[c], warp);
136
+ warpSum3(v_conic_local, warp);
137
+ warpSum2(v_xy_local, warp);
138
+
139
+ if (warp.thread_rank() == 0) {
140
+ int32_t g = id_batch[t];
141
+ float* v_rgb_ptr = (float*)(v_rgb);
142
+ for (int c = 0; c < channels; ++c)
143
+ atomicAdd(v_rgb_ptr + channels * g + c, v_rgb_local[c]);
144
+
145
+ float* v_conic_ptr = (float*)(v_conic);
146
+ atomicAdd(v_conic_ptr + 3*g + 0, v_conic_local.x);
147
+ atomicAdd(v_conic_ptr + 3*g + 1, v_conic_local.y);
148
+ atomicAdd(v_conic_ptr + 3*g + 2, v_conic_local.z);
149
+
150
+ float* v_xy_ptr = (float*)(v_xy);
151
+ atomicAdd(v_xy_ptr + 2*g + 0, v_xy_local.x);
152
+ atomicAdd(v_xy_ptr + 2*g + 1, v_xy_local.y);
153
+ }
154
+ }
155
+ }
156
+ }
157
+
158
+ __global__ void nd_rasterize_backward_topk_norm_kernel(
159
+ const dim3 tile_bounds,
160
+ const dim3 img_size,
161
+ const unsigned channels,
162
+ const int32_t* __restrict__ gaussians_ids_sorted,
163
+ const int2* __restrict__ tile_bins,
164
+ const float2* __restrict__ xys,
165
+ const float3* __restrict__ conics,
166
+ const float* __restrict__ rgbs,
167
+ const float* __restrict__ v_output,
168
+ float2* __restrict__ v_xy,
169
+ float3* __restrict__ v_conic,
170
+ float* __restrict__ v_rgb,
171
+ int* __restrict__ pixel_topk
172
+ ) {
173
+
174
+ auto block = cg::this_thread_block();
175
+ int32_t tile_id =
176
+ block.group_index().y * tile_bounds.x + block.group_index().x;
177
+ unsigned i =
178
+ block.group_index().y * block.group_dim().y + block.thread_index().y;
179
+ unsigned j =
180
+ block.group_index().x * block.group_dim().x + block.thread_index().x;
181
+
182
+ const float px = (float)j;
183
+ const float py = (float)i;
184
+ // clamp this value to the last pixel
185
+ const int32_t pix_id = min(i * img_size.x + j, img_size.x * img_size.y - 1);
186
+
187
+ // keep not rasterizing threads around for reading data
188
+ const bool inside = (i < img_size.y && j < img_size.x);
189
+ if (!inside) return;
190
+
191
+ // df/d_out for this pixel
192
+ const float* v_out = &(v_output[channels * pix_id]);
193
+ // topk gs id for this pixel
194
+ const int* topk = &pixel_topk[pix_id * TOP_K];
195
+
196
+ // compute the normalization factor
197
+
198
+ float d_local[TOP_K] = {0.0f};
199
+ float denom = EPS;
200
+ int cnt = 0;
201
+ for (int k = 0; k < TOP_K; ++k) {
202
+ int g_id = topk[k];
203
+ if (g_id < 0) continue;
204
+ ++cnt;
205
+ float3 conic = conics[g_id];
206
+ float2 xy = xys[g_id];
207
+ float2 delta = {xy.x - px, xy.y - py};
208
+ float sigma = 0.5f * (conic.x * delta.x * delta.x +
209
+ conic.z * delta.y * delta.y) +
210
+ conic.y * delta.x * delta.y;
211
+ float d = __expf(-sigma);
212
+ denom += d;
213
+ d_local[k] = d;
214
+ }
215
+ // if (cnt > 1) {printf("cnt: %d\n", cnt);}
216
+
217
+ float v_d_local[TOP_K] = {0.f};
218
+
219
+ // compute each gaussian's contribution to the gradient
220
+ for (int k = 0; k < TOP_K; ++k) {
221
+ int g_id = topk[k];
222
+ if (g_id < 0) continue;
223
+
224
+ float d = d_local[k];
225
+ float norm_d = d / denom;
226
+ float v_rgb_local[MAX_CHANNELS] = {0.f};
227
+
228
+ // update v_rgb for this gaussian
229
+ for (int c = 0; c < channels; ++c)
230
+ v_rgb_local[c] = norm_d * v_out[c];
231
+
232
+ const float* rgb = &rgbs[channels * g_id];
233
+ float* v_rgb_ptr = (float*)(v_rgb);
234
+ for (int c = 0; c < channels; ++c)
235
+ atomicAdd(v_rgb_ptr + channels * g_id + c, v_rgb_local[c]);
236
+
237
+ float v_norm_d = 0.f;
238
+ for (int c = 0; c < channels; ++c)
239
+ v_norm_d += rgb[c] * v_out[c];
240
+
241
+ float tmp = -d / (denom*denom) * v_norm_d;
242
+ for (int l = 0; l < TOP_K; ++l) {
243
+ if (l == k) {
244
+ v_d_local[l] += v_norm_d/denom + tmp;
245
+ }
246
+ else {
247
+ v_d_local[l] += tmp;
248
+ }
249
+ }
250
+ }
251
+
252
+ for (int k = 0; k < TOP_K; ++k) {
253
+ int g_id = topk[k];
254
+ if (g_id < 0) continue;
255
+
256
+ const float* rgb = &rgbs[channels * g_id];
257
+ float v_sigma = 0.f;
258
+ v_sigma = v_d_local[k];
259
+ v_sigma *= -d_local[k];
260
+
261
+ float3 conic = conics[g_id];
262
+ float2 xy = xys[g_id];
263
+ float2 delta = {xy.x - px, xy.y - py};
264
+
265
+ // update v_conic for this gaussian
266
+ float3 v_conic_local = {0.5f * v_sigma * delta.x * delta.x,
267
+ v_sigma * delta.x * delta.y,
268
+ 0.5f * v_sigma * delta.y * delta.y};
269
+
270
+ // update v_xy for this gaussian
271
+ float2 v_xy_local = {v_sigma * (conic.x * delta.x + conic.y * delta.y),
272
+ v_sigma * (conic.y * delta.x + conic.z * delta.y)};
273
+
274
+
275
+ float* v_conic_ptr = (float*)(v_conic);
276
+ atomicAdd(v_conic_ptr + 3*g_id + 0, v_conic_local.x);
277
+ atomicAdd(v_conic_ptr + 3*g_id + 1, v_conic_local.y);
278
+ atomicAdd(v_conic_ptr + 3*g_id + 2, v_conic_local.z);
279
+
280
+ float* v_xy_ptr = (float*)(v_xy);
281
+ atomicAdd(v_xy_ptr + 2*g_id + 0, v_xy_local.x);
282
+ atomicAdd(v_xy_ptr + 2*g_id + 1, v_xy_local.y);
283
+ }
284
+ }
285
+
286
+ __global__ void nd_rasterize_backward_no_tiles_kernel(
287
+ const dim3 img_size,
288
+ const unsigned channels,
289
+ const float2* __restrict__ xys,
290
+ const float3* __restrict__ conics,
291
+ const float* __restrict__ rgbs,
292
+ const float* __restrict__ v_output,
293
+ float2* __restrict__ v_xy,
294
+ float3* __restrict__ v_conic,
295
+ float* __restrict__ v_rgb,
296
+ int* __restrict__ pixel_topk
297
+ ) {
298
+
299
+ auto block = cg::this_thread_block();
300
+ unsigned i =
301
+ block.group_index().y * block.group_dim().y + block.thread_index().y;
302
+ unsigned j =
303
+ block.group_index().x * block.group_dim().x + block.thread_index().x;
304
+
305
+ const float px = (float)j;
306
+ const float py = (float)i;
307
+ // clamp this value to the last pixel
308
+ const int32_t pix_id = min(i * img_size.x + j, img_size.x * img_size.y - 1);
309
+
310
+ // keep not rasterizing threads around for reading data
311
+ const bool inside = (i < img_size.y && j < img_size.x);
312
+ if (!inside) return;
313
+
314
+ // df/d_out for this pixel
315
+ const float* v_out = &(v_output[channels * pix_id]);
316
+ // topk gs id for this pixel
317
+ const int* topk = &pixel_topk[pix_id * TOP_K];
318
+
319
+ // compute the normalization factor
320
+
321
+ float d_local[TOP_K] = {0.0f};
322
+ float denom = EPS_no_tiles;
323
+ int cnt = 0;
324
+ for (int k = 0; k < TOP_K; ++k) {
325
+ int g_id = topk[k];
326
+ if (g_id < 0) continue;
327
+ ++cnt;
328
+ float3 conic = conics[g_id];
329
+ float2 xy = xys[g_id];
330
+ float2 delta = {xy.x - px, xy.y - py};
331
+ float sigma = 0.5f * (conic.x * delta.x * delta.x +
332
+ conic.z * delta.y * delta.y) +
333
+ conic.y * delta.x * delta.y;
334
+ float d = __expf(-sigma);
335
+ denom += d;
336
+ d_local[k] = d;
337
+ }
338
+
339
+ float v_d_local[TOP_K] = {0.f};
340
+
341
+ // compute each gaussian's contribution to the gradient
342
+ for (int k = 0; k < TOP_K; ++k) {
343
+ int g_id = topk[k];
344
+ if (g_id < 0) continue;
345
+
346
+ float d = d_local[k];
347
+ float norm_d = d / denom;
348
+ float v_rgb_local[MAX_CHANNELS] = {0.f};
349
+
350
+ // update v_rgb for this gaussian
351
+ for (int c = 0; c < channels; ++c)
352
+ v_rgb_local[c] = norm_d * v_out[c];
353
+
354
+ const float* rgb = &rgbs[channels * g_id];
355
+ float* v_rgb_ptr = (float*)(v_rgb);
356
+ for (int c = 0; c < channels; ++c)
357
+ atomicAdd(v_rgb_ptr + channels * g_id + c, v_rgb_local[c]);
358
+
359
+ float v_norm_d = 0.f;
360
+ for (int c = 0; c < channels; ++c)
361
+ v_norm_d += rgb[c] * v_out[c];
362
+
363
+ float tmp = -d / (denom*denom) * v_norm_d;
364
+ for (int l = 0; l < TOP_K; ++l) {
365
+ if (l == k) {
366
+ v_d_local[l] += v_norm_d/denom + tmp;
367
+ }
368
+ else {
369
+ v_d_local[l] += tmp;
370
+ }
371
+ }
372
+ }
373
+
374
+ for (int k = 0; k < TOP_K; ++k) {
375
+ int g_id = topk[k];
376
+ if (g_id < 0) continue;
377
+
378
+ const float* rgb = &rgbs[channels * g_id];
379
+ float v_sigma = 0.f;
380
+ v_sigma = v_d_local[k];
381
+ v_sigma *= -d_local[k];
382
+
383
+ float3 conic = conics[g_id];
384
+ float2 xy = xys[g_id];
385
+ float2 delta = {xy.x - px, xy.y - py};
386
+
387
+ // update v_conic for this gaussian
388
+ float3 v_conic_local = {0.5f * v_sigma * delta.x * delta.x,
389
+ v_sigma * delta.x * delta.y,
390
+ 0.5f * v_sigma * delta.y * delta.y};
391
+
392
+ // update v_xy for this gaussian
393
+ float2 v_xy_local = {v_sigma * (conic.x * delta.x + conic.y * delta.y),
394
+ v_sigma * (conic.y * delta.x + conic.z * delta.y)};
395
+
396
+
397
+ float* v_conic_ptr = (float*)(v_conic);
398
+ atomicAdd(v_conic_ptr + 3*g_id + 0, v_conic_local.x);
399
+ atomicAdd(v_conic_ptr + 3*g_id + 1, v_conic_local.y);
400
+ atomicAdd(v_conic_ptr + 3*g_id + 2, v_conic_local.z);
401
+
402
+ float* v_xy_ptr = (float*)(v_xy);
403
+ atomicAdd(v_xy_ptr + 2*g_id + 0, v_xy_local.x);
404
+ atomicAdd(v_xy_ptr + 2*g_id + 1, v_xy_local.y);
405
+ }
406
+ }
407
+
408
+ __global__ void rasterize_backward_kernel(
409
+ const dim3 tile_bounds,
410
+ const dim3 img_size,
411
+ const int32_t* __restrict__ gaussian_ids_sorted,
412
+ const int2* __restrict__ tile_bins,
413
+ const float2* __restrict__ xys,
414
+ const float3* __restrict__ conics,
415
+ const float3* __restrict__ rgbs,
416
+ const float3* __restrict__ v_output,
417
+ float2* __restrict__ v_xy,
418
+ float3* __restrict__ v_conic,
419
+ float3* __restrict__ v_rgb
420
+ ) {
421
+ auto block = cg::this_thread_block();
422
+ int32_t tile_id =
423
+ block.group_index().y * tile_bounds.x + block.group_index().x;
424
+ unsigned i =
425
+ block.group_index().y * block.group_dim().y + block.thread_index().y;
426
+ unsigned j =
427
+ block.group_index().x * block.group_dim().x + block.thread_index().x;
428
+
429
+ const float px = (float)j;
430
+ const float py = (float)i;
431
+ // clamp this value to the last pixel
432
+ const int32_t pix_id = min(i * img_size.x + j, img_size.x * img_size.y - 1);
433
+
434
+ // keep not rasterizing threads around for reading data
435
+ const bool inside = (i < img_size.y && j < img_size.x);
436
+
437
+ // have all threads in tile process the same gaussians in batches
438
+ // first collect gaussians between range.x and range.y in batches
439
+ // which gaussians to look through in this tile
440
+ const int2 range = tile_bins[tile_id];
441
+ const int num_batches = (range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE;
442
+
443
+ __shared__ int32_t id_batch[BLOCK_SIZE];
444
+ __shared__ float2 xy_batch[BLOCK_SIZE];
445
+ __shared__ float3 conic_batch[BLOCK_SIZE];
446
+ __shared__ float3 rgbs_batch[BLOCK_SIZE];
447
+
448
+ // df/d_out for this pixel
449
+ const float3 v_out = v_output[pix_id];
450
+
451
+ // collect and process batches of gaussians
452
+ // each thread loads one gaussian at a time before rasterizing
453
+ bool valid = inside;
454
+ const int tr = block.thread_rank();
455
+ cg::thread_block_tile<32> warp = cg::tiled_partition<32>(block);
456
+ for (int b = 0; b < num_batches; ++b) {
457
+ // resync all threads before writing next batch of shared mem
458
+ block.sync();
459
+
460
+ // each thread fetch 1 gaussian from front to back
461
+ int batch_start = range.x + BLOCK_SIZE * b;
462
+ int idx = batch_start + tr;
463
+ if (idx < range.y) {
464
+ int32_t g_id = gaussian_ids_sorted[idx];
465
+ id_batch[tr] = g_id;
466
+ const float2 xy = xys[g_id];
467
+ xy_batch[tr] = {xy.x, xy.y};
468
+ conic_batch[tr] = conics[g_id];
469
+ rgbs_batch[tr] = rgbs[g_id];
470
+ }
471
+
472
+ // wait for other threads to collect the gaussians in batch
473
+ block.sync();
474
+
475
+ // process gaussians in the current batch for this pixel
476
+ int batch_size = min(BLOCK_SIZE, range.y - batch_start);
477
+ for (int t = 0; t < batch_size; ++t) {
478
+
479
+ float3 conic = conic_batch[t];
480
+ float2 xy = xy_batch[t];
481
+ float2 delta = {xy.x - px, xy.y - py};
482
+ float sigma = 0.5f * (conic.x * delta.x * delta.x +
483
+ conic.z * delta.y * delta.y) +
484
+ conic.y * delta.x * delta.y;
485
+ float d = __expf(-sigma);
486
+ if (sigma < 0.f || isnan(sigma) || isinf(sigma)) {
487
+ valid = 0;
488
+ }
489
+
490
+ float3 v_rgb_local = {0.f, 0.f, 0.f};
491
+ float3 v_conic_local = {0.f, 0.f, 0.f};
492
+ float2 v_xy_local = {0.f, 0.f};
493
+
494
+ if (valid) {
495
+ // update v_rgb for this gaussian
496
+ v_rgb_local = {d * v_out.x, d * v_out.y, d * v_out.z};
497
+
498
+ const float3 rgb = rgbs_batch[t];
499
+ // update v_sigma for this gaussian
500
+ const float v_sigma = (
501
+ rgb.x * v_out.x +
502
+ rgb.y * v_out.y +
503
+ rgb.z * v_out.z
504
+ ) * (-d);
505
+ // update v_conic for this gaussian
506
+ v_conic_local = {0.5f * v_sigma * delta.x * delta.x,
507
+ v_sigma * delta.x * delta.y,
508
+ 0.5f * v_sigma * delta.y * delta.y};
509
+ // update v_xy for this gaussian
510
+ v_xy_local = {v_sigma * (conic.x * delta.x + conic.y * delta.y),
511
+ v_sigma * (conic.y * delta.x + conic.z * delta.y)};
512
+ }
513
+
514
+ // sum across the warp
515
+ warpSum3(v_rgb_local, warp);
516
+ warpSum3(v_conic_local, warp);
517
+ warpSum2(v_xy_local, warp);
518
+
519
+ if (warp.thread_rank() == 0) {
520
+ int32_t g = id_batch[t];
521
+ float* v_rgb_ptr = (float*)(v_rgb);
522
+ atomicAdd(v_rgb_ptr + 3*g + 0, v_rgb_local.x);
523
+ atomicAdd(v_rgb_ptr + 3*g + 1, v_rgb_local.y);
524
+ atomicAdd(v_rgb_ptr + 3*g + 2, v_rgb_local.z);
525
+
526
+ float* v_conic_ptr = (float*)(v_conic);
527
+ atomicAdd(v_conic_ptr + 3*g + 0, v_conic_local.x);
528
+ atomicAdd(v_conic_ptr + 3*g + 1, v_conic_local.y);
529
+ atomicAdd(v_conic_ptr + 3*g + 2, v_conic_local.z);
530
+
531
+ float* v_xy_ptr = (float*)(v_xy);
532
+ atomicAdd(v_xy_ptr + 2*g + 0, v_xy_local.x);
533
+ atomicAdd(v_xy_ptr + 2*g + 1, v_xy_local.y);
534
+ }
535
+ }
536
+ }
537
+ }
538
+
539
+
540
+ // given cotangent v in output space (e.g. d_L/d_cov3d) in R(6)
541
+ // compute vJp for scale and rotation
542
+ __device__ void scale_rot_to_cov3d_vjp(
543
+ const float3 scale,
544
+ const float glob_scale,
545
+ const float4 quat,
546
+ const float* __restrict__ v_cov3d,
547
+ float3& __restrict__ v_scale,
548
+ float4& __restrict__ v_quat
549
+ ) {
550
+ // cov3d is upper triangular elements of matrix
551
+ // off-diagonal elements count grads from both ij and ji elements,
552
+ // must halve when expanding back into symmetric matrix
553
+ glm::mat3 v_V = glm::mat3(
554
+ v_cov3d[0],
555
+ 0.5 * v_cov3d[1],
556
+ 0.5 * v_cov3d[2],
557
+ 0.5 * v_cov3d[1],
558
+ v_cov3d[3],
559
+ 0.5 * v_cov3d[4],
560
+ 0.5 * v_cov3d[2],
561
+ 0.5 * v_cov3d[4],
562
+ v_cov3d[5]
563
+ );
564
+ glm::mat3 R = quat_to_rotmat(quat);
565
+ glm::mat3 S = scale_to_mat(scale, glob_scale);
566
+ glm::mat3 M = R * S;
567
+ // https://math.stackexchange.com/a/3850121
568
+ // for D = W * X, G = df/dD
569
+ // df/dW = G * XT, df/dX = WT * G
570
+ glm::mat3 v_M = 2.f * v_V * M;
571
+ // glm::mat3 v_S = glm::transpose(R) * v_M;
572
+ v_scale.x = (float)glm::dot(R[0], v_M[0]);
573
+ v_scale.y = (float)glm::dot(R[1], v_M[1]);
574
+ v_scale.z = (float)glm::dot(R[2], v_M[2]);
575
+
576
+ glm::mat3 v_R = v_M * S;
577
+ v_quat = quat_to_rotmat_vjp(quat, v_R);
578
+ }
gsplat/src/gsplat/cuda/csrc/backward.cuh ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <cuda.h>
2
+ #include <cuda_runtime.h>
3
+ #include <cstdint>
4
+
5
+
6
+ // compute jacobians of output image wrt binned and sorted gaussians
7
+ __global__ void nd_rasterize_backward_kernel(
8
+ const dim3 tile_bounds,
9
+ const dim3 img_size,
10
+ const unsigned channels,
11
+ const int32_t* __restrict__ gaussians_ids_sorted,
12
+ const int2* __restrict__ tile_bins,
13
+ const float2* __restrict__ xys,
14
+ const float3* __restrict__ conics,
15
+ const float* __restrict__ rgbs,
16
+ const float* __restrict__ v_output,
17
+ float2* __restrict__ v_xy,
18
+ float3* __restrict__ v_conic,
19
+ float* __restrict__ v_rgb
20
+ );
21
+
22
+ __global__ void nd_rasterize_backward_topk_norm_kernel(
23
+ const dim3 tile_bounds,
24
+ const dim3 img_size,
25
+ const unsigned channels,
26
+ const int32_t* __restrict__ gaussians_ids_sorted,
27
+ const int2* __restrict__ tile_bins,
28
+ const float2* __restrict__ xys,
29
+ const float3* __restrict__ conics,
30
+ const float* __restrict__ rgbs,
31
+ const float* __restrict__ v_output,
32
+ float2* __restrict__ v_xy,
33
+ float3* __restrict__ v_conic,
34
+ float* __restrict__ v_rgb,
35
+ int* __restrict__ pixel_topk
36
+ );
37
+
38
+ __global__ void nd_rasterize_backward_no_tiles_kernel(
39
+ const dim3 img_size,
40
+ const unsigned channels,
41
+ const float2* __restrict__ xys,
42
+ const float3* __restrict__ conics,
43
+ const float* __restrict__ rgbs,
44
+ const float* __restrict__ v_output,
45
+ float2* __restrict__ v_xy,
46
+ float3* __restrict__ v_conic,
47
+ float* __restrict__ v_rgb,
48
+ int* __restrict__ pixel_topk
49
+ );
50
+
51
+
52
+ __global__ void rasterize_backward_kernel(
53
+ const dim3 tile_bounds,
54
+ const dim3 img_size,
55
+ const int32_t* __restrict__ gaussian_ids_sorted,
56
+ const int2* __restrict__ tile_bins,
57
+ const float2* __restrict__ xys,
58
+ const float3* __restrict__ conics,
59
+ const float3* __restrict__ rgbs,
60
+ const float3* __restrict__ v_output,
61
+ float2* __restrict__ v_xy,
62
+ float3* __restrict__ v_conic,
63
+ float3* __restrict__ v_rgb
64
+ );
65
+
66
+
67
+ __device__ void scale_rot_to_cov3d_vjp(
68
+ const float3 scale,
69
+ const float glob_scale,
70
+ const float4 quat,
71
+ const float *v_cov3d,
72
+ float3 &v_scale,
73
+ float4 &v_quat
74
+ );
gsplat/src/gsplat/cuda/csrc/backward2d.cu ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "backward2d.cuh"
2
+ #include "helpers.cuh"
3
+ #include <cooperative_groups.h>
4
+ #include <cooperative_groups/reduce.h>
5
+ namespace cg = cooperative_groups;
6
+
7
+
8
+ __global__ void project_gaussians_2d_backward_kernel(
9
+ const int num_points,
10
+ const float2* __restrict__ means2d,
11
+ const float3* __restrict__ L_elements,
12
+ const dim3 img_size,
13
+ const int* __restrict__ radii,
14
+ const float3* __restrict__ conics,
15
+ const float2* __restrict__ v_xy,
16
+ const float* __restrict__ v_depth,
17
+ const float3* __restrict__ v_conic,
18
+ float3* __restrict__ v_cov2d,
19
+ float2* __restrict__ v_mean2d,
20
+ float3* __restrict__ v_L_elements
21
+ ) {
22
+ unsigned idx = cg::this_grid().thread_rank(); // idx of thread within grid
23
+ if (idx >= num_points || radii[idx] <= 0) {
24
+ return;
25
+ }
26
+ // get v_cov2d
27
+ cov2d_to_conic_vjp(conics[idx], v_conic[idx], v_cov2d[idx]);
28
+ // 再根据v_cov2d向前传播,计算v_L_elements
29
+ float G_11 = v_cov2d[idx].x; // dL/dSigma_11
30
+ float G_12 = v_cov2d[idx].y; // dL/dSigma_12, which is the same as dL/dSigma_21
31
+ float G_22 = v_cov2d[idx].z; // dL/dSigma_22
32
+
33
+ // Extract the individual elements of the L matrix
34
+ float l_11 = L_elements[idx].x; // L_11
35
+ float l_21 = L_elements[idx].y; // L_21
36
+ float l_22 = L_elements[idx].z; // L_22
37
+
38
+ // Calculate the gradients with respect to the elements of L
39
+ float grad_l_11 = 2 * l_11 * G_11 + 2 * G_12 * l_21; // dL/dl_11
40
+ float grad_l_21 = 2 * l_11 * G_12 + 2 * l_21 * G_22; // dL/dl_21
41
+ float grad_l_22 = 2 * l_22 * G_22; // dL/dl_22
42
+
43
+ // Store the gradients back to the output gradient array
44
+ v_L_elements[idx].x = grad_l_11;
45
+ v_L_elements[idx].y = grad_l_21;
46
+ v_L_elements[idx].z = grad_l_22;
47
+
48
+ v_mean2d[idx].x = v_xy[idx].x * (0.5f * img_size.x);
49
+ v_mean2d[idx].y = v_xy[idx].y * (0.5f * img_size.y);
50
+
51
+ }
52
+
53
+ __global__ void project_gaussians_2d_scale_rot_backward_kernel(
54
+ const int num_points,
55
+ const float2* __restrict__ means2d,
56
+ const float2* __restrict__ scales2d,
57
+ const float* __restrict__ rotation,
58
+ const dim3 img_size,
59
+ const int* __restrict__ radii,
60
+ const float3* __restrict__ conics,
61
+ const float2* __restrict__ v_xy,
62
+ const float3* __restrict__ v_conic,
63
+ float3* __restrict__ v_cov2d,
64
+ float2* __restrict__ v_mean2d,
65
+ float2* __restrict__ v_scale,
66
+ float* __restrict__ v_rot
67
+ ) {
68
+ unsigned idx = cg::this_grid().thread_rank(); // idx of thread within grid
69
+ if (idx >= num_points || radii[idx] <= 0) {
70
+ return;
71
+ }
72
+ // get v_cov2d
73
+ cov2d_to_conic_vjp(conics[idx], v_conic[idx], v_cov2d[idx]);
74
+
75
+ glm::mat2 R = rotmat2d(rotation[idx]);
76
+ glm::mat2 R_g = rotmat2d_gradient(rotation[idx]);
77
+ glm::mat2 S = scale_to_mat2d(scales2d[idx]);
78
+ glm::mat2 M = R * S;
79
+ glm::mat2 theta_g = R_g * S * glm::transpose(M) + M * glm::transpose(S) * glm::transpose(R_g);
80
+
81
+ glm::mat2 scale_x_g = glm::mat2(0.f);
82
+ scale_x_g[0][0] = 2.f * scales2d[idx].x;
83
+ glm::mat2 scale_y_g = glm::mat2(0.f);
84
+ scale_y_g[1][1] = 2.f * scales2d[idx].y;
85
+
86
+ glm::mat2 sigma_x_g = R * scale_x_g * glm::transpose(R);
87
+ glm::mat2 sigma_y_g = R * scale_y_g * glm::transpose(R);
88
+
89
+ float G_11 = v_cov2d[idx].x; // dL/dSigma_11
90
+ float G_12 = v_cov2d[idx].y; // dL/dSigma_12, which is the same as dL/dSigma_21
91
+ float G_22 = v_cov2d[idx].z; // dL/dSigma_22
92
+
93
+ v_scale[idx].x = G_11 * sigma_x_g[0][0] + 2 * G_12 * sigma_x_g[0][1] + G_22 * sigma_x_g[1][1];
94
+ v_scale[idx].y = G_11 * sigma_y_g[0][0] + 2 * G_12 * sigma_y_g[0][1] + G_22 * sigma_y_g[1][1];
95
+ v_rot[idx] = G_11 * theta_g[0][0] + 2 * G_12 * theta_g[0][1] + G_22 * theta_g[1][1];
96
+
97
+ // gt v_mean2d
98
+ v_mean2d[idx].x = v_xy[idx].x * img_size.x;
99
+ v_mean2d[idx].y = v_xy[idx].y * img_size.y;
100
+
101
+ }
gsplat/src/gsplat/cuda/csrc/backward2d.cuh ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <cuda.h>
2
+ #include <cuda_runtime.h>
3
+ #include <cstdint>
4
+
5
+ __global__ void project_gaussians_2d_backward_kernel(
6
+ const int num_gaussians,
7
+ const float2* __restrict__ means2d,
8
+ const float3* __restrict__ L_elements,
9
+ const dim3 img_size,
10
+ const int* __restrict__ radii,
11
+ const float3* __restrict__ conics,
12
+ const float2* __restrict__ v_xy,
13
+ const float* __restrict__ v_depth,
14
+ const float3* __restrict__ v_conic,
15
+ float3* __restrict__ v_cov2d,
16
+ float2* __restrict__ v_mean2d,
17
+ float3* __restrict__ v_L_elements
18
+ );
19
+
20
+ __global__ void project_gaussians_2d_scale_rot_backward_kernel(
21
+ const int num_points,
22
+ const float2* __restrict__ means2d,
23
+ const float2* __restrict__ scales2d,
24
+ const float* __restrict__ rotation,
25
+ const dim3 img_size,
26
+ const int* __restrict__ radii,
27
+ const float3* __restrict__ conics,
28
+ const float2* __restrict__ v_xy,
29
+ const float3* __restrict__ v_conic,
30
+ float3* __restrict__ v_cov2d,
31
+ float2* __restrict__ v_mean2d,
32
+ float2* __restrict__ v_scale,
33
+ float* __restrict__ v_rot
34
+ );
gsplat/src/gsplat/cuda/csrc/bindings.cu ADDED
@@ -0,0 +1,814 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "backward.cuh"
2
+ #include "bindings.h"
3
+ #include "forward.cuh"
4
+ #include "forward2d.cuh"
5
+ #include "backward2d.cuh"
6
+ #include "helpers.cuh"
7
+ #include <cooperative_groups.h>
8
+ #include <cooperative_groups/reduce.h>
9
+ #include <cstdio>
10
+ #include <cuda.h>
11
+ #include <cuda_runtime.h>
12
+ #include <cuda_runtime_api.h>
13
+ #include <iostream>
14
+ #include <math.h>
15
+ #include <torch/extension.h>
16
+ #include <tuple>
17
+
18
+ namespace cg = cooperative_groups;
19
+
20
+ __global__ void compute_cov2d_bounds_kernel(
21
+ const unsigned num_pts, const float* __restrict__ covs2d, float* __restrict__ conics, float* __restrict__ radii
22
+ ) {
23
+ unsigned row = cg::this_grid().thread_rank();
24
+ if (row >= num_pts) {
25
+ return;
26
+ }
27
+ int index = row * 3;
28
+ float3 conic;
29
+ float radius;
30
+ float3 cov2d{
31
+ (float)covs2d[index], (float)covs2d[index + 1], (float)covs2d[index + 2]
32
+ };
33
+ compute_cov2d_bounds(cov2d, conic, radius);
34
+ conics[index] = conic.x;
35
+ conics[index + 1] = conic.y;
36
+ conics[index + 2] = conic.z;
37
+ radii[row] = radius;
38
+ }
39
+
40
+ std::tuple<
41
+ torch::Tensor, // output conics
42
+ torch::Tensor> // output radii
43
+ compute_cov2d_bounds_tensor(const int num_pts, torch::Tensor &covs2d) {
44
+ CHECK_INPUT(covs2d);
45
+ torch::Tensor conics = torch::zeros(
46
+ {num_pts, covs2d.size(1)}, covs2d.options().dtype(torch::kFloat32)
47
+ );
48
+ torch::Tensor radii =
49
+ torch::zeros({num_pts, 1}, covs2d.options().dtype(torch::kFloat32));
50
+
51
+ int blocks = (num_pts + N_THREADS - 1) / N_THREADS;
52
+
53
+ compute_cov2d_bounds_kernel<<<blocks, N_THREADS>>>(
54
+ num_pts,
55
+ covs2d.contiguous().data_ptr<float>(),
56
+ conics.contiguous().data_ptr<float>(),
57
+ radii.contiguous().data_ptr<float>()
58
+ );
59
+ return std::make_tuple(conics, radii);
60
+ }
61
+
62
+ std::tuple<torch::Tensor, torch::Tensor> map_gaussian_to_intersects_tensor(
63
+ const int num_points,
64
+ const int num_intersects,
65
+ const torch::Tensor &xys,
66
+ const torch::Tensor &radii,
67
+ const torch::Tensor &cum_tiles_hit,
68
+ const std::tuple<int, int, int> tile_bounds
69
+ ) {
70
+ CHECK_INPUT(xys);
71
+ CHECK_INPUT(radii);
72
+ CHECK_INPUT(cum_tiles_hit);
73
+
74
+ dim3 tile_bounds_dim3;
75
+ tile_bounds_dim3.x = std::get<0>(tile_bounds);
76
+ tile_bounds_dim3.y = std::get<1>(tile_bounds);
77
+
78
+ torch::Tensor gaussian_ids_unsorted =
79
+ torch::zeros({num_intersects}, xys.options().dtype(torch::kInt32));
80
+ torch::Tensor isect_ids_unsorted =
81
+ torch::zeros({num_intersects}, xys.options().dtype(torch::kInt64));
82
+
83
+ map_gaussian_to_intersects<<<
84
+ (num_points + N_THREADS - 1) / N_THREADS,
85
+ N_THREADS>>>(
86
+ num_points,
87
+ (float2 *)xys.contiguous().data_ptr<float>(),
88
+ radii.contiguous().data_ptr<int32_t>(),
89
+ cum_tiles_hit.contiguous().data_ptr<int32_t>(),
90
+ tile_bounds_dim3,
91
+ // Outputs.
92
+ isect_ids_unsorted.contiguous().data_ptr<int64_t>(),
93
+ gaussian_ids_unsorted.contiguous().data_ptr<int32_t>()
94
+ );
95
+
96
+ return std::make_tuple(isect_ids_unsorted, gaussian_ids_unsorted);
97
+ }
98
+
99
+ torch::Tensor get_tile_bin_edges_tensor(
100
+ int num_intersects, int num_tiles, const torch::Tensor &isect_ids_sorted
101
+ ) {
102
+ CHECK_INPUT(isect_ids_sorted);
103
+ torch::Tensor tile_bins = torch::zeros(
104
+ {num_tiles, 2}, isect_ids_sorted.options().dtype(torch::kInt32)
105
+ );
106
+ get_tile_bin_edges<<<
107
+ (num_intersects + N_THREADS - 1) / N_THREADS,
108
+ N_THREADS>>>(
109
+ num_intersects,
110
+ isect_ids_sorted.contiguous().data_ptr<int64_t>(),
111
+ (int2 *)tile_bins.contiguous().data_ptr<int>()
112
+ );
113
+ CUDA_CALL(cudaDeviceSynchronize());
114
+ return tile_bins;
115
+ }
116
+
117
+ std::tuple<
118
+ torch::Tensor
119
+ > rasterize_forward_tensor(
120
+ const std::tuple<int, int, int> tile_bounds,
121
+ const std::tuple<int, int, int> block,
122
+ const std::tuple<int, int, int> img_size,
123
+ const torch::Tensor &gaussian_ids_sorted,
124
+ const torch::Tensor &tile_bins,
125
+ const torch::Tensor &xys,
126
+ const torch::Tensor &conics,
127
+ const torch::Tensor &colors
128
+ ) {
129
+ CHECK_INPUT(gaussian_ids_sorted);
130
+ CHECK_INPUT(tile_bins);
131
+ CHECK_INPUT(xys);
132
+ CHECK_INPUT(conics);
133
+ CHECK_INPUT(colors);
134
+
135
+ dim3 tile_bounds_dim3;
136
+ tile_bounds_dim3.x = std::get<0>(tile_bounds);
137
+ tile_bounds_dim3.y = std::get<1>(tile_bounds);
138
+ tile_bounds_dim3.z = std::get<2>(tile_bounds);
139
+
140
+ dim3 block_dim3;
141
+ block_dim3.x = std::get<0>(block);
142
+ block_dim3.y = std::get<1>(block);
143
+ block_dim3.z = std::get<2>(block);
144
+
145
+ dim3 img_size_dim3;
146
+ img_size_dim3.x = std::get<0>(img_size);
147
+ img_size_dim3.y = std::get<1>(img_size);
148
+ img_size_dim3.z = std::get<2>(img_size);
149
+
150
+ const int channels = colors.size(1);
151
+ const int img_width = img_size_dim3.x;
152
+ const int img_height = img_size_dim3.y;
153
+
154
+ torch::Tensor out_img = torch::zeros(
155
+ {img_height, img_width, channels}, xys.options().dtype(torch::kFloat32)
156
+ );
157
+
158
+ // tile: tile_w * tile_h * 1
159
+ // block: block_w * block_h * 1
160
+ // each thread processes a pixel
161
+ // each block processes a tile
162
+ rasterize_forward<<<tile_bounds_dim3, block_dim3>>>(
163
+ tile_bounds_dim3,
164
+ img_size_dim3,
165
+ gaussian_ids_sorted.contiguous().data_ptr<int32_t>(),
166
+ (int2 *)tile_bins.contiguous().data_ptr<int>(),
167
+ (float2 *)xys.contiguous().data_ptr<float>(),
168
+ (float3 *)conics.contiguous().data_ptr<float>(),
169
+ (float3 *)colors.contiguous().data_ptr<float>(),
170
+ (float3 *)out_img.contiguous().data_ptr<float>()
171
+ );
172
+
173
+ CUDA_CALL(cudaDeviceSynchronize());
174
+ return std::make_tuple(out_img);
175
+ }
176
+
177
+ std::tuple<
178
+ torch::Tensor
179
+ > nd_rasterize_forward_tensor(
180
+ const std::tuple<int, int, int> tile_bounds,
181
+ const std::tuple<int, int, int> block,
182
+ const std::tuple<int, int, int> img_size,
183
+ const torch::Tensor &gaussian_ids_sorted,
184
+ const torch::Tensor &tile_bins,
185
+ const torch::Tensor &xys,
186
+ const torch::Tensor &conics,
187
+ const torch::Tensor &colors
188
+ ) {
189
+ CHECK_INPUT(gaussian_ids_sorted);
190
+ CHECK_INPUT(tile_bins);
191
+ CHECK_INPUT(xys);
192
+ CHECK_INPUT(conics);
193
+ CHECK_INPUT(colors);
194
+
195
+ dim3 tile_bounds_dim3;
196
+ tile_bounds_dim3.x = std::get<0>(tile_bounds);
197
+ tile_bounds_dim3.y = std::get<1>(tile_bounds);
198
+ tile_bounds_dim3.z = std::get<2>(tile_bounds);
199
+
200
+ dim3 block_dim3;
201
+ block_dim3.x = std::get<0>(block);
202
+ block_dim3.y = std::get<1>(block);
203
+ block_dim3.z = std::get<2>(block);
204
+
205
+ dim3 img_size_dim3;
206
+ img_size_dim3.x = std::get<0>(img_size);
207
+ img_size_dim3.y = std::get<1>(img_size);
208
+ img_size_dim3.z = std::get<2>(img_size);
209
+
210
+ const int channels = colors.size(1);
211
+ const int img_width = img_size_dim3.x;
212
+ const int img_height = img_size_dim3.y;
213
+
214
+ torch::Tensor out_img = torch::zeros(
215
+ {img_height, img_width, channels}, xys.options().dtype(torch::kFloat32)
216
+ );
217
+
218
+ nd_rasterize_forward<<<tile_bounds_dim3, block_dim3>>>(
219
+ tile_bounds_dim3,
220
+ img_size_dim3,
221
+ channels,
222
+ gaussian_ids_sorted.contiguous().data_ptr<int32_t>(),
223
+ (int2 *)tile_bins.contiguous().data_ptr<int>(),
224
+ (float2 *)xys.contiguous().data_ptr<float>(),
225
+ (float3 *)conics.contiguous().data_ptr<float>(),
226
+ colors.contiguous().data_ptr<float>(),
227
+ out_img.contiguous().data_ptr<float>()
228
+ );
229
+ CUDA_CALL(cudaDeviceSynchronize());
230
+ return std::make_tuple(out_img);
231
+ }
232
+
233
+
234
+ std::
235
+ tuple<
236
+ torch::Tensor, // dL_dxy
237
+ torch::Tensor, // dL_dconic
238
+ torch::Tensor // dL_dcolors
239
+ >
240
+ nd_rasterize_backward_tensor(
241
+ const unsigned img_height,
242
+ const unsigned img_width,
243
+ const unsigned BLOCK_H,
244
+ const unsigned BLOCK_W,
245
+ const torch::Tensor &gaussians_ids_sorted,
246
+ const torch::Tensor &tile_bins,
247
+ const torch::Tensor &xys,
248
+ const torch::Tensor &conics,
249
+ const torch::Tensor &colors,
250
+ const torch::Tensor &v_output // dL_dout_color
251
+ ) {
252
+
253
+ CHECK_INPUT(xys);
254
+ CHECK_INPUT(colors);
255
+
256
+ if (xys.ndimension() != 2 || xys.size(1) != 2) {
257
+ AT_ERROR("xys must have dimensions (num_points, 2)");
258
+ }
259
+
260
+ if (colors.ndimension() != 2) {
261
+ AT_ERROR("colors must have 2 dimensions");
262
+ }
263
+
264
+ const int num_points = xys.size(0);
265
+ const dim3 tile_bounds = {
266
+ (img_width + BLOCK_W - 1) / BLOCK_W,
267
+ (img_height + BLOCK_H - 1) / BLOCK_H,
268
+ 1
269
+ };
270
+ const dim3 block(BLOCK_W, BLOCK_H, 1);
271
+ const dim3 img_size = {img_width, img_height, 1};
272
+ const int channels = colors.size(1);
273
+
274
+ torch::Tensor v_xy = torch::zeros({num_points, 2}, xys.options());
275
+ torch::Tensor v_conic = torch::zeros({num_points, 3}, xys.options());
276
+ torch::Tensor v_colors =
277
+ torch::zeros({num_points, channels}, xys.options());
278
+
279
+ // torch::Tensor workspace;
280
+ // if (channels > 3) {
281
+ // workspace = torch::zeros(
282
+ // {img_height, img_width, channels},
283
+ // xys.options().dtype(torch::kFloat32)
284
+ // );
285
+ // } else {
286
+ // workspace = torch::zeros({0}, xys.options().dtype(torch::kFloat32));
287
+ // }
288
+
289
+ nd_rasterize_backward_kernel<<<tile_bounds, block>>>(
290
+ tile_bounds,
291
+ img_size,
292
+ channels,
293
+ gaussians_ids_sorted.contiguous().data_ptr<int>(),
294
+ (int2 *)tile_bins.contiguous().data_ptr<int>(),
295
+ (float2 *)xys.contiguous().data_ptr<float>(),
296
+ (float3 *)conics.contiguous().data_ptr<float>(),
297
+ colors.contiguous().data_ptr<float>(),
298
+ v_output.contiguous().data_ptr<float>(),
299
+ (float2 *)v_xy.contiguous().data_ptr<float>(),
300
+ (float3 *)v_conic.contiguous().data_ptr<float>(),
301
+ v_colors.contiguous().data_ptr<float>()
302
+ );
303
+ CUDA_CALL(cudaDeviceSynchronize());
304
+ return std::make_tuple(v_xy, v_conic, v_colors);
305
+ }
306
+
307
+ std::tuple<
308
+ torch::Tensor, // out_img
309
+ torch::Tensor // pixel_topk
310
+ > nd_rasterize_forward_topk_norm_tensor(
311
+ const std::tuple<int, int, int> tile_bounds,
312
+ const std::tuple<int, int, int> block,
313
+ const std::tuple<int, int, int> img_size,
314
+ const torch::Tensor &gaussian_ids_sorted,
315
+ const torch::Tensor &tile_bins,
316
+ const torch::Tensor &xys,
317
+ const torch::Tensor &conics,
318
+ const torch::Tensor &colors
319
+ ) {
320
+ CHECK_INPUT(gaussian_ids_sorted);
321
+ CHECK_INPUT(tile_bins);
322
+ CHECK_INPUT(xys);
323
+ CHECK_INPUT(conics);
324
+ CHECK_INPUT(colors);
325
+
326
+ dim3 tile_bounds_dim3;
327
+ tile_bounds_dim3.x = std::get<0>(tile_bounds);
328
+ tile_bounds_dim3.y = std::get<1>(tile_bounds);
329
+ tile_bounds_dim3.z = std::get<2>(tile_bounds);
330
+
331
+ dim3 block_dim3;
332
+ block_dim3.x = std::get<0>(block);
333
+ block_dim3.y = std::get<1>(block);
334
+ block_dim3.z = std::get<2>(block);
335
+
336
+ dim3 img_size_dim3;
337
+ img_size_dim3.x = std::get<0>(img_size);
338
+ img_size_dim3.y = std::get<1>(img_size);
339
+ img_size_dim3.z = std::get<2>(img_size);
340
+
341
+ const int channels = colors.size(1);
342
+ const int img_width = img_size_dim3.x;
343
+ const int img_height = img_size_dim3.y;
344
+
345
+ torch::Tensor out_img = torch::zeros(
346
+ {img_height, img_width, channels}, xys.options().dtype(torch::kFloat32)
347
+ );
348
+ torch::Tensor pixel_topk = torch::zeros(
349
+ {img_height, img_width, TOP_K}, xys.options().dtype(torch::kInt32)
350
+ );
351
+
352
+ nd_rasterize_forward_topk_norm<<<tile_bounds_dim3, block_dim3>>>(
353
+ tile_bounds_dim3,
354
+ img_size_dim3,
355
+ channels,
356
+ gaussian_ids_sorted.contiguous().data_ptr<int32_t>(),
357
+ (int2 *)tile_bins.contiguous().data_ptr<int>(),
358
+ (float2 *)xys.contiguous().data_ptr<float>(),
359
+ (float3 *)conics.contiguous().data_ptr<float>(),
360
+ colors.contiguous().data_ptr<float>(),
361
+ out_img.contiguous().data_ptr<float>(),
362
+ pixel_topk.contiguous().data_ptr<int32_t>()
363
+ );
364
+ CUDA_CALL(cudaDeviceSynchronize());
365
+ return std::make_tuple(out_img, pixel_topk);
366
+ }
367
+
368
+ std::tuple<
369
+ torch::Tensor, // dL_dxy
370
+ torch::Tensor, // dL_dconic
371
+ torch::Tensor // dL_dcolors
372
+ >
373
+ nd_rasterize_backward_topk_norm_tensor(
374
+ const unsigned img_height,
375
+ const unsigned img_width,
376
+ const unsigned BLOCK_H,
377
+ const unsigned BLOCK_W,
378
+ const torch::Tensor &gaussians_ids_sorted,
379
+ const torch::Tensor &tile_bins,
380
+ const torch::Tensor &xys,
381
+ const torch::Tensor &conics,
382
+ const torch::Tensor &colors,
383
+ const torch::Tensor &v_output, // dL_dout_color
384
+ const torch::Tensor &pixel_topk
385
+ ) {
386
+ CHECK_INPUT(xys);
387
+ CHECK_INPUT(colors);
388
+ CHECK_INPUT(pixel_topk);
389
+ if (xys.ndimension() != 2 || xys.size(1) != 2) {
390
+ AT_ERROR("xys must have dimensions (num_points, 2)");
391
+ }
392
+ if (colors.ndimension() != 2) {
393
+ AT_ERROR("colors must have 2 dimensions");
394
+ }
395
+ const int num_points = xys.size(0);
396
+ const dim3 tile_bounds = {
397
+ (img_width + BLOCK_W - 1) / BLOCK_W,
398
+ (img_height + BLOCK_H - 1) / BLOCK_H,
399
+ 1
400
+ };
401
+ const dim3 block(BLOCK_W, BLOCK_H, 1);
402
+ const dim3 img_size = {img_width, img_height, 1};
403
+ const int channels = colors.size(1);
404
+ torch::Tensor v_xy = torch::zeros({num_points, 2}, xys.options());
405
+ torch::Tensor v_conic = torch::zeros({num_points, 3}, xys.options());
406
+ torch::Tensor v_colors =
407
+ torch::zeros({num_points, channels}, xys.options());
408
+ nd_rasterize_backward_topk_norm_kernel<<<tile_bounds, block>>>(
409
+ tile_bounds,
410
+ img_size,
411
+ channels,
412
+ gaussians_ids_sorted.contiguous().data_ptr<int>(),
413
+ (int2 *)tile_bins.contiguous().data_ptr<int>(),
414
+ (float2 *)xys.contiguous().data_ptr<float>(),
415
+ (float3 *)conics.contiguous().data_ptr<float>(),
416
+ colors.contiguous().data_ptr<float>(),
417
+ v_output.contiguous().data_ptr<float>(),
418
+ (float2 *)v_xy.contiguous().data_ptr<float>(),
419
+ (float3 *)v_conic.contiguous().data_ptr<float>(),
420
+ v_colors.contiguous().data_ptr<float>(),
421
+ pixel_topk.contiguous().data_ptr<int32_t>()
422
+ );
423
+ CUDA_CALL(cudaDeviceSynchronize());
424
+ return std::make_tuple(v_xy, v_conic, v_colors);
425
+ }
426
+
427
+ std::tuple<
428
+ torch::Tensor, // out_img
429
+ torch::Tensor // pixel_topk
430
+ > nd_rasterize_forward_no_tiles_tensor(
431
+ const std::tuple<int, int, int> img_size,
432
+ const unsigned num_points,
433
+ const torch::Tensor &xys,
434
+ const torch::Tensor &conics,
435
+ const torch::Tensor &colors
436
+ ) {
437
+ CHECK_INPUT(xys);
438
+ CHECK_INPUT(conics);
439
+ CHECK_INPUT(colors);
440
+
441
+ dim3 block_dim3;
442
+ block_dim3.x = 32;
443
+ block_dim3.y = 32;
444
+ block_dim3.z = 1;
445
+
446
+ dim3 img_size_dim3;
447
+ img_size_dim3.x = std::get<0>(img_size);
448
+ img_size_dim3.y = std::get<1>(img_size);
449
+ img_size_dim3.z = std::get<2>(img_size);
450
+
451
+ dim3 grid_size_dim3;
452
+ grid_size_dim3.x = (img_size_dim3.x + block_dim3.x - 1) / block_dim3.x;
453
+ grid_size_dim3.y = (img_size_dim3.y + block_dim3.y - 1) / block_dim3.y;
454
+ grid_size_dim3.z = 1;
455
+
456
+ const int channels = colors.size(1);
457
+ const int img_width = img_size_dim3.x;
458
+ const int img_height = img_size_dim3.y;
459
+
460
+ torch::Tensor out_img = torch::zeros(
461
+ {img_height, img_width, channels}, xys.options().dtype(torch::kFloat32)
462
+ );
463
+ torch::Tensor pixel_topk = torch::zeros(
464
+ {img_height, img_width, TOP_K}, xys.options().dtype(torch::kInt32)
465
+ );
466
+
467
+ nd_rasterize_forward_no_tiles<<<grid_size_dim3, block_dim3>>>(
468
+ img_size_dim3,
469
+ channels,
470
+ num_points,
471
+ (float2 *)xys.contiguous().data_ptr<float>(),
472
+ (float3 *)conics.contiguous().data_ptr<float>(),
473
+ colors.contiguous().data_ptr<float>(),
474
+ out_img.contiguous().data_ptr<float>(),
475
+ pixel_topk.contiguous().data_ptr<int32_t>()
476
+ );
477
+ CUDA_CALL(cudaDeviceSynchronize());
478
+ return std::make_tuple(out_img, pixel_topk);
479
+ }
480
+
481
+ std::tuple<
482
+ torch::Tensor, // dL_dxy
483
+ torch::Tensor, // dL_dconic
484
+ torch::Tensor // dL_dcolors
485
+ >
486
+ nd_rasterize_backward_no_tiles_tensor(
487
+ const unsigned img_height,
488
+ const unsigned img_width,
489
+ const torch::Tensor &xys,
490
+ const torch::Tensor &conics,
491
+ const torch::Tensor &colors,
492
+ const torch::Tensor &v_output, // dL_dout_color
493
+ const torch::Tensor &pixel_topk
494
+ ) {
495
+ CHECK_INPUT(xys);
496
+ CHECK_INPUT(colors);
497
+ CHECK_INPUT(pixel_topk);
498
+ if (xys.ndimension() != 2 || xys.size(1) != 2) {
499
+ AT_ERROR("xys must have dimensions (num_points, 2)");
500
+ }
501
+ if (colors.ndimension() != 2) {
502
+ AT_ERROR("colors must have 2 dimensions");
503
+ }
504
+ const int num_points = xys.size(0);
505
+ const dim3 block_size = {32, 32, 1};
506
+ const dim3 img_size = {img_width, img_height, 1};
507
+ const dim3 grid_size = {(img_width + block_size.x - 1)/block_size.x,
508
+ (img_height + block_size.y - 1)/block_size.y, 1};
509
+
510
+ const int channels = colors.size(1);
511
+ torch::Tensor v_xy = torch::zeros({num_points, 2}, xys.options());
512
+ torch::Tensor v_conic = torch::zeros({num_points, 3}, xys.options());
513
+ torch::Tensor v_colors =
514
+ torch::zeros({num_points, channels}, xys.options());
515
+ nd_rasterize_backward_no_tiles_kernel<<<grid_size, block_size>>>(
516
+ img_size,
517
+ channels,
518
+ (float2 *)xys.contiguous().data_ptr<float>(),
519
+ (float3 *)conics.contiguous().data_ptr<float>(),
520
+ colors.contiguous().data_ptr<float>(),
521
+ v_output.contiguous().data_ptr<float>(),
522
+ (float2 *)v_xy.contiguous().data_ptr<float>(),
523
+ (float3 *)v_conic.contiguous().data_ptr<float>(),
524
+ v_colors.contiguous().data_ptr<float>(),
525
+ pixel_topk.contiguous().data_ptr<int32_t>()
526
+ );
527
+ CUDA_CALL(cudaDeviceSynchronize());
528
+ return std::make_tuple(v_xy, v_conic, v_colors);
529
+ }
530
+
531
+
532
+ std::tuple<
533
+ torch::Tensor, // out_img
534
+ torch::Tensor // pixel_topk
535
+ > nd_rasterize_forward_simple_tensor(
536
+ const std::tuple<int, int, int> img_size,
537
+ const unsigned num_points,
538
+ const torch::Tensor &xys,
539
+ const torch::Tensor &scale,
540
+ const torch::Tensor &rot,
541
+ const torch::Tensor &feat
542
+ ) {
543
+ CHECK_INPUT(xys);
544
+ CHECK_INPUT(scale);
545
+ CHECK_INPUT(rot);
546
+ CHECK_INPUT(feat);
547
+
548
+ dim3 block_dim3;
549
+ block_dim3.x = 32;
550
+ block_dim3.y = 32;
551
+ block_dim3.z = 1;
552
+
553
+ dim3 img_size_dim3;
554
+ img_size_dim3.x = std::get<0>(img_size);
555
+ img_size_dim3.y = std::get<1>(img_size);
556
+ img_size_dim3.z = std::get<2>(img_size);
557
+
558
+ dim3 grid_size_dim3;
559
+ grid_size_dim3.x = (img_size_dim3.x + block_dim3.x - 1) / block_dim3.x;
560
+ grid_size_dim3.y = (img_size_dim3.y + block_dim3.y - 1) / block_dim3.y;
561
+ grid_size_dim3.z = 1;
562
+
563
+ const int channels = feat.size(1);
564
+ const int img_width = img_size_dim3.x;
565
+ const int img_height = img_size_dim3.y;
566
+
567
+ torch::Tensor out_img = torch::zeros(
568
+ {img_height, img_width, channels}, xys.options().dtype(torch::kFloat32)
569
+ );
570
+ torch::Tensor pixel_topk = torch::zeros(
571
+ {img_height, img_width, TOP_K}, xys.options().dtype(torch::kInt32)
572
+ );
573
+
574
+ // nd_rasterize_forward_no_tiles<<<grid_size_dim3, block_dim3>>>(
575
+ // img_size_dim3,
576
+ // channels,
577
+ // num_points,
578
+ // (float2 *)xys.contiguous().data_ptr<float>(),
579
+ // (float3 *)conics.contiguous().data_ptr<float>(),
580
+ // colors.contiguous().data_ptr<float>(),
581
+ // out_img.contiguous().data_ptr<float>(),
582
+ // pixel_topk.contiguous().data_ptr<int32_t>()
583
+ // );
584
+ CUDA_CALL(cudaDeviceSynchronize());
585
+ return std::make_tuple(out_img, pixel_topk);
586
+ }
587
+
588
+
589
+ std::tuple<
590
+ torch::Tensor, // dL_dxy
591
+ torch::Tensor, // dL_dscale
592
+ torch::Tensor, // dL_drot
593
+ torch::Tensor // dL_dfeat
594
+ >
595
+ nd_rasterize_backward_simple_tensor(
596
+ const unsigned img_height,
597
+ const unsigned img_width,
598
+ const torch::Tensor &xys,
599
+ const torch::Tensor &scale,
600
+ const torch::Tensor &rot,
601
+ const torch::Tensor &feat,
602
+ const torch::Tensor &v_output, // dL_dout_color
603
+ const torch::Tensor &pixel_topk
604
+ ) {
605
+ CHECK_INPUT(xys);
606
+ CHECK_INPUT(scale);
607
+ CHECK_INPUT(rot);
608
+ CHECK_INPUT(feat);
609
+ CHECK_INPUT(pixel_topk);
610
+ if (xys.ndimension() != 2 || xys.size(1) != 2) {
611
+ AT_ERROR("xys must have dimensions (num_points, 2)");
612
+ }
613
+ if (feat.ndimension() != 2) {
614
+ AT_ERROR("colors must have 2 dimensions");
615
+ }
616
+ const int num_points = xys.size(0);
617
+ const dim3 block_size = {32, 32, 1};
618
+ const dim3 img_size = {img_width, img_height, 1};
619
+ const dim3 grid_size = {(img_width + block_size.x - 1)/block_size.x,
620
+ (img_height + block_size.y - 1)/block_size.y, 1};
621
+
622
+ const int channels = feat.size(1);
623
+ torch::Tensor v_xy = torch::zeros({num_points, 2}, xys.options());
624
+ torch::Tensor v_scale = torch::zeros({num_points, 2}, xys.options());
625
+ torch::Tensor v_rot = torch::zeros({num_points, 1}, xys.options());
626
+ torch::Tensor v_feat = torch::zeros({num_points, channels}, xys.options());
627
+ // nd_rasterize_backward_no_tiles_kernel<<<grid_size, block_size>>>(
628
+ // img_size,
629
+ // channels,
630
+ // (float2 *)xys.contiguous().data_ptr<float>(),
631
+ // (float3 *)conics.contiguous().data_ptr<float>(),
632
+ // colors.contiguous().data_ptr<float>(),
633
+ // v_output.contiguous().data_ptr<float>(),
634
+ // (float2 *)v_xy.contiguous().data_ptr<float>(),
635
+ // (float3 *)v_conic.contiguous().data_ptr<float>(),
636
+ // v_colors.contiguous().data_ptr<float>(),
637
+ // pixel_topk.contiguous().data_ptr<int32_t>()
638
+ // );
639
+ CUDA_CALL(cudaDeviceSynchronize());
640
+ return std::make_tuple(v_xy, v_scale, v_rot, v_feat);
641
+ }
642
+
643
+
644
+
645
+ std::
646
+ tuple<
647
+ torch::Tensor, // dL_dxy
648
+ torch::Tensor, // dL_dconic
649
+ torch::Tensor // dL_dcolors
650
+ >
651
+ rasterize_backward_tensor(
652
+ const unsigned img_height,
653
+ const unsigned img_width,
654
+ const unsigned BLOCK_H,
655
+ const unsigned BLOCK_W,
656
+ const torch::Tensor &gaussians_ids_sorted,
657
+ const torch::Tensor &tile_bins,
658
+ const torch::Tensor &xys,
659
+ const torch::Tensor &conics,
660
+ const torch::Tensor &colors,
661
+ const torch::Tensor &v_output // dL_dout_color
662
+ ){
663
+
664
+ CHECK_INPUT(xys);
665
+ CHECK_INPUT(colors);
666
+
667
+ if (xys.ndimension() != 2 || xys.size(1) != 2) {
668
+ AT_ERROR("xys must have dimensions (num_points, 2)");
669
+ }
670
+
671
+ if (colors.ndimension() != 2 || colors.size(1) != 3) {
672
+ AT_ERROR("colors must have 2 dimensions");
673
+ }
674
+
675
+ const int num_points = xys.size(0);
676
+ const dim3 tile_bounds = {
677
+ (img_width + BLOCK_W - 1) / BLOCK_W,
678
+ (img_height + BLOCK_H - 1) / BLOCK_H,
679
+ 1
680
+ };
681
+ const dim3 block(BLOCK_W, BLOCK_H, 1);
682
+ const dim3 img_size = {img_width, img_height, 1};
683
+ const int channels = colors.size(1);
684
+
685
+ torch::Tensor v_xy = torch::zeros({num_points, 2}, xys.options());
686
+ torch::Tensor v_conic = torch::zeros({num_points, 3}, xys.options());
687
+ torch::Tensor v_colors =
688
+ torch::zeros({num_points, channels}, xys.options());
689
+
690
+ rasterize_backward_kernel<<<tile_bounds, block>>>(
691
+ tile_bounds,
692
+ img_size,
693
+ gaussians_ids_sorted.contiguous().data_ptr<int>(),
694
+ (int2 *)tile_bins.contiguous().data_ptr<int>(),
695
+ (float2 *)xys.contiguous().data_ptr<float>(),
696
+ (float3 *)conics.contiguous().data_ptr<float>(),
697
+ (float3 *)colors.contiguous().data_ptr<float>(),
698
+ (float3 *)v_output.contiguous().data_ptr<float>(),
699
+ // Outputs.
700
+ (float2 *)v_xy.contiguous().data_ptr<float>(),
701
+ (float3 *)v_conic.contiguous().data_ptr<float>(),
702
+ (float3 *)v_colors.contiguous().data_ptr<float>()
703
+ );
704
+
705
+ return std::make_tuple(v_xy, v_conic, v_colors);
706
+ }
707
+
708
+
709
+ std::tuple<
710
+ torch::Tensor,
711
+ torch::Tensor,
712
+ torch::Tensor,
713
+ torch::Tensor>
714
+ project_gaussians_2d_scale_rot_forward_tensor(
715
+ const int num_points,
716
+ torch::Tensor &means2d,
717
+ torch::Tensor &scales2d,
718
+ torch::Tensor &rotation,
719
+ const unsigned img_height,
720
+ const unsigned img_width,
721
+ const std::tuple<int, int, int> tile_bounds
722
+ ) {
723
+ dim3 img_size_dim3;
724
+ img_size_dim3.x = img_width;
725
+ img_size_dim3.y = img_height;
726
+
727
+ dim3 tile_bounds_dim3;
728
+ tile_bounds_dim3.x = std::get<0>(tile_bounds);
729
+ tile_bounds_dim3.y = std::get<1>(tile_bounds);
730
+
731
+ // Triangular covariance.
732
+ torch::Tensor xys_d =
733
+ torch::zeros({num_points, 2}, means2d.options().dtype(torch::kFloat32));
734
+ torch::Tensor radii_d =
735
+ torch::zeros({num_points}, means2d.options().dtype(torch::kInt32));
736
+ torch::Tensor conics_d =
737
+ torch::zeros({num_points, 3}, means2d.options().dtype(torch::kFloat32));
738
+ torch::Tensor num_tiles_hit_d =
739
+ torch::zeros({num_points}, means2d.options().dtype(torch::kInt32));
740
+
741
+ project_gaussians_2d_scale_rot_forward_kernel<<<
742
+ (num_points + N_THREADS - 1) / N_THREADS,
743
+ N_THREADS>>>(
744
+ num_points,
745
+ (float2 *)means2d.contiguous().data_ptr<float>(),
746
+ (float2 *)scales2d.contiguous().data_ptr<float>(),
747
+ (float *)rotation.contiguous().data_ptr<float>(),
748
+ img_size_dim3,
749
+ tile_bounds_dim3,
750
+ // Outputs.
751
+ (float2 *)xys_d.contiguous().data_ptr<float>(),
752
+ radii_d.contiguous().data_ptr<int>(),
753
+ (float3 *)conics_d.contiguous().data_ptr<float>(),
754
+ num_tiles_hit_d.contiguous().data_ptr<int32_t>()
755
+ );
756
+ CUDA_CALL(cudaDeviceSynchronize());
757
+ return std::make_tuple(
758
+ xys_d, radii_d, conics_d, num_tiles_hit_d
759
+ );
760
+ }
761
+
762
+
763
+ std::tuple<
764
+ torch::Tensor,
765
+ torch::Tensor,
766
+ torch::Tensor,
767
+ torch::Tensor>
768
+ project_gaussians_2d_scale_rot_backward_tensor(
769
+ const int num_points,
770
+ torch::Tensor &means2d,
771
+ torch::Tensor &scales2d,
772
+ torch::Tensor &rotation,
773
+ const unsigned img_height,
774
+ const unsigned img_width,
775
+ torch::Tensor &radii,
776
+ torch::Tensor &conics,
777
+ torch::Tensor &v_xy,
778
+ torch::Tensor &v_conic
779
+ ) {
780
+ dim3 img_size_dim3;
781
+ img_size_dim3.x = img_width;
782
+ img_size_dim3.y = img_height;
783
+
784
+ // Triangular covariance.
785
+ torch::Tensor v_cov2d =
786
+ torch::zeros({num_points, 3}, means2d.options().dtype(torch::kFloat32));
787
+ torch::Tensor v_scale =
788
+ torch::zeros({num_points, 2}, means2d.options().dtype(torch::kFloat32));
789
+ torch::Tensor v_rot =
790
+ torch::zeros({num_points, 1}, means2d.options().dtype(torch::kFloat32));
791
+ torch::Tensor v_mean2d =
792
+ torch::zeros({num_points, 2}, means2d.options().dtype(torch::kFloat32));
793
+
794
+ project_gaussians_2d_scale_rot_backward_kernel<<<
795
+ (num_points + N_THREADS - 1) / N_THREADS,
796
+ N_THREADS>>>(
797
+ num_points,
798
+ (float2 *)means2d.contiguous().data_ptr<float>(),
799
+ (float2 *)scales2d.contiguous().data_ptr<float>(),
800
+ (float *)rotation.contiguous().data_ptr<float>(),
801
+ img_size_dim3,
802
+ radii.contiguous().data_ptr<int32_t>(),
803
+ (float3 *)conics.contiguous().data_ptr<float>(),
804
+ (float2 *)v_xy.contiguous().data_ptr<float>(),
805
+ (float3 *)v_conic.contiguous().data_ptr<float>(),
806
+ // Outputs.
807
+ (float3 *)v_cov2d.contiguous().data_ptr<float>(),
808
+ (float2 *)v_mean2d.contiguous().data_ptr<float>(),
809
+ (float2 *)v_scale.contiguous().data_ptr<float>(),
810
+ (float *)v_rot.contiguous().data_ptr<float>()
811
+ );
812
+
813
+ return std::make_tuple(v_cov2d, v_mean2d, v_scale, v_rot);
814
+ }
gsplat/src/gsplat/cuda/csrc/bindings.h ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "cuda_runtime.h"
2
+ #include "forward.cuh"
3
+ #include <cstdio>
4
+ #include <iostream>
5
+ #include <math.h>
6
+ #include <torch/extension.h>
7
+ #include <tuple>
8
+
9
+ #define CHECK_CUDA(x) TORCH_CHECK(x.is_cuda(), #x " must be a CUDA tensor")
10
+ #define CHECK_CONTIGUOUS(x) \
11
+ TORCH_CHECK(x.is_contiguous(), #x " must be contiguous")
12
+ #define CHECK_INPUT(x) \
13
+ CHECK_CUDA(x); \
14
+ CHECK_CONTIGUOUS(x)
15
+
16
+ std::tuple<
17
+ torch::Tensor, // output conics
18
+ torch::Tensor> // output radii
19
+ compute_cov2d_bounds_tensor(const int num_pts, torch::Tensor &A);
20
+
21
+
22
+ std::tuple<torch::Tensor, torch::Tensor> map_gaussian_to_intersects_tensor(
23
+ const int num_points,
24
+ const int num_intersects,
25
+ const torch::Tensor &xys,
26
+ const torch::Tensor &radii,
27
+ const torch::Tensor &cum_tiles_hit,
28
+ const std::tuple<int, int, int> tile_bounds
29
+ );
30
+
31
+ torch::Tensor get_tile_bin_edges_tensor(
32
+ int num_intersects,
33
+ int num_tiles,
34
+ const torch::Tensor &isect_ids_sorted
35
+ );
36
+
37
+
38
+ std::tuple<
39
+ torch::Tensor
40
+ > nd_rasterize_forward_tensor(
41
+ const std::tuple<int, int, int> tile_bounds,
42
+ const std::tuple<int, int, int> block,
43
+ const std::tuple<int, int, int> img_size,
44
+ const torch::Tensor &gaussian_ids_sorted,
45
+ const torch::Tensor &tile_bins,
46
+ const torch::Tensor &xys,
47
+ const torch::Tensor &conics,
48
+ const torch::Tensor &colors
49
+ );
50
+
51
+ std::
52
+ tuple<
53
+ torch::Tensor, // dL_dxy
54
+ torch::Tensor, // dL_dconic
55
+ torch::Tensor // dL_dcolors
56
+ >
57
+ nd_rasterize_backward_tensor(
58
+ const unsigned img_height,
59
+ const unsigned img_width,
60
+ const unsigned BLOCK_H,
61
+ const unsigned BLOCK_W,
62
+ const torch::Tensor &gaussians_ids_sorted,
63
+ const torch::Tensor &tile_bins,
64
+ const torch::Tensor &xys,
65
+ const torch::Tensor &conics,
66
+ const torch::Tensor &colors,
67
+ const torch::Tensor &v_output // dL_dout_color
68
+ );
69
+
70
+ std::tuple<
71
+ torch::Tensor, // out_img
72
+ torch::Tensor // pixel_topk
73
+ > nd_rasterize_forward_topk_norm_tensor(
74
+ const std::tuple<int, int, int> tile_bounds,
75
+ const std::tuple<int, int, int> block,
76
+ const std::tuple<int, int, int> img_size,
77
+ const torch::Tensor &gaussian_ids_sorted,
78
+ const torch::Tensor &tile_bins,
79
+ const torch::Tensor &xys,
80
+ const torch::Tensor &conics,
81
+ const torch::Tensor &colors
82
+ );
83
+
84
+ std::
85
+ tuple<
86
+ torch::Tensor, // dL_dxy
87
+ torch::Tensor, // dL_dconic
88
+ torch::Tensor // dL_dcolors
89
+ >
90
+ nd_rasterize_backward_topk_norm_tensor(
91
+ const unsigned img_height,
92
+ const unsigned img_width,
93
+ const unsigned BLOCK_H,
94
+ const unsigned BLOCK_W,
95
+ const torch::Tensor &gaussians_ids_sorted,
96
+ const torch::Tensor &tile_bins,
97
+ const torch::Tensor &xys,
98
+ const torch::Tensor &conics,
99
+ const torch::Tensor &colors,
100
+ const torch::Tensor &v_output, // dL_dout_color
101
+ const torch::Tensor &pixel_topk
102
+ );
103
+
104
+ std::tuple<
105
+ torch::Tensor, // out_img
106
+ torch::Tensor // pixel_topk
107
+ > nd_rasterize_forward_no_tiles_tensor(
108
+ const std::tuple<int, int, int> img_size,
109
+ const unsigned num_points,
110
+ const torch::Tensor &xys,
111
+ const torch::Tensor &conics,
112
+ const torch::Tensor &colors
113
+ );
114
+
115
+ std::tuple<
116
+ torch::Tensor, // dL_dxy
117
+ torch::Tensor, // dL_dconic
118
+ torch::Tensor // dL_dcolors
119
+ >
120
+ nd_rasterize_backward_no_tiles_tensor(
121
+ const unsigned img_height,
122
+ const unsigned img_width,
123
+ const torch::Tensor &xys,
124
+ const torch::Tensor &conics,
125
+ const torch::Tensor &colors,
126
+ const torch::Tensor &v_output, // dL_dout_color
127
+ const torch::Tensor &pixel_topk
128
+ );
129
+
130
+ std::tuple<
131
+ torch::Tensor, // out_img
132
+ torch::Tensor // pixel_topk
133
+ > nd_rasterize_forward_simple_tensor(
134
+ const std::tuple<int, int, int> img_size,
135
+ const unsigned num_points,
136
+ const torch::Tensor &xys,
137
+ const torch::Tensor &scale,
138
+ const torch::Tensor &rot,
139
+ const torch::Tensor &feat
140
+ );
141
+
142
+ std::tuple<
143
+ torch::Tensor, // dL_dxy
144
+ torch::Tensor, // dL_dscale
145
+ torch::Tensor, // dL_drot
146
+ torch::Tensor // dL_dfeat
147
+ >
148
+ nd_rasterize_backward_simple_tensor(
149
+ const unsigned img_height,
150
+ const unsigned img_width,
151
+ const torch::Tensor &xys,
152
+ const torch::Tensor &scale,
153
+ const torch::Tensor &rot,
154
+ const torch::Tensor &feat,
155
+ const torch::Tensor &v_output, // dL_dout_color
156
+ const torch::Tensor &pixel_topk
157
+ );
158
+
159
+
160
+ std::tuple<
161
+ torch::Tensor
162
+ > rasterize_forward_tensor(
163
+ const std::tuple<int, int, int> tile_bounds,
164
+ const std::tuple<int, int, int> block,
165
+ const std::tuple<int, int, int> img_size,
166
+ const torch::Tensor &gaussian_ids_sorted,
167
+ const torch::Tensor &tile_bins,
168
+ const torch::Tensor &xys,
169
+ const torch::Tensor &conics,
170
+ const torch::Tensor &colors
171
+ );
172
+
173
+ std::
174
+ tuple<
175
+ torch::Tensor, // dL_dxy
176
+ torch::Tensor, // dL_dconic
177
+ torch::Tensor // dL_dcolors
178
+ >
179
+ rasterize_backward_tensor(
180
+ const unsigned img_height,
181
+ const unsigned img_width,
182
+ const unsigned BLOCK_H,
183
+ const unsigned BLOCK_W,
184
+ const torch::Tensor &gaussians_ids_sorted,
185
+ const torch::Tensor &tile_bins,
186
+ const torch::Tensor &xys,
187
+ const torch::Tensor &conics,
188
+ const torch::Tensor &colors,
189
+ const torch::Tensor &v_output // dL_dout_color
190
+ );
191
+
192
+
193
+ std::tuple<
194
+ torch::Tensor,
195
+ torch::Tensor,
196
+ torch::Tensor,
197
+ torch::Tensor>
198
+ project_gaussians_2d_scale_rot_forward_tensor(
199
+ const int num_points,
200
+ torch::Tensor &means2d,
201
+ torch::Tensor &scales2d,
202
+ torch::Tensor &rotation,
203
+ const unsigned img_height,
204
+ const unsigned img_width,
205
+ const std::tuple<int, int, int> tile_bounds
206
+ );
207
+
208
+ std::tuple<
209
+ torch::Tensor,
210
+ torch::Tensor,
211
+ torch::Tensor,
212
+ torch::Tensor>
213
+ project_gaussians_2d_scale_rot_backward_tensor(
214
+ const int num_points,
215
+ torch::Tensor &means2d,
216
+ torch::Tensor &scales2d,
217
+ torch::Tensor &rotation,
218
+ const unsigned img_height,
219
+ const unsigned img_width,
220
+ torch::Tensor &radii,
221
+ torch::Tensor &conics,
222
+ torch::Tensor &v_xy,
223
+ torch::Tensor &v_conic
224
+ );
gsplat/src/gsplat/cuda/csrc/config.h ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #define BLOCK_X 16
2
+ #define BLOCK_Y 16
3
+ #define BLOCK_SIZE (BLOCK_X * BLOCK_Y)
4
+ #define N_THREADS 256
5
+
6
+ #define MAX_REGISTER_CHANNELS 3
7
+ #define MAX_CHANNELS 12
8
+ #define TOP_K 10
9
+ #define EPS 1e-4
10
+ #define EPS_no_tiles 1e-7
11
+
12
+
13
+ #define CUDA_CALL(x) \
14
+ do { \
15
+ if ((x) != cudaSuccess) { \
16
+ printf( \
17
+ "Error at %s:%d - %s\n", \
18
+ __FILE__, \
19
+ __LINE__, \
20
+ cudaGetErrorString(cudaGetLastError()) \
21
+ ); \
22
+ exit(EXIT_FAILURE); \
23
+ } \
24
+ } while (0)
gsplat/src/gsplat/cuda/csrc/ext.cpp ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "bindings.h"
2
+ #include <torch/extension.h>
3
+
4
+ PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
5
+ // auto diff functions
6
+ m.def("nd_rasterize_forward", &nd_rasterize_forward_tensor);
7
+ m.def("nd_rasterize_backward", &nd_rasterize_backward_tensor);
8
+
9
+ m.def("nd_rasterize_forward_topk_norm", &nd_rasterize_forward_topk_norm_tensor);
10
+ m.def("nd_rasterize_backward_topk_norm", &nd_rasterize_backward_topk_norm_tensor);
11
+
12
+ m.def("nd_rasterize_forward_no_tiles", &nd_rasterize_forward_no_tiles_tensor);
13
+ m.def("nd_rasterize_backward_no_tiles", &nd_rasterize_backward_no_tiles_tensor);
14
+
15
+ m.def("nd_rasterize_forward_simple", &nd_rasterize_forward_simple_tensor);
16
+ m.def("nd_rasterize_backward_simple", &nd_rasterize_backward_simple_tensor);
17
+
18
+ m.def("rasterize_forward", &rasterize_forward_tensor);
19
+ m.def("rasterize_backward", &rasterize_backward_tensor);
20
+
21
+ m.def("project_gaussians_2d_scale_rot_forward", &project_gaussians_2d_scale_rot_forward_tensor);
22
+ m.def("project_gaussians_2d_scale_rot_backward", &project_gaussians_2d_scale_rot_backward_tensor);
23
+
24
+ // utils
25
+ m.def("compute_cov2d_bounds", &compute_cov2d_bounds_tensor);
26
+ m.def("map_gaussian_to_intersects", &map_gaussian_to_intersects_tensor);
27
+ m.def("get_tile_bin_edges", &get_tile_bin_edges_tensor);
28
+ }
gsplat/src/gsplat/cuda/csrc/forward.cu ADDED
@@ -0,0 +1,588 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "forward.cuh"
2
+ #include "helpers.cuh"
3
+ #include <algorithm>
4
+ #include <cooperative_groups.h>
5
+ #include <cooperative_groups/reduce.h>
6
+ #include <iostream>
7
+
8
+ namespace cg = cooperative_groups;
9
+
10
+ // kernel to map each intersection from tile ID and depth to a gaussian
11
+ // writes output to isect_ids and gaussian_ids
12
+ __global__ void map_gaussian_to_intersects(
13
+ const int num_points,
14
+ const float2* __restrict__ xys,
15
+ const int* __restrict__ radii,
16
+ const int32_t* __restrict__ cum_tiles_hit,
17
+ const dim3 tile_bounds,
18
+ int64_t* __restrict__ isect_ids,
19
+ int32_t* __restrict__ gaussian_ids
20
+ ) {
21
+ unsigned idx = cg::this_grid().thread_rank();
22
+ if (idx >= num_points)
23
+ return;
24
+ if (radii[idx] <= 0)
25
+ return;
26
+ // get the tile bbox for gaussian
27
+ uint2 tile_min, tile_max;
28
+ float2 center = xys[idx];
29
+ get_tile_bbox(center, radii[idx], tile_bounds, tile_min, tile_max);
30
+
31
+ // update the intersection info for all tiles this gaussian hits
32
+ int32_t cur_idx = (idx == 0) ? 0 : cum_tiles_hit[idx - 1];
33
+ int64_t depth_id = 0;
34
+ for (int i = tile_min.y; i < tile_max.y; ++i) {
35
+ for (int j = tile_min.x; j < tile_max.x; ++j) {
36
+ // isect_id is tile ID and depth as int32
37
+ int64_t tile_id = i * tile_bounds.x + j; // tile within image
38
+ isect_ids[cur_idx] = (tile_id << 32) | depth_id; // tile | depth id
39
+ gaussian_ids[cur_idx] = idx; // 3D gaussian id
40
+ ++cur_idx; // handles gaussians that hit more than one tile
41
+ }
42
+ }
43
+ }
44
+
45
+ // kernel to map sorted intersection IDs to tile bins
46
+ // expect that intersection IDs are sorted by increasing tile ID
47
+ // i.e. intersections of a tile are in contiguous chunks
48
+ __global__ void get_tile_bin_edges(
49
+ const int num_intersects, const int64_t* __restrict__ isect_ids_sorted, int2* __restrict__ tile_bins
50
+ ) {
51
+ unsigned idx = cg::this_grid().thread_rank();
52
+ if (idx >= num_intersects)
53
+ return;
54
+ // save the indices where the tile_id changes
55
+ int32_t cur_tile_idx = (int32_t)(isect_ids_sorted[idx] >> 32);
56
+ if (idx == 0 || idx == num_intersects - 1) {
57
+ if (idx == 0)
58
+ tile_bins[cur_tile_idx].x = 0;
59
+ if (idx == num_intersects - 1)
60
+ tile_bins[cur_tile_idx].y = num_intersects;
61
+ }
62
+ if (idx == 0)
63
+ return;
64
+ int32_t prev_tile_idx = (int32_t)(isect_ids_sorted[idx - 1] >> 32);
65
+ if (prev_tile_idx != cur_tile_idx) {
66
+ tile_bins[prev_tile_idx].y = idx;
67
+ tile_bins[cur_tile_idx].x = idx;
68
+ return;
69
+ }
70
+ }
71
+
72
+ // kernel function for rasterizing each tile
73
+ // each thread treats a single pixel
74
+ // each thread group uses the same gaussian data in a tile
75
+ __global__ void nd_rasterize_forward(
76
+ const dim3 tile_bounds,
77
+ const dim3 img_size,
78
+ const unsigned channels,
79
+ const int32_t* __restrict__ gaussian_ids_sorted,
80
+ const int2* __restrict__ tile_bins,
81
+ const float2* __restrict__ xys,
82
+ const float3* __restrict__ conics,
83
+ const float* __restrict__ colors,
84
+ float* __restrict__ out_img
85
+ ) {
86
+ auto block = cg::this_thread_block();
87
+ int32_t tile_id =
88
+ block.group_index().y * tile_bounds.x + block.group_index().x;
89
+ unsigned i =
90
+ block.group_index().y * block.group_dim().y + block.thread_index().y;
91
+ unsigned j =
92
+ block.group_index().x * block.group_dim().x + block.thread_index().x;
93
+
94
+ float px = (float)j;
95
+ float py = (float)i;
96
+ int32_t pix_id = i * img_size.x + j;
97
+ bool inside = (i < img_size.y && j < img_size.x);
98
+ bool done = !inside;
99
+
100
+ // have all threads in tile process the same gaussians in batches
101
+ // first collect gaussians between range.x and range.y in batches
102
+ // which gaussians to look through in this tile
103
+ int2 range = tile_bins[tile_id];
104
+ int num_batches = (range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE;
105
+
106
+ __shared__ int32_t id_batch[BLOCK_SIZE];
107
+ __shared__ float2 xy_batch[BLOCK_SIZE];
108
+ __shared__ float3 conic_batch[BLOCK_SIZE];
109
+
110
+ // collect and process batches of gaussians
111
+ // each thread loads one gaussian at a time before rasterizing its
112
+ // designated pixel
113
+ int tr = block.thread_rank();
114
+
115
+ // **** max 12 channels for speed ***
116
+ float pix_out[MAX_CHANNELS] = {0.f};
117
+
118
+ for (int b = 0; b < num_batches; ++b) {
119
+ // resync all threads before beginning next batch
120
+ // end early if entire tile is done
121
+ if (__syncthreads_count(done) >= BLOCK_SIZE) {
122
+ break;
123
+ }
124
+
125
+ // each thread fetch 1 gaussian from front to back
126
+ // index of gaussian to load
127
+ int batch_start = range.x + BLOCK_SIZE * b;
128
+ int idx = batch_start + tr;
129
+ if (idx < range.y) {
130
+ int32_t g_id = gaussian_ids_sorted[idx];
131
+ id_batch[tr] = g_id;
132
+ const float2 xy = xys[g_id];
133
+ xy_batch[tr] = {xy.x, xy.y};
134
+ conic_batch[tr] = conics[g_id];
135
+ }
136
+
137
+ // wait for other threads to collect the gaussians in batch
138
+ block.sync();
139
+
140
+ // process gaussians in the current batch for this pixel
141
+ int batch_size = min(BLOCK_SIZE, range.y - batch_start);
142
+ for (int t = 0; (t < batch_size) && !done; ++t) {
143
+ const float3 conic = conic_batch[t];
144
+ const float2 xy = xy_batch[t];
145
+ const float2 delta = {xy.x - px, xy.y - py};
146
+ const float sigma = 0.5f * (conic.x * delta.x * delta.x +
147
+ conic.z * delta.y * delta.y) +
148
+ conic.y * delta.x * delta.y;
149
+
150
+ if (sigma < 0.f || isnan(sigma) || isinf(sigma)) {
151
+ continue;
152
+ }
153
+
154
+ const float alpha = __expf(-sigma);
155
+ int32_t g = id_batch[t];
156
+ const float vis = alpha;
157
+
158
+ for (int c = 0; c < channels; ++c) {
159
+ pix_out[c] += colors[g * channels + c] * vis;
160
+ }
161
+ }
162
+ }
163
+
164
+ if (inside) {
165
+ for (int c = 0; c < channels; ++c) {
166
+ out_img[pix_id * channels + c] = pix_out[c];
167
+ }
168
+ }
169
+ }
170
+
171
+ __global__ void nd_rasterize_forward_topk_norm(
172
+ const dim3 tile_bounds,
173
+ const dim3 img_size,
174
+ const unsigned channels,
175
+ const int32_t* __restrict__ gaussian_ids_sorted,
176
+ const int2* __restrict__ tile_bins,
177
+ const float2* __restrict__ xys,
178
+ const float3* __restrict__ conics,
179
+ const float* __restrict__ colors,
180
+ float* __restrict__ out_img,
181
+ int* __restrict__ pixel_topk
182
+ ) {
183
+ auto block = cg::this_thread_block();
184
+ int32_t tile_id =
185
+ block.group_index().y * tile_bounds.x + block.group_index().x;
186
+ unsigned i =
187
+ block.group_index().y * block.group_dim().y + block.thread_index().y;
188
+ unsigned j =
189
+ block.group_index().x * block.group_dim().x + block.thread_index().x;
190
+
191
+ float px = (float)j;
192
+ float py = (float)i;
193
+ int32_t pix_id = i * img_size.x + j;
194
+ bool inside = (i < img_size.y && j < img_size.x);
195
+ bool done = !inside;
196
+
197
+ // have all threads in tile process the same gaussians in batches
198
+ // first collect gaussians between range.x and range.y in batches
199
+ // which gaussians to look through in this tile
200
+ int2 range = tile_bins[tile_id];
201
+ int num_batches = (range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE;
202
+
203
+ __shared__ int32_t id_batch[BLOCK_SIZE];
204
+ __shared__ float2 xy_batch[BLOCK_SIZE];
205
+ __shared__ float3 conic_batch[BLOCK_SIZE];
206
+
207
+ // collect and process batches of gaussians
208
+ // each thread loads one gaussian at a time before rasterizing its
209
+ // designated pixel
210
+ int tr = block.thread_rank();
211
+
212
+ // **** max 12 channels for speed ***
213
+ float pix_out[MAX_CHANNELS] = {0.f};
214
+
215
+ // top k Gaussian ids
216
+ int32_t topk[TOP_K];
217
+ float topk_vals[TOP_K] = {0.f};
218
+ for (int k = 0; k < TOP_K; ++k)
219
+ topk[k] = -1;
220
+
221
+ for (int b = 0; b < num_batches; ++b) {
222
+ // resync all threads before beginning next batch
223
+ // end early if entire tile is done
224
+ if (__syncthreads_count(done) >= BLOCK_SIZE) {
225
+ break;
226
+ }
227
+
228
+ // each thread fetch 1 gaussian from front to back
229
+ // index of gaussian to load
230
+ int batch_start = range.x + BLOCK_SIZE * b;
231
+ int idx = batch_start + tr;
232
+ if (idx < range.y) {
233
+ int32_t g_id = gaussian_ids_sorted[idx];
234
+ id_batch[tr] = g_id;
235
+ const float2 xy = xys[g_id];
236
+ xy_batch[tr] = {xy.x, xy.y};
237
+ conic_batch[tr] = conics[g_id];
238
+ }
239
+
240
+ // wait for other threads to collect the gaussians in batch
241
+ block.sync();
242
+
243
+ // process gaussians in the current batch for this pixel
244
+ int batch_size = min(BLOCK_SIZE, range.y - batch_start);
245
+ for (int t = 0; (t < batch_size) && !done; ++t) {
246
+ const float3 conic = conic_batch[t];
247
+ const float2 xy = xy_batch[t];
248
+ const float2 delta = {xy.x - px, xy.y - py};
249
+ const float sigma = 0.5f * (conic.x * delta.x * delta.x +
250
+ conic.z * delta.y * delta.y) +
251
+ conic.y * delta.x * delta.y;
252
+
253
+ if (sigma < 0.f || isnan(sigma) || isinf(sigma)) {
254
+ continue;
255
+ }
256
+
257
+ const float alpha = __expf(-sigma);
258
+ int32_t g = id_batch[t];
259
+
260
+ // find the minimum value in topk
261
+ int32_t min_topk_id = -1;
262
+ float min_topk_val = 1e30f;
263
+ for (int32_t k = 0; k < TOP_K; ++k) {
264
+ if (topk[k] < 0) {
265
+ min_topk_id = k;
266
+ min_topk_val = -1.0f;
267
+ break;
268
+ } else if (topk_vals[k] < min_topk_val) {
269
+ min_topk_id = k;
270
+ min_topk_val = topk_vals[k];
271
+ }
272
+ }
273
+ if (alpha > min_topk_val) {
274
+ topk[min_topk_id] = g;
275
+ topk_vals[min_topk_id] = alpha;
276
+ }
277
+ }
278
+ }
279
+
280
+ for (int c = 0; c < channels; ++c) {
281
+ float sum_val = 0.f;
282
+ for (int k = 0; k < TOP_K; ++k) {
283
+ if (topk[k] < 0) continue;
284
+ sum_val += topk_vals[k];
285
+ }
286
+ for (int k = 0; k < TOP_K; ++k) {
287
+ int32_t g = topk[k];
288
+ if (g < 0) continue;
289
+ // normalize by sum of topk values
290
+ float vis = topk_vals[k] / (sum_val + EPS);
291
+ pix_out[c] += colors[g * channels + c] * vis;
292
+ }
293
+ }
294
+
295
+ if (inside) {
296
+ for (int c = 0; c < channels; ++c) {
297
+ out_img[pix_id * channels + c] = pix_out[c];
298
+ }
299
+ for (int k = 0; k < TOP_K; ++k) {
300
+ pixel_topk[pix_id * TOP_K + k] = topk[k];
301
+ }
302
+ }
303
+ }
304
+
305
+ __global__ void nd_rasterize_forward_no_tiles(
306
+ const dim3 img_size,
307
+ const unsigned channels,
308
+ const unsigned num_points,
309
+ const float2* __restrict__ xys,
310
+ const float3* __restrict__ conics,
311
+ const float* __restrict__ colors,
312
+ float* __restrict__ out_img,
313
+ int* __restrict__ pixel_topk
314
+ ) {
315
+ auto block = cg::this_thread_block();
316
+ unsigned i =
317
+ block.group_index().y * block.group_dim().y + block.thread_index().y;
318
+ unsigned j =
319
+ block.group_index().x * block.group_dim().x + block.thread_index().x;
320
+
321
+ float px = (float)j;
322
+ float py = (float)i;
323
+ int32_t pix_id = i * img_size.x + j;
324
+ bool inside = (i < img_size.y && j < img_size.x);
325
+ bool done = !inside;
326
+
327
+ // **** max 12 channels for speed ***
328
+ float pix_out[MAX_CHANNELS] = {0.f};
329
+
330
+ // top k Gaussian ids
331
+ int32_t topk[TOP_K];
332
+ float topk_vals[TOP_K] = {0.f};
333
+ for (int k = 0; k < TOP_K; ++k)
334
+ topk[k] = -1;
335
+
336
+ for (int g = 0; g < num_points; ++g) {
337
+ const float3 conic = conics[g];
338
+ const float2 xy = xys[g];
339
+ const float2 delta = {xy.x - px, xy.y - py};
340
+ const float sigma = 0.5f * (conic.x * delta.x * delta.x +
341
+ conic.z * delta.y * delta.y) +
342
+ conic.y * delta.x * delta.y;
343
+
344
+ if (sigma < 0.f || isnan(sigma) || isinf(sigma)) {
345
+ continue;
346
+ }
347
+
348
+ const float alpha = __expf(-sigma);
349
+ int32_t g_id = g;
350
+
351
+ // find the minimum value in topk
352
+ int32_t min_topk_id = -1;
353
+ float min_topk_val = 1e30f;
354
+ for (int32_t k = 0; k < TOP_K; ++k) {
355
+ if (topk[k] < 0) {
356
+ min_topk_id = k;
357
+ min_topk_val = -1.0f;
358
+ break;
359
+ } else if (topk_vals[k] < min_topk_val) {
360
+ min_topk_id = k;
361
+ min_topk_val = topk_vals[k];
362
+ }
363
+ }
364
+ if (alpha > min_topk_val) {
365
+ topk[min_topk_id] = g_id;
366
+ topk_vals[min_topk_id] = alpha;
367
+ }
368
+ }
369
+
370
+ for (int c = 0; c < channels; ++c) {
371
+ float sum_val = 0.f;
372
+ for (int k = 0; k < TOP_K; ++k) {
373
+ if (topk[k] < 0) continue;
374
+ sum_val += topk_vals[k];
375
+ }
376
+ for (int k = 0; k < TOP_K; ++k) {
377
+ int32_t g = topk[k];
378
+ if (g < 0) continue;
379
+ // normalize by sum of topk values
380
+ float vis = topk_vals[k] / (sum_val + EPS_no_tiles);
381
+ pix_out[c] += colors[g * channels + c] * vis;
382
+ }
383
+ }
384
+
385
+ if (inside) {
386
+ for (int c = 0; c < channels; ++c) {
387
+ out_img[pix_id * channels + c] = pix_out[c];
388
+ }
389
+ for (int k = 0; k < TOP_K; ++k) {
390
+ pixel_topk[pix_id * TOP_K + k] = topk[k];
391
+ }
392
+ }
393
+ }
394
+
395
+ __global__ void rasterize_forward(
396
+ const dim3 tile_bounds,
397
+ const dim3 img_size,
398
+ const int32_t* __restrict__ gaussian_ids_sorted,
399
+ const int2* __restrict__ tile_bins,
400
+ const float2* __restrict__ xys,
401
+ const float3* __restrict__ conics,
402
+ const float3* __restrict__ colors,
403
+ float3* __restrict__ out_img
404
+ ) {
405
+ // each thread draws one pixel, but also timeshares caching gaussians in a
406
+ // shared tile
407
+
408
+ auto block = cg::this_thread_block();
409
+ int32_t tile_id =
410
+ block.group_index().y * tile_bounds.x + block.group_index().x;
411
+ unsigned i =
412
+ block.group_index().y * block.group_dim().y + block.thread_index().y;
413
+ unsigned j =
414
+ block.group_index().x * block.group_dim().x + block.thread_index().x;
415
+
416
+ float px = (float)j;
417
+ float py = (float)i;
418
+ int32_t pix_id = i * img_size.x + j;
419
+
420
+ // return if out of bounds
421
+ // keep not rasterizing threads around for reading data
422
+ bool inside = (i < img_size.y && j < img_size.x);
423
+ bool done = !inside;
424
+
425
+ // have all threads in tile process the same gaussians in batches
426
+ // first collect gaussians between range.x and range.y in batches
427
+ // which gaussians to look through in this tile
428
+ int2 range = tile_bins[tile_id];
429
+ int num_batches = (range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE;
430
+
431
+ __shared__ int32_t id_batch[BLOCK_SIZE];
432
+ __shared__ float2 xy_batch[BLOCK_SIZE];
433
+ __shared__ float3 conic_batch[BLOCK_SIZE];
434
+
435
+ // index of most recent gaussian to write to this thread's pixel
436
+ int cur_idx = 0;
437
+
438
+ // collect and process batches of gaussians
439
+ // each thread loads one gaussian at a time before rasterizing its
440
+ // designated pixel
441
+ int tr = block.thread_rank();
442
+ float3 pix_out = {0.f, 0.f, 0.f};
443
+ for (int b = 0; b < num_batches; ++b) {
444
+ // resync all threads before beginning next batch
445
+ // end early if entire tile is done
446
+ if (__syncthreads_count(done) >= BLOCK_SIZE) {
447
+ break;
448
+ }
449
+
450
+ // each thread fetch 1 gaussian from front to back
451
+ // index of gaussian to load
452
+ int batch_start = range.x + BLOCK_SIZE * b;
453
+ int idx = batch_start + tr;
454
+ if (idx < range.y) {
455
+ int32_t g_id = gaussian_ids_sorted[idx];
456
+ id_batch[tr] = g_id;
457
+ const float2 xy = xys[g_id];
458
+ xy_batch[tr] = {xy.x, xy.y};
459
+ conic_batch[tr] = conics[g_id];
460
+ }
461
+
462
+ // wait for other threads to collect the gaussians in batch
463
+ block.sync();
464
+
465
+ // process gaussians in the current batch for this pixel
466
+ int batch_size = min(BLOCK_SIZE, range.y - batch_start);
467
+ for (int t = 0; (t < batch_size) && !done; ++t) {
468
+ const float3 conic = conic_batch[t];
469
+ const float2 xy = xy_batch[t];
470
+ const float2 delta = {xy.x - px, xy.y - py};
471
+ const float sigma = 0.5f * (conic.x * delta.x * delta.x +
472
+ conic.z * delta.y * delta.y) +
473
+ conic.y * delta.x * delta.y;
474
+
475
+ // const float alpha = min(1.f, __expf(-sigma));
476
+ if (sigma < 0.f || isnan(sigma) || isinf(sigma)) {
477
+ // printf("wrong value sigma %f delta %f %f conic %f %f %f\n",
478
+ // sigma, delta.x, delta.y, conic.x, conic.y, conic.z);
479
+ continue;
480
+ }
481
+
482
+ const float alpha = __expf(-sigma);
483
+ int32_t g = id_batch[t];
484
+ const float vis = alpha;
485
+ const float3 c = colors[g];
486
+ pix_out.x = pix_out.x + c.x * vis;
487
+ pix_out.y = pix_out.y + c.y * vis;
488
+ pix_out.z = pix_out.z + c.z * vis;
489
+ cur_idx = batch_start + t;
490
+ }
491
+ }
492
+
493
+ if (inside) {
494
+ out_img[pix_id] = pix_out;
495
+ }
496
+ }
497
+
498
+ // device helper to approximate projected 2d cov from 3d mean and cov
499
+ __device__ float3 project_cov3d_ewa(
500
+ const float3& __restrict__ mean3d,
501
+ const float* __restrict__ cov3d,
502
+ const float* __restrict__ viewmat,
503
+ const float fx,
504
+ const float fy,
505
+ const float tan_fovx,
506
+ const float tan_fovy
507
+ ) {
508
+ // clip the
509
+ // we expect row major matrices as input, glm uses column major
510
+ // upper 3x3 submatrix
511
+ glm::mat3 W = glm::mat3(
512
+ viewmat[0],
513
+ viewmat[4],
514
+ viewmat[8],
515
+ viewmat[1],
516
+ viewmat[5],
517
+ viewmat[9],
518
+ viewmat[2],
519
+ viewmat[6],
520
+ viewmat[10]
521
+ );
522
+ glm::vec3 p = glm::vec3(viewmat[3], viewmat[7], viewmat[11]);
523
+ glm::vec3 t = W * glm::vec3(mean3d.x, mean3d.y, mean3d.z) + p;
524
+
525
+ // clip so that the covariance
526
+ float lim_x = 1.3f * tan_fovx;
527
+ float lim_y = 1.3f * tan_fovy;
528
+ t.x = t.z * std::min(lim_x, std::max(-lim_x, t.x / t.z));
529
+ t.y = t.z * std::min(lim_y, std::max(-lim_y, t.y / t.z));
530
+
531
+ float rz = 1.f / t.z;
532
+ float rz2 = rz * rz;
533
+
534
+ // column major
535
+ // we only care about the top 2x2 submatrix
536
+ glm::mat3 J = glm::mat3(
537
+ fx * rz,
538
+ 0.f,
539
+ 0.f,
540
+ 0.f,
541
+ fy * rz,
542
+ 0.f,
543
+ -fx * t.x * rz2,
544
+ -fy * t.y * rz2,
545
+ 0.f
546
+ );
547
+ glm::mat3 T = J * W;
548
+
549
+ glm::mat3 V = glm::mat3(
550
+ cov3d[0],
551
+ cov3d[1],
552
+ cov3d[2],
553
+ cov3d[1],
554
+ cov3d[3],
555
+ cov3d[4],
556
+ cov3d[2],
557
+ cov3d[4],
558
+ cov3d[5]
559
+ );
560
+
561
+ glm::mat3 cov = T * V * glm::transpose(T);
562
+
563
+ // add a little blur along axes and save upper triangular elements
564
+ return make_float3(float(cov[0][0]) + 0.3f, float(cov[0][1]), float(cov[1][1]) + 0.3f);
565
+ }
566
+
567
+ // device helper to get 3D covariance from scale and quat parameters
568
+ __device__ void scale_rot_to_cov3d(
569
+ const float3 scale, const float glob_scale, const float4 quat, float *cov3d
570
+ ) {
571
+ // printf("quat %.2f %.2f %.2f %.2f\n", quat.x, quat.y, quat.z, quat.w);
572
+ glm::mat3 R = quat_to_rotmat(quat);
573
+ // printf("R %.2f %.2f %.2f\n", R[0][0], R[1][1], R[2][2]);
574
+ glm::mat3 S = scale_to_mat(scale, glob_scale);
575
+ // printf("S %.2f %.2f %.2f\n", S[0][0], S[1][1], S[2][2]);
576
+
577
+ glm::mat3 M = R * S;
578
+ glm::mat3 tmp = M * glm::transpose(M);
579
+ // printf("tmp %.2f %.2f %.2f\n", tmp[0][0], tmp[1][1], tmp[2][2]);
580
+
581
+ // save upper right because symmetric
582
+ cov3d[0] = tmp[0][0];
583
+ cov3d[1] = tmp[0][1];
584
+ cov3d[2] = tmp[0][2];
585
+ cov3d[3] = tmp[1][1];
586
+ cov3d[4] = tmp[1][2];
587
+ cov3d[5] = tmp[2][2];
588
+ }
gsplat/src/gsplat/cuda/csrc/forward.cuh ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <cuda.h>
2
+ #include <cuda_runtime.h>
3
+ #include <cstdint>
4
+
5
+
6
+ __global__ void nd_rasterize_forward(
7
+ const dim3 tile_bounds,
8
+ const dim3 img_size,
9
+ const unsigned channels,
10
+ const int32_t* __restrict__ gaussian_ids_sorted,
11
+ const int2* __restrict__ tile_bins,
12
+ const float2* __restrict__ xys,
13
+ const float3* __restrict__ conics,
14
+ const float* __restrict__ colors,
15
+ float* __restrict__ out_img
16
+ );
17
+
18
+ __global__ void nd_rasterize_forward_topk_norm(
19
+ const dim3 tile_bounds,
20
+ const dim3 img_size,
21
+ const unsigned channels,
22
+ const int32_t* __restrict__ gaussian_ids_sorted,
23
+ const int2* __restrict__ tile_bins,
24
+ const float2* __restrict__ xys,
25
+ const float3* __restrict__ conics,
26
+ const float* __restrict__ colors,
27
+ float* __restrict__ out_img,
28
+ int* __restrict__ pixel_topk
29
+ );
30
+
31
+ __global__ void nd_rasterize_forward_no_tiles(
32
+ const dim3 img_size,
33
+ const unsigned channels,
34
+ const unsigned num_points,
35
+ const float2* __restrict__ xys,
36
+ const float3* __restrict__ conics,
37
+ const float* __restrict__ colors,
38
+ float* __restrict__ out_img,
39
+ int* __restrict__ pixel_topk
40
+ );
41
+
42
+
43
+ // device helper to approximate projected 2d cov from 3d mean and cov
44
+ __device__ float3 project_cov3d_ewa(
45
+ const float3 &mean3d,
46
+ const float *cov3d,
47
+ const float *viewmat,
48
+ const float fx,
49
+ const float fy,
50
+ const float tan_fovx,
51
+ const float tan_fovy
52
+ );
53
+
54
+ // device helper to get 3D covariance from scale and quat parameters
55
+ __device__ void scale_rot_to_cov3d(
56
+ const float3 scale, const float glob_scale, const float4 quat, float *cov3d
57
+ );
58
+
59
+ __global__ void map_gaussian_to_intersects(
60
+ const int num_points,
61
+ const float2* __restrict__ xys,
62
+ const int* __restrict__ radii,
63
+ const int32_t* __restrict__ cum_tiles_hit,
64
+ const dim3 tile_bounds,
65
+ int64_t* __restrict__ isect_ids,
66
+ int32_t* __restrict__ gaussian_ids
67
+ );
68
+
69
+ __global__ void get_tile_bin_edges(
70
+ const int num_intersects,
71
+ const int64_t* __restrict__ isect_ids_sorted,
72
+ int2* __restrict__ tile_bins
73
+ );
74
+
75
+
76
+ __global__ void rasterize_forward(
77
+ const dim3 tile_bounds,
78
+ const dim3 img_size,
79
+ const int32_t* __restrict__ gaussian_ids_sorted,
80
+ const int2* __restrict__ tile_bins,
81
+ const float2* __restrict__ xys,
82
+ const float3* __restrict__ conics,
83
+ const float3* __restrict__ colors,
84
+ float3* __restrict__ out_img
85
+ );
gsplat/src/gsplat/cuda/csrc/forward2d.cuh ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <cuda.h>
2
+ #include <cuda_runtime.h>
3
+ #include <cstdint>
4
+
5
+ __global__ void project_gaussians_2d_scale_rot_forward_kernel(
6
+ const int num_points,
7
+ const float2* __restrict__ means2d,
8
+ const float2* __restrict__ scales2d,
9
+ const float* __restrict__ rotation,
10
+ const dim3 img_size,
11
+ const dim3 tile_bounds,
12
+ float2* __restrict__ xys,
13
+ int* __restrict__ radii,
14
+ float3* __restrict__ conics,
15
+ int32_t* __restrict__ num_tiles_hit
16
+ );
gsplat/src/gsplat/cuda/csrc/foward2d.cu ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "forward2d.cuh"
2
+ #include "helpers.cuh"
3
+ #include <algorithm>
4
+ #include <cooperative_groups.h>
5
+ #include <cooperative_groups/reduce.h>
6
+ #include <iostream>
7
+ namespace cg = cooperative_groups;
8
+
9
+ __global__ void project_gaussians_2d_scale_rot_forward_kernel(
10
+ const int num_points,
11
+ const float2* __restrict__ means2d,
12
+ const float2* __restrict__ scales2d,
13
+ const float* __restrict__ rotation,
14
+ const dim3 img_size,
15
+ const dim3 tile_bounds,
16
+ float2* __restrict__ xys,
17
+ int* __restrict__ radii,
18
+ float3* __restrict__ conics,
19
+ int32_t* __restrict__ num_tiles_hit
20
+ ) {
21
+ unsigned idx = cg::this_grid().thread_rank(); // idx of thread within grid
22
+ if (idx >= num_points) {
23
+ return;
24
+ }
25
+ radii[idx] = 0;
26
+ num_tiles_hit[idx] = 0;
27
+
28
+ // Retrieve the 2D Gaussian parameters
29
+ float2 center = {means2d[idx].x * img_size.x, means2d[idx].y * img_size.y};
30
+
31
+ // cov = R * S * S * T^(-1)
32
+ // conic = R * S^(-1) * S^(-1) * T^(-1)
33
+ glm::mat2 R = rotmat2d(rotation[idx]);
34
+ glm::mat2 S = scale_to_mat2d(scales2d[idx]);
35
+ glm::mat2 M = R * S;
36
+ glm::mat2 tmp = M * glm::transpose(M);
37
+
38
+ // upper triangular
39
+ float3 cov2d = make_float3(tmp[0][0], tmp[0][1], tmp[1][1]);
40
+ float3 conic;
41
+ float radius;
42
+ bool ok = compute_cov2d_bounds(cov2d, conic, radius);
43
+ if (!ok){
44
+ // printf("compute_cov2d_bounds failed\n");
45
+ return; // zero determinant
46
+ }
47
+ conics[idx] = conic;
48
+
49
+ xys[idx] = center;
50
+ radii[idx] = (int)radius;
51
+ uint2 tile_min, tile_max;
52
+ get_tile_bbox(center, radius, tile_bounds, tile_min, tile_max);
53
+ int32_t tile_area = (tile_max.x - tile_min.x) * (tile_max.y - tile_min.y);
54
+ if (tile_area <= 0) {
55
+ // printf("%d point bbox outside of bounds\n", idx);
56
+ return;
57
+ }
58
+ num_tiles_hit[idx] = tile_area;
59
+
60
+ }
gsplat/src/gsplat/cuda/csrc/helpers.cuh ADDED
@@ -0,0 +1,300 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "config.h"
2
+ #include <cuda_runtime.h>
3
+ #include "third_party/glm/glm/glm.hpp"
4
+ #include "third_party/glm/glm/gtc/type_ptr.hpp"
5
+ #include <iostream>
6
+
7
+ inline __device__ float ndc2pix(const float x, const float W, const float cx) {
8
+ return 0.5f * W * x + cx - 0.5f;
9
+ }
10
+
11
+ inline __device__ void get_bbox(
12
+ const float2 center,
13
+ const float2 dims,
14
+ const dim3 img_size,
15
+ uint2 &bb_min,
16
+ uint2 &bb_max
17
+ ) {
18
+ // get bounding box with center and dims, within bounds
19
+ // bounding box coords returned in tile coords, inclusive min, exclusive max
20
+ // clamp between 0 and tile bounds
21
+ bb_min.x = min(max(0, (int)(center.x - dims.x)), img_size.x);
22
+ bb_max.x = min(max(0, (int)(center.x + dims.x + 1)), img_size.x);
23
+ bb_min.y = min(max(0, (int)(center.y - dims.y)), img_size.y);
24
+ bb_max.y = min(max(0, (int)(center.y + dims.y + 1)), img_size.y);
25
+ }
26
+
27
+ inline __device__ void get_tile_bbox(
28
+ const float2 pix_center,
29
+ const float pix_radius,
30
+ const dim3 tile_bounds,
31
+ uint2 &tile_min,
32
+ uint2 &tile_max
33
+ ) {
34
+ // gets gaussian dimensions in tile space, i.e. the span of a gaussian in
35
+ // tile_grid (image divided into tiles)
36
+ float2 tile_center = {
37
+ pix_center.x / (float)BLOCK_X, pix_center.y / (float)BLOCK_Y
38
+ };
39
+ float2 tile_radius = {
40
+ pix_radius / (float)BLOCK_X, pix_radius / (float)BLOCK_Y
41
+ };
42
+ get_bbox(tile_center, tile_radius, tile_bounds, tile_min, tile_max);
43
+ }
44
+
45
+ inline __device__ bool
46
+ compute_cov2d_bounds(const float3 cov2d, float3 &conic, float &radius) {
47
+ // find eigenvalues of 2d covariance matrix
48
+ // expects upper triangular values of cov matrix as float3
49
+ // then compute the radius and conic dimensions
50
+ // the conic is the inverse cov2d matrix, represented here with upper
51
+ // triangular values.
52
+ float det = cov2d.x * cov2d.z - cov2d.y * cov2d.y;
53
+ if (det == 0.f)
54
+ return false;
55
+ float inv_det = 1.f / det;
56
+
57
+ // inverse of 2x2 cov2d matrix
58
+ conic.x = cov2d.z * inv_det;
59
+ conic.y = -cov2d.y * inv_det;
60
+ conic.z = cov2d.x * inv_det;
61
+
62
+ float b = 0.5f * (cov2d.x + cov2d.z);
63
+ float v1 = b + sqrt(max(0.1f, b * b - det));
64
+ float v2 = b - sqrt(max(0.1f, b * b - det));
65
+ // take 3 sigma of covariance, sqrt(eigenvalue) is the standard deviation
66
+ radius = ceil(3.f * sqrt(max(v1, v2)));
67
+ return true;
68
+ }
69
+
70
+ // compute vjp from df/d_conic to df/c_cov2d
71
+ inline __device__ void cov2d_to_conic_vjp(
72
+ const float3 &conic, const float3 &v_conic, float3 &v_cov2d
73
+ ) {
74
+ // conic = inverse cov2d
75
+ // df/d_cov2d = -conic * df/d_conic * conic
76
+ glm::mat2 X = glm::mat2(conic.x, conic.y, conic.y, conic.z);
77
+ glm::mat2 G = glm::mat2(v_conic.x, v_conic.y, v_conic.y, v_conic.z);
78
+ glm::mat2 v_Sigma = -X * G * X;
79
+ v_cov2d.x = v_Sigma[0][0];
80
+ v_cov2d.y = v_Sigma[1][0] + v_Sigma[0][1];
81
+ v_cov2d.z = v_Sigma[1][1];
82
+ }
83
+
84
+ // helper for applying R * p + T, expect mat to be ROW MAJOR
85
+ inline __device__ float3 transform_4x3(const float *mat, const float3 p) {
86
+ float3 out = {
87
+ mat[0] * p.x + mat[1] * p.y + mat[2] * p.z + mat[3],
88
+ mat[4] * p.x + mat[5] * p.y + mat[6] * p.z + mat[7],
89
+ mat[8] * p.x + mat[9] * p.y + mat[10] * p.z + mat[11],
90
+ };
91
+ return out;
92
+ }
93
+
94
+ // helper to apply 4x4 transform to 3d vector, return homo coords
95
+ // expects mat to be ROW MAJOR
96
+ inline __device__ float4 transform_4x4(const float *mat, const float3 p) {
97
+ float4 out = {
98
+ mat[0] * p.x + mat[1] * p.y + mat[2] * p.z + mat[3],
99
+ mat[4] * p.x + mat[5] * p.y + mat[6] * p.z + mat[7],
100
+ mat[8] * p.x + mat[9] * p.y + mat[10] * p.z + mat[11],
101
+ mat[12] * p.x + mat[13] * p.y + mat[14] * p.z + mat[15],
102
+ };
103
+ return out;
104
+ }
105
+
106
+ inline __device__ float2 project_pix(
107
+ const float *mat, const float3 p, const dim3 img_size, const float2 pp
108
+ ) {
109
+ // ROW MAJOR mat
110
+ float4 p_hom = transform_4x4(mat, p);
111
+ float rw = 1.f / (p_hom.w + 1e-6f);
112
+ float3 p_proj = {p_hom.x * rw, p_hom.y * rw, p_hom.z * rw};
113
+ return {
114
+ ndc2pix(p_proj.x, img_size.x, pp.x), ndc2pix(p_proj.y, img_size.y, pp.y)
115
+ };
116
+ }
117
+
118
+ // given v_xy_pix, get v_xyz
119
+ inline __device__ float3 project_pix_vjp(
120
+ const float *mat, const float3 p, const dim3 img_size, const float2 v_xy
121
+ ) {
122
+ // ROW MAJOR mat
123
+ float4 p_hom = transform_4x4(mat, p);
124
+ float rw = 1.f / (p_hom.w + 1e-6f);
125
+
126
+ float3 v_ndc = {0.5f * img_size.x * v_xy.x, 0.5f * img_size.y * v_xy.y};
127
+ float4 v_proj = {
128
+ v_ndc.x * rw, v_ndc.y * rw, 0., -(v_ndc.x + v_ndc.y) * rw * rw
129
+ };
130
+ // df / d_world = df / d_cam * d_cam / d_world
131
+ // = v_proj * P[:3, :3]
132
+ return {
133
+ mat[0] * v_proj.x + mat[4] * v_proj.y + mat[8] * v_proj.z,
134
+ mat[1] * v_proj.x + mat[5] * v_proj.y + mat[9] * v_proj.z,
135
+ mat[2] * v_proj.x + mat[6] * v_proj.y + mat[10] * v_proj.z
136
+ };
137
+ }
138
+
139
+ inline __device__ glm::mat3 quat_to_rotmat(const float4 quat) {
140
+ // quat to rotation matrix
141
+ float s = rsqrtf(
142
+ quat.w * quat.w + quat.x * quat.x + quat.y * quat.y + quat.z * quat.z
143
+ );
144
+ float w = quat.x * s;
145
+ float x = quat.y * s;
146
+ float y = quat.z * s;
147
+ float z = quat.w * s;
148
+
149
+ // glm matrices are column-major
150
+ return glm::mat3(
151
+ 1.f - 2.f * (y * y + z * z),
152
+ 2.f * (x * y + w * z),
153
+ 2.f * (x * z - w * y),
154
+ 2.f * (x * y - w * z),
155
+ 1.f - 2.f * (x * x + z * z),
156
+ 2.f * (y * z + w * x),
157
+ 2.f * (x * z + w * y),
158
+ 2.f * (y * z - w * x),
159
+ 1.f - 2.f * (x * x + y * y)
160
+ );
161
+ }
162
+
163
+ // inline __device__ glm::mat3 rotor_to_rotmat(const float4 rot) {
164
+ // // quat to rotation matrix
165
+ // float s = rsqrtf(
166
+ // rot.x * rot.x + rot.y * rot.y + rot.z * rot.z + rot.w * rot.w
167
+ // );
168
+ // float x = rot.x * s;
169
+ // float y = rot.y * s;
170
+ // float z = rot.z * s;
171
+ // float w = rot.w * s;
172
+
173
+ // // glm matrices are column-major
174
+ // return glm::mat3(
175
+ // x * x - y * y - z * z + w * w,
176
+ // -2.f * (x * y + w * z),
177
+ // 2.f * (y * w - x * z),
178
+ // 2.f * (x * y - w * z),
179
+ // x * x - y * y + z * z - w * w,
180
+ // -2.f * (y * z + w * x),
181
+ // 2.f * (y * w + x * z),
182
+ // 2.f * (x * w - y * z),
183
+ // x * x + y * y - z * z - w * w
184
+ // );
185
+ // }
186
+
187
+
188
+
189
+ inline __device__ float4
190
+ quat_to_rotmat_vjp(const float4 quat, const glm::mat3 v_R) {
191
+ float s = rsqrtf(
192
+ quat.w * quat.w + quat.x * quat.x + quat.y * quat.y + quat.z * quat.z
193
+ );
194
+ float w = quat.x * s;
195
+ float x = quat.y * s;
196
+ float y = quat.z * s;
197
+ float z = quat.w * s;
198
+
199
+ float4 v_quat;
200
+ // v_R is COLUMN MAJOR
201
+ // w element stored in x field
202
+ v_quat.x =
203
+ 2.f * (
204
+ // v_quat.w = 2.f * (
205
+ x * (v_R[1][2] - v_R[2][1]) + y * (v_R[2][0] - v_R[0][2]) +
206
+ z * (v_R[0][1] - v_R[1][0])
207
+ );
208
+ // x element in y field
209
+ v_quat.y =
210
+ 2.f *
211
+ (
212
+ // v_quat.x = 2.f * (
213
+ -2.f * x * (v_R[1][1] + v_R[2][2]) + y * (v_R[0][1] + v_R[1][0]) +
214
+ z * (v_R[0][2] + v_R[2][0]) + w * (v_R[1][2] - v_R[2][1])
215
+ );
216
+ // y element in z field
217
+ v_quat.z =
218
+ 2.f *
219
+ (
220
+ // v_quat.y = 2.f * (
221
+ x * (v_R[0][1] + v_R[1][0]) - 2.f * y * (v_R[0][0] + v_R[2][2]) +
222
+ z * (v_R[1][2] + v_R[2][1]) + w * (v_R[2][0] - v_R[0][2])
223
+ );
224
+ // z element in w field
225
+ v_quat.w =
226
+ 2.f *
227
+ (
228
+ // v_quat.z = 2.f * (
229
+ x * (v_R[0][2] + v_R[2][0]) + y * (v_R[1][2] + v_R[2][1]) -
230
+ 2.f * z * (v_R[0][0] + v_R[1][1]) + w * (v_R[0][1] - v_R[1][0])
231
+ );
232
+ return v_quat;
233
+ }
234
+
235
+ inline __device__ glm::mat3
236
+ scale_to_mat(const float3 scale, const float glob_scale) {
237
+ glm::mat3 S = glm::mat3(1.f);
238
+ S[0][0] = glob_scale * scale.x;
239
+ S[1][1] = glob_scale * scale.y;
240
+ S[2][2] = glob_scale * scale.z;
241
+ return S;
242
+ }
243
+
244
+ inline __device__ glm::mat3
245
+ triangular_mat(const float3 diag_elements, const float3 non_diag_elements) {
246
+ glm::mat3 L = glm::mat3(1.f);
247
+ L[0][0] = diag_elements.x;
248
+ L[1][1] = diag_elements.y;
249
+ L[2][2] = diag_elements.z;
250
+ L[1][0] = non_diag_elements.x;
251
+ L[2][0] = non_diag_elements.y;
252
+ L[2][1] = non_diag_elements.z;
253
+ return L;
254
+ }
255
+
256
+
257
+ inline __device__ glm::mat2
258
+ scale_to_mat2d(const float2 scale) {
259
+ glm::mat2 S = glm::mat2(1.f);
260
+ S[0][0] = scale.x;
261
+ S[1][1] = scale.y;
262
+ return S;
263
+ }
264
+
265
+ inline __device__ glm::mat2 rotmat2d(const float rot) {
266
+ // quat to rotation matrix
267
+ float cosr = cos(rot);
268
+ float sinr = sin(rot);
269
+
270
+ glm::mat2 R = glm::mat2(cosr);
271
+ R[0][1] = -sinr;
272
+ R[1][0] = sinr;
273
+
274
+ // glm matrices are column-major
275
+ return R;
276
+ }
277
+
278
+ inline __device__ glm::mat2 rotmat2d_gradient(const float rot) {
279
+ // quat to rotation matrix
280
+ float cosr = cos(rot);
281
+ float sinr = sin(rot);
282
+
283
+ glm::mat2 R = glm::mat2(-sinr);
284
+ R[0][1] = -cosr;
285
+ R[1][0] = cosr;
286
+
287
+ // glm matrices are column-major
288
+ return R;
289
+ }
290
+
291
+ // device helper for culling near points
292
+ inline __device__ bool clip_near_plane(
293
+ const float3 p, const float *viewmat, float3 &p_view, float thresh
294
+ ) {
295
+ p_view = transform_4x3(viewmat, p);
296
+ if (p_view.z <= thresh) {
297
+ return true;
298
+ }
299
+ return false;
300
+ }
gsplat/src/gsplat/cuda/csrc/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
gsplat/src/gsplat/cuda/csrc/third_party/glm/.github/workflows/make_light_release.yml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # A workflow that creates a minimal archive with only the glm/ headers and copying.txt.
2
+
3
+ name: Make light release
4
+
5
+ on:
6
+ release:
7
+ types: [published]
8
+
9
+ jobs:
10
+ make_zip:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Install dependencies
15
+ run: sudo apt-get update -y && sudo apt-get install -y zip p7zip
16
+
17
+ - name: Check out repository code
18
+ uses: actions/checkout@v3
19
+
20
+ - name: Set env
21
+ run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
22
+
23
+ - name: Prepare layout
24
+ run: mv copying.txt glm
25
+
26
+ - name: Create zip archive
27
+ run: zip -r glm-${{ env.RELEASE_VERSION }}-light.zip glm
28
+
29
+ - name: Create 7z archive
30
+ run: 7z a glm-${{ env.RELEASE_VERSION }}-light.7z glm
31
+
32
+ - uses: actions/upload-artifact@v3
33
+ with:
34
+ name: glm-${{ env.RELEASE_VERSION }}-light
35
+ path: glm-${{ env.RELEASE_VERSION }}-light.*
36
+
37
+ - name: Add to Release
38
+ uses: softprops/action-gh-release@v1
39
+ with:
40
+ files: |
41
+ glm-${{ env.RELEASE_VERSION }}-light.zip
42
+ glm-${{ env.RELEASE_VERSION }}-light.7z
gsplat/src/gsplat/cuda/csrc/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
gsplat/src/gsplat/cuda/csrc/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
+
gsplat/src/gsplat/cuda/csrc/third_party/glm/CMakeLists.txt ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ cmake_minimum_required(VERSION 3.6 FATAL_ERROR)
2
+ cmake_policy(VERSION 3.6)
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()
gsplat/src/gsplat/cuda/csrc/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()
gsplat/src/gsplat/cuda/csrc/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.
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00004_source.html ADDED
The diff for this file is too large to render. See raw diff
 
gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00005_source.html ADDED
The diff for this file is too large to render. See raw diff
 
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>
gsplat/src/gsplat/cuda/csrc/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>