Julien Blanchon
commited on
Commit
·
2398fdd
1
Parent(s):
1ab70ec
Move binaries to Git LFS
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +5 -0
- .gitignore +186 -0
- LICENSE +21 -0
- assets/docs/image-gs.bib +7 -0
- assets/images/Intel-logo.png +3 -0
- assets/images/NYU-logo.png +3 -0
- environment.yml +20 -0
- gsplat/MANIFEST.in +6 -0
- gsplat/README.md +0 -0
- gsplat/pyproject.toml +34 -0
- gsplat/setup.py +139 -0
- gsplat/src/gsplat/__init__.py +133 -0
- gsplat/src/gsplat/cuda/__init__.py +39 -0
- gsplat/src/gsplat/cuda/_backend.py +33 -0
- gsplat/src/gsplat/cuda/csrc/backward.cu +578 -0
- gsplat/src/gsplat/cuda/csrc/backward.cuh +74 -0
- gsplat/src/gsplat/cuda/csrc/backward2d.cu +101 -0
- gsplat/src/gsplat/cuda/csrc/backward2d.cuh +34 -0
- gsplat/src/gsplat/cuda/csrc/bindings.cu +814 -0
- gsplat/src/gsplat/cuda/csrc/bindings.h +224 -0
- gsplat/src/gsplat/cuda/csrc/config.h +24 -0
- gsplat/src/gsplat/cuda/csrc/ext.cpp +28 -0
- gsplat/src/gsplat/cuda/csrc/forward.cu +588 -0
- gsplat/src/gsplat/cuda/csrc/forward.cuh +85 -0
- gsplat/src/gsplat/cuda/csrc/forward2d.cuh +16 -0
- gsplat/src/gsplat/cuda/csrc/foward2d.cu +60 -0
- gsplat/src/gsplat/cuda/csrc/helpers.cuh +300 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/.appveyor.yml +92 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/.github/workflows/make_light_release.yml +42 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/.gitignore +61 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/.travis.yml +388 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/CMakeLists.txt +45 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/cmake/cmake_uninstall.cmake.in +21 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/copying.txt +54 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00001_source.html +493 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00002_source.html +121 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00003_source.html +182 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00004_source.html +0 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00005_source.html +0 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00006_source.html +262 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00007.html +205 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00007_source.html +250 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00008.html +149 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00008_source.html +154 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00009.html +223 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00009_source.html +212 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00010.html +124 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00010_source.html +133 -0
- gsplat/src/gsplat/cuda/csrc/third_party/glm/doc/api/a00011.html +137 -0
- 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
|
assets/images/NYU-logo.png
ADDED
|
Git LFS Details
|
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 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 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> <span class="preprocessor">#pragma once</span></div>
|
| 92 |
+
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
| 93 |
+
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// #define GLM_CXX98_EXCEPTIONS</span></div>
|
| 94 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// #define GLM_CXX98_RTTI</span></div>
|
| 95 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
|
| 96 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// #define GLM_CXX11_RVALUE_REFERENCES</span></div>
|
| 97 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">// Rvalue references - GCC 4.3</span></div>
|
| 98 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <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> </div>
|
| 100 |
+
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// GLM_CXX11_TRAILING_RETURN</span></div>
|
| 101 |
+
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <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> <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> </div>
|
| 104 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
|
| 105 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <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> <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> </div>
|
| 108 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
|
| 109 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <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> <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> </div>
|
| 112 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// #define GLM_CXX11_VARIADIC_TEMPLATE</span></div>
|
| 113 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// Variadic templates - GCC 4.3</span></div>
|
| 114 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <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> </div>
|
| 116 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">//</span></div>
|
| 117 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <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> <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> </div>
|
| 120 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">// #define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>
|
| 121 |
+
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// Initializer lists - GCC 4.4</span></div>
|
| 122 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <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> </div>
|
| 124 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// #define GLM_CXX11_STATIC_ASSERT</span></div>
|
| 125 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// Static assertions - GCC 4.3</span></div>
|
| 126 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <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> </div>
|
| 128 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
|
| 129 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// auto-typed variables - GCC 4.4</span></div>
|
| 130 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <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> </div>
|
| 132 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
|
| 133 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// Multi-declarator auto - GCC 4.4</span></div>
|
| 134 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <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> </div>
|
| 136 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
|
| 137 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <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> <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> </div>
|
| 140 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
|
| 141 |
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <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> <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> </div>
|
| 144 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">// #define GLM_CXX11_LAMBDAS</span></div>
|
| 145 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <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> <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> </div>
|
| 148 |
+
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// #define GLM_CXX11_DECLTYPE</span></div>
|
| 149 |
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <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> <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> </div>
|
| 152 |
+
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">//</span></div>
|
| 153 |
+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// Right angle brackets - GCC 4.3</span></div>
|
| 154 |
+
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <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> </div>
|
| 156 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">//</span></div>
|
| 157 |
+
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <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> <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> </div>
|
| 160 |
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">//</span></div>
|
| 161 |
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <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> <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> </div>
|
| 164 |
+
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// #define GLM_CXX11_ALIAS_TEMPLATE</span></div>
|
| 165 |
+
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// Template aliases N2258 GCC 4.7</span></div>
|
| 166 |
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <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> </div>
|
| 168 |
+
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">//</span></div>
|
| 169 |
+
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// Extern templates N1987 Yes</span></div>
|
| 170 |
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <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> </div>
|
| 172 |
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">// #define GLM_CXX11_NULLPTR</span></div>
|
| 173 |
+
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <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> <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> </div>
|
| 176 |
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// #define GLM_CXX11_STRONG_ENUMS</span></div>
|
| 177 |
+
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <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> <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> </div>
|
| 180 |
+
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">//</span></div>
|
| 181 |
+
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <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> <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> </div>
|
| 184 |
+
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">//</span></div>
|
| 185 |
+
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// Generalized attributes N2761 GCC 4.8</span></div>
|
| 186 |
+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <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> </div>
|
| 188 |
+
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">//</span></div>
|
| 189 |
+
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <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> <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> </div>
|
| 192 |
+
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">//</span></div>
|
| 193 |
+
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// Alignment support N2341 GCC 4.8</span></div>
|
| 194 |
+
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <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> </div>
|
| 196 |
+
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// #define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>
|
| 197 |
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// Delegating constructors N1986 GCC 4.7</span></div>
|
| 198 |
+
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <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> </div>
|
| 200 |
+
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">//</span></div>
|
| 201 |
+
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">// Inheriting constructors N2540 GCC 4.8</span></div>
|
| 202 |
+
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <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> </div>
|
| 204 |
+
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// #define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>
|
| 205 |
+
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <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> <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> </div>
|
| 208 |
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">//</span></div>
|
| 209 |
+
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <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> <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> </div>
|
| 212 |
+
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">//</span></div>
|
| 213 |
+
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <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> <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> </div>
|
| 216 |
+
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">//</span></div>
|
| 217 |
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <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> <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> </div>
|
| 220 |
+
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">//</span></div>
|
| 221 |
+
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <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> <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> </div>
|
| 224 |
+
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// #define GLM_CXX11_USER_LITERALS</span></div>
|
| 225 |
+
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <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> <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> </div>
|
| 228 |
+
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">//</span></div>
|
| 229 |
+
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <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> <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> </div>
|
| 232 |
+
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// #define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>
|
| 233 |
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// #define GLM_CXX11_DELETED_FUNCTIONS</span></div>
|
| 234 |
+
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <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> <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> </div>
|
| 237 |
+
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">//</span></div>
|
| 238 |
+
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <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> <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> </div>
|
| 241 |
+
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">//</span></div>
|
| 242 |
+
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// Extending sizeof N2253 GCC 4.4</span></div>
|
| 243 |
+
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <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> </div>
|
| 245 |
+
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// #define GLM_CXX11_INLINE_NAMESPACES</span></div>
|
| 246 |
+
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// Inline namespaces N2535 GCC 4.4</span></div>
|
| 247 |
+
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <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> </div>
|
| 249 |
+
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// #define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>
|
| 250 |
+
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// Unrestricted unions N2544 GCC 4.6</span></div>
|
| 251 |
+
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <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> </div>
|
| 253 |
+
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <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> <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> <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> </div>
|
| 257 |
+
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// #define GLM_CXX11_RANGE_FOR</span></div>
|
| 258 |
+
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <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> <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> </div>
|
| 261 |
+
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// #define GLM_CXX11_OVERRIDE_CONTROL</span></div>
|
| 262 |
+
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <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> <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> <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> <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> </div>
|
| 267 |
+
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">//</span></div>
|
| 268 |
+
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <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> <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> </div>
|
| 271 |
+
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// #define GLM_CXX11_NOEXCEPT</span></div>
|
| 272 |
+
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <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> <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> </div>
|
| 275 |
+
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">//</span></div>
|
| 276 |
+
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <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> <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> </div>
|
| 279 |
+
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">//</span></div>
|
| 280 |
+
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// Sequence points N2239 Yes</span></div>
|
| 281 |
+
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <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> </div>
|
| 283 |
+
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">//</span></div>
|
| 284 |
+
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// Atomic operations N2427 GCC 4.4</span></div>
|
| 285 |
+
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <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> </div>
|
| 287 |
+
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">//</span></div>
|
| 288 |
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <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> <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> </div>
|
| 291 |
+
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">//</span></div>
|
| 292 |
+
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// Bidirectional Fences N2752 GCC 4.8</span></div>
|
| 293 |
+
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <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> </div>
|
| 295 |
+
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">//</span></div>
|
| 296 |
+
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">// Memory model N2429 GCC 4.8</span></div>
|
| 297 |
+
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <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> </div>
|
| 299 |
+
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">//</span></div>
|
| 300 |
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <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> <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> </div>
|
| 303 |
+
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">//</span></div>
|
| 304 |
+
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">// Propagating exceptions N2179 GCC 4.4</span></div>
|
| 305 |
+
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <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> </div>
|
| 307 |
+
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">//</span></div>
|
| 308 |
+
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <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> <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> </div>
|
| 311 |
+
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">//</span></div>
|
| 312 |
+
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <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> <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> </div>
|
| 315 |
+
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">//</span></div>
|
| 316 |
+
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <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> <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> </div>
|
| 319 |
+
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//</span></div>
|
| 320 |
+
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <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> <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> </div>
|
| 323 |
+
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">//</span></div>
|
| 324 |
+
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <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> <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> </div>
|
| 327 |
+
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">//</span></div>
|
| 328 |
+
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// C99 preprocessor N1653 GCC 4.3</span></div>
|
| 329 |
+
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <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> </div>
|
| 331 |
+
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">//</span></div>
|
| 332 |
+
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment">// long long N1811 GCC 4.3</span></div>
|
| 333 |
+
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <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> </div>
|
| 335 |
+
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">//</span></div>
|
| 336 |
+
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// Extended integral types N1988 Yes</span></div>
|
| 337 |
+
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <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> </div>
|
| 339 |
+
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor">#if(GLM_COMPILER & GLM_COMPILER_GCC)</span></div>
|
| 340 |
+
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
|
| 341 |
+
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"># define GLM_CXX11_STATIC_ASSERT</span></div>
|
| 342 |
+
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
|
| 343 |
+
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor">#elif(GLM_COMPILER & GLM_COMPILER_CLANG)</span></div>
|
| 344 |
+
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"># if(__has_feature(cxx_exceptions))</span></div>
|
| 345 |
+
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"># define GLM_CXX98_EXCEPTIONS</span></div>
|
| 346 |
+
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"># endif</span></div>
|
| 347 |
+
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
|
| 348 |
+
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"># if(__has_feature(cxx_rtti))</span></div>
|
| 349 |
+
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"># define GLM_CXX98_RTTI</span></div>
|
| 350 |
+
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"># endif</span></div>
|
| 351 |
+
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
|
| 352 |
+
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <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> <span class="preprocessor"># define GLM_CXX11_ACCESS_CONTROL_SFINAE</span></div>
|
| 354 |
+
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"># endif</span></div>
|
| 355 |
+
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
|
| 356 |
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"># if(__has_feature(cxx_alias_templates))</span></div>
|
| 357 |
+
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"># define GLM_CXX11_ALIAS_TEMPLATE</span></div>
|
| 358 |
+
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"># endif</span></div>
|
| 359 |
+
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
|
| 360 |
+
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"># if(__has_feature(cxx_alignas))</span></div>
|
| 361 |
+
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"># define GLM_CXX11_ALIGNAS</span></div>
|
| 362 |
+
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"># endif</span></div>
|
| 363 |
+
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
|
| 364 |
+
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor"># if(__has_feature(cxx_attributes))</span></div>
|
| 365 |
+
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor"># define GLM_CXX11_ATTRIBUTES</span></div>
|
| 366 |
+
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"># endif</span></div>
|
| 367 |
+
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
|
| 368 |
+
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor"># if(__has_feature(cxx_constexpr))</span></div>
|
| 369 |
+
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor"># define GLM_CXX11_CONSTEXPR</span></div>
|
| 370 |
+
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor"># endif</span></div>
|
| 371 |
+
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
|
| 372 |
+
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"># if(__has_feature(cxx_decltype))</span></div>
|
| 373 |
+
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"># define GLM_CXX11_DECLTYPE</span></div>
|
| 374 |
+
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"># endif</span></div>
|
| 375 |
+
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
|
| 376 |
+
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <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> <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> <span class="preprocessor"># endif</span></div>
|
| 379 |
+
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
|
| 380 |
+
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor"># if(__has_feature(cxx_defaulted_functions))</span></div>
|
| 381 |
+
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor"># define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>
|
| 382 |
+
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor"># endif</span></div>
|
| 383 |
+
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
|
| 384 |
+
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor"># if(__has_feature(cxx_delegating_constructors))</span></div>
|
| 385 |
+
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor"># define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>
|
| 386 |
+
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"># endif</span></div>
|
| 387 |
+
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
|
| 388 |
+
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor"># if(__has_feature(cxx_deleted_functions))</span></div>
|
| 389 |
+
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"># define GLM_CXX11_DELETED_FUNCTIONS</span></div>
|
| 390 |
+
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor"># endif</span></div>
|
| 391 |
+
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
|
| 392 |
+
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"># if(__has_feature(cxx_explicit_conversions))</span></div>
|
| 393 |
+
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"># define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>
|
| 394 |
+
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"># endif</span></div>
|
| 395 |
+
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
|
| 396 |
+
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"># if(__has_feature(cxx_generalized_initializers))</span></div>
|
| 397 |
+
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"># define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>
|
| 398 |
+
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"># endif</span></div>
|
| 399 |
+
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
|
| 400 |
+
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"># if(__has_feature(cxx_implicit_moves))</span></div>
|
| 401 |
+
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"># define GLM_CXX11_IMPLICIT_MOVES</span></div>
|
| 402 |
+
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor"># endif</span></div>
|
| 403 |
+
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
|
| 404 |
+
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"># if(__has_feature(cxx_inheriting_constructors))</span></div>
|
| 405 |
+
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"># define GLM_CXX11_INHERITING_CONSTRUCTORS</span></div>
|
| 406 |
+
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"># endif</span></div>
|
| 407 |
+
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
|
| 408 |
+
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"># if(__has_feature(cxx_inline_namespaces))</span></div>
|
| 409 |
+
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"># define GLM_CXX11_INLINE_NAMESPACES</span></div>
|
| 410 |
+
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"># endif</span></div>
|
| 411 |
+
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
|
| 412 |
+
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor"># if(__has_feature(cxx_lambdas))</span></div>
|
| 413 |
+
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"># define GLM_CXX11_LAMBDAS</span></div>
|
| 414 |
+
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"># endif</span></div>
|
| 415 |
+
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
|
| 416 |
+
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <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> <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> <span class="preprocessor"># endif</span></div>
|
| 419 |
+
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div>
|
| 420 |
+
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"># if(__has_feature(cxx_noexcept))</span></div>
|
| 421 |
+
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor"># define GLM_CXX11_NOEXCEPT</span></div>
|
| 422 |
+
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"># endif</span></div>
|
| 423 |
+
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
|
| 424 |
+
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <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> <span class="preprocessor"># define GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
|
| 426 |
+
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"># endif</span></div>
|
| 427 |
+
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
|
| 428 |
+
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"># if(__has_feature(cxx_nullptr))</span></div>
|
| 429 |
+
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"># define GLM_CXX11_NULLPTR</span></div>
|
| 430 |
+
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor"># endif</span></div>
|
| 431 |
+
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
|
| 432 |
+
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor"># if(__has_feature(cxx_override_control))</span></div>
|
| 433 |
+
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"># define GLM_CXX11_OVERRIDE_CONTROL</span></div>
|
| 434 |
+
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"># endif</span></div>
|
| 435 |
+
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
|
| 436 |
+
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <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> <span class="preprocessor"># define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS</span></div>
|
| 438 |
+
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"># endif</span></div>
|
| 439 |
+
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
|
| 440 |
+
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"># if(__has_feature(cxx_range_for))</span></div>
|
| 441 |
+
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"># define GLM_CXX11_RANGE_FOR</span></div>
|
| 442 |
+
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"># endif</span></div>
|
| 443 |
+
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
|
| 444 |
+
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <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> <span class="preprocessor"># define GLM_CXX11_RAW_STRING_LITERALS</span></div>
|
| 446 |
+
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"># endif</span></div>
|
| 447 |
+
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
|
| 448 |
+
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"># if(__has_feature(cxx_rvalue_references))</span></div>
|
| 449 |
+
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"># define GLM_CXX11_RVALUE_REFERENCES</span></div>
|
| 450 |
+
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"># endif</span></div>
|
| 451 |
+
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
|
| 452 |
+
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor"># if(__has_feature(cxx_static_assert))</span></div>
|
| 453 |
+
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"># define GLM_CXX11_STATIC_ASSERT</span></div>
|
| 454 |
+
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"># endif</span></div>
|
| 455 |
+
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
|
| 456 |
+
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"># if(__has_feature(cxx_auto_type))</span></div>
|
| 457 |
+
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"># define GLM_CXX11_AUTO_TYPE</span></div>
|
| 458 |
+
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"># endif</span></div>
|
| 459 |
+
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
|
| 460 |
+
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"># if(__has_feature(cxx_strong_enums))</span></div>
|
| 461 |
+
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"># define GLM_CXX11_STRONG_ENUMS</span></div>
|
| 462 |
+
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"># endif</span></div>
|
| 463 |
+
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
|
| 464 |
+
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor"># if(__has_feature(cxx_trailing_return))</span></div>
|
| 465 |
+
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"># define GLM_CXX11_TRAILING_RETURN</span></div>
|
| 466 |
+
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"># endif</span></div>
|
| 467 |
+
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div>
|
| 468 |
+
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"># if(__has_feature(cxx_unicode_literals))</span></div>
|
| 469 |
+
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"># define GLM_CXX11_UNICODE_LITERALS</span></div>
|
| 470 |
+
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"># endif</span></div>
|
| 471 |
+
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div>
|
| 472 |
+
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"># if(__has_feature(cxx_unrestricted_unions))</span></div>
|
| 473 |
+
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"># define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>
|
| 474 |
+
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"># endif</span></div>
|
| 475 |
+
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
|
| 476 |
+
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"># if(__has_feature(cxx_user_literals))</span></div>
|
| 477 |
+
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"># define GLM_CXX11_USER_LITERALS</span></div>
|
| 478 |
+
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"># endif</span></div>
|
| 479 |
+
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
|
| 480 |
+
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"># if(__has_feature(cxx_variadic_templates))</span></div>
|
| 481 |
+
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"># define GLM_CXX11_VARIADIC_TEMPLATES</span></div>
|
| 482 |
+
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"># endif</span></div>
|
| 483 |
+
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
|
| 484 |
+
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor">#endif//(GLM_COMPILER & 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  <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 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 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> <span class="preprocessor">#include <cmath></span></div>
|
| 92 |
+
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
| 93 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#ifdef max</span></div>
|
| 94 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#undef max</span></div>
|
| 95 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#endif</span></div>
|
| 96 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
|
| 97 |
+
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifdef min</span></div>
|
| 98 |
+
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#undef min</span></div>
|
| 99 |
+
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#endif</span></div>
|
| 100 |
+
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
|
| 101 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifdef isnan</span></div>
|
| 102 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#undef isnan</span></div>
|
| 103 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#endif</span></div>
|
| 104 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
| 105 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#ifdef isinf</span></div>
|
| 106 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#undef isinf</span></div>
|
| 107 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
|
| 108 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
|
| 109 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef log2</span></div>
|
| 110 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#undef log2</span></div>
|
| 111 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
|
| 112 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
|
| 113 |
+
</div><!-- fragment --></div><!-- contents -->
|
| 114 |
+
<!-- start footer part -->
|
| 115 |
+
<hr class="footer"/><address class="footer"><small>
|
| 116 |
+
Generated by  <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 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 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> <span class="preprocessor">#pragma once</span></div>
|
| 92 |
+
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
| 93 |
+
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include "../common.hpp"</span></div>
|
| 94 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div>
|
| 95 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <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> <span class="keyword">namespace </span>detail</div>
|
| 97 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> {</div>
|
| 98 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
| 99 |
+
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  GLM_FUNC_QUALIFIER T mod289(T <span class="keyword">const</span>& x)</div>
|
| 100 |
+
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  {</div>
|
| 101 |
+
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keywordflow">return</span> x - <a class="code" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a>(x * (static_cast<T>(1.0) / static_cast<T>(289.0))) * <span class="keyword">static_cast<</span>T<span class="keyword">></span>(289.0);</div>
|
| 102 |
+
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  }</div>
|
| 103 |
+
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
|
| 104 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
| 105 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  GLM_FUNC_QUALIFIER T permute(T <span class="keyword">const</span>& x)</div>
|
| 106 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  {</div>
|
| 107 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordflow">return</span> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</div>
|
| 108 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  }</div>
|
| 109 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
|
| 110 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 111 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> <span class="keyword">const</span>& x)</div>
|
| 112 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  {</div>
|
| 113 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</div>
|
| 114 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  }</div>
|
| 115 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
|
| 116 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 117 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> <span class="keyword">const</span>& x)</div>
|
| 118 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div>
|
| 119 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</div>
|
| 120 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  }</div>
|
| 121 |
+
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
|
| 122 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 123 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> <span class="keyword">const</span>& x)</div>
|
| 124 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div>
|
| 125 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">return</span> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</div>
|
| 126 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div>
|
| 127 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
|
| 128 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
| 129 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_QUALIFIER T taylorInvSqrt(T <span class="keyword">const</span>& r)</div>
|
| 130 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div>
|
| 131 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(1.79284291400159) - <span class="keyword">static_cast<</span>T<span class="keyword">></span>(0.85373472095314) * r;</div>
|
| 132 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div>
|
| 133 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
|
| 134 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 135 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> <span class="keyword">const</span>& r)</div>
|
| 136 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div>
|
| 137 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(1.79284291400159) - <span class="keyword">static_cast<</span>T<span class="keyword">></span>(0.85373472095314) * r;</div>
|
| 138 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div>
|
| 139 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
|
| 140 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 141 |
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> <span class="keyword">const</span>& r)</div>
|
| 142 |
+
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div>
|
| 143 |
+
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(1.79284291400159) - <span class="keyword">static_cast<</span>T<span class="keyword">></span>(0.85373472095314) * r;</div>
|
| 144 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div>
|
| 145 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
|
| 146 |
+
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 147 |
+
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> <span class="keyword">const</span>& r)</div>
|
| 148 |
+
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div>
|
| 149 |
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(1.79284291400159) - <span class="keyword">static_cast<</span>T<span class="keyword">></span>(0.85373472095314) * r;</div>
|
| 150 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div>
|
| 151 |
+
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
|
| 152 |
+
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 153 |
+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> <span class="keyword">const</span>& t)</div>
|
| 154 |
+
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div>
|
| 155 |
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">return</span> (t * t * t) * (t * (t * <span class="keyword">static_cast<</span>T<span class="keyword">></span>(6) - static_cast<T>(15)) + static_cast<T>(10));</div>
|
| 156 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div>
|
| 157 |
+
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
|
| 158 |
+
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 159 |
+
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> <span class="keyword">const</span>& t)</div>
|
| 160 |
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div>
|
| 161 |
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">return</span> (t * t * t) * (t * (t * <span class="keyword">static_cast<</span>T<span class="keyword">></span>(6) - static_cast<T>(15)) + static_cast<T>(10));</div>
|
| 162 |
+
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div>
|
| 163 |
+
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
|
| 164 |
+
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 165 |
+
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> <span class="keyword">const</span>& t)</div>
|
| 166 |
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div>
|
| 167 |
+
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> (t * t * t) * (t * (t * <span class="keyword">static_cast<</span>T<span class="keyword">></span>(6) - static_cast<T>(15)) + static_cast<T>(10));</div>
|
| 168 |
+
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div>
|
| 169 |
+
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }<span class="comment">//namespace detail</span></div>
|
| 170 |
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }<span class="comment">//namespace glm</span></div>
|
| 171 |
+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </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< L, T, Q > floor(vec< L, T, Q > const &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  <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 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 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> <span class="preprocessor">#pragma once</span></div>
|
| 92 |
+
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
| 93 |
+
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="keyword">namespace </span>detail</div>
|
| 95 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> {</div>
|
| 96 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 97 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>  <span class="keyword">struct </span>functor1{};</div>
|
| 98 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
|
| 99 |
+
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 100 |
+
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">struct </span>functor1<vec, 1, R, T, Q></div>
|
| 101 |
+
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  {</div>
|
| 102 |
+
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> <span class="keyword">const</span>& v)</div>
|
| 103 |
+
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  {</div>
|
| 104 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keywordflow">return</span> vec<1, R, Q>(Func(v.x));</div>
|
| 105 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  }</div>
|
| 106 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  };</div>
|
| 107 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
| 108 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 109 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">struct </span>functor1<vec, 2, R, T, Q></div>
|
| 110 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  {</div>
|
| 111 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> <span class="keyword">const</span>& v)</div>
|
| 112 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  {</div>
|
| 113 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> vec<2, R, Q>(Func(v.x), Func(v.y));</div>
|
| 114 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  }</div>
|
| 115 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  };</div>
|
| 116 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
|
| 117 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 118 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">struct </span>functor1<vec, 3, R, T, Q></div>
|
| 119 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div>
|
| 120 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> <span class="keyword">const</span>& v)</div>
|
| 121 |
+
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div>
|
| 122 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z));</div>
|
| 123 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  }</div>
|
| 124 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  };</div>
|
| 125 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
|
| 126 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 127 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">struct </span>functor1<vec, 4, R, T, Q></div>
|
| 128 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div>
|
| 129 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> <span class="keyword">const</span>& v)</div>
|
| 130 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div>
|
| 131 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> vec<4, R, Q>(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>  }</div>
|
| 133 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  };</div>
|
| 134 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
|
| 135 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 136 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">struct </span>functor2{};</div>
|
| 137 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
|
| 138 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 139 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">struct </span>functor2<vec, 1, T, Q></div>
|
| 140 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div>
|
| 141 |
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> <span class="keyword">const</span>& a, vec<1, T, Q> <span class="keyword">const</span>& b)</div>
|
| 142 |
+
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div>
|
| 143 |
+
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> vec<1, T, Q>(Func(a.x, b.x));</div>
|
| 144 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div>
|
| 145 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  };</div>
|
| 146 |
+
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
|
| 147 |
+
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 148 |
+
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">struct </span>functor2<vec, 2, T, Q></div>
|
| 149 |
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div>
|
| 150 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> <span class="keyword">const</span>& a, vec<2, T, Q> <span class="keyword">const</span>& b)</div>
|
| 151 |
+
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  {</div>
|
| 152 |
+
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));</div>
|
| 153 |
+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div>
|
| 154 |
+
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  };</div>
|
| 155 |
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
|
| 156 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 157 |
+
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">struct </span>functor2<vec, 3, T, Q></div>
|
| 158 |
+
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div>
|
| 159 |
+
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> <span class="keyword">const</span>& a, vec<3, T, Q> <span class="keyword">const</span>& b)</div>
|
| 160 |
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div>
|
| 161 |
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">return</span> vec<3, T, Q>(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>  }</div>
|
| 163 |
+
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  };</div>
|
| 164 |
+
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
|
| 165 |
+
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 166 |
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">struct </span>functor2<vec, 4, T, Q></div>
|
| 167 |
+
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div>
|
| 168 |
+
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> <span class="keyword">const</span>& a, vec<4, T, Q> <span class="keyword">const</span>& b)</div>
|
| 169 |
+
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div>
|
| 170 |
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> vec<4, T, Q>(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>  }</div>
|
| 172 |
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  };</div>
|
| 173 |
+
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
|
| 174 |
+
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 175 |
+
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">struct </span>functor2_vec_sca{};</div>
|
| 176 |
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
|
| 177 |
+
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 178 |
+
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">struct </span>functor2_vec_sca<vec, 1, T, Q></div>
|
| 179 |
+
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div>
|
| 180 |
+
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> <span class="keyword">const</span>& a, T b)</div>
|
| 181 |
+
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div>
|
| 182 |
+
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> vec<1, T, Q>(Func(a.x, b));</div>
|
| 183 |
+
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div>
|
| 184 |
+
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  };</div>
|
| 185 |
+
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
|
| 186 |
+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 187 |
+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">struct </span>functor2_vec_sca<vec, 2, T, Q></div>
|
| 188 |
+
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div>
|
| 189 |
+
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> <span class="keyword">const</span>& a, T b)</div>
|
| 190 |
+
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div>
|
| 191 |
+
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> vec<2, T, Q>(Func(a.x, b), Func(a.y, b));</div>
|
| 192 |
+
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div>
|
| 193 |
+
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  };</div>
|
| 194 |
+
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
|
| 195 |
+
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 196 |
+
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">struct </span>functor2_vec_sca<vec, 3, T, Q></div>
|
| 197 |
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div>
|
| 198 |
+
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> <span class="keyword">const</span>& a, T b)</div>
|
| 199 |
+
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div>
|
| 200 |
+
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> vec<3, T, Q>(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>  }</div>
|
| 202 |
+
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  };</div>
|
| 203 |
+
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
|
| 204 |
+
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 205 |
+
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">struct </span>functor2_vec_sca<vec, 4, T, Q></div>
|
| 206 |
+
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div>
|
| 207 |
+
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> <span class="keyword">const</span>& a, T b)</div>
|
| 208 |
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div>
|
| 209 |
+
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> vec<4, T, Q>(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>  }</div>
|
| 211 |
+
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  };</div>
|
| 212 |
+
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
|
| 213 |
+
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 214 |
+
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">struct </span>functor2_vec_int {};</div>
|
| 215 |
+
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
|
| 216 |
+
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 217 |
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">struct </span>functor2_vec_int<1, T, Q></div>
|
| 218 |
+
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div>
|
| 219 |
+
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<1, int, Q> call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec<1, T, Q> <span class="keyword">const</span>& a, vec<1, int, Q> <span class="keyword">const</span>& b)</div>
|
| 220 |
+
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div>
|
| 221 |
+
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">return</span> vec<1, int, Q>(Func(a.x, b.x));</div>
|
| 222 |
+
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div>
|
| 223 |
+
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  };</div>
|
| 224 |
+
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
|
| 225 |
+
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 226 |
+
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">struct </span>functor2_vec_int<2, T, Q></div>
|
| 227 |
+
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div>
|
| 228 |
+
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<2, int, Q> call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec<2, T, Q> <span class="keyword">const</span>& a, vec<2, int, Q> <span class="keyword">const</span>& b)</div>
|
| 229 |
+
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div>
|
| 230 |
+
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));</div>
|
| 231 |
+
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div>
|
| 232 |
+
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  };</div>
|
| 233 |
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
|
| 234 |
+
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 235 |
+
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">struct </span>functor2_vec_int<3, T, Q></div>
|
| 236 |
+
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div>
|
| 237 |
+
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<3, int, Q> call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec<3, T, Q> <span class="keyword">const</span>& a, vec<3, int, Q> <span class="keyword">const</span>& b)</div>
|
| 238 |
+
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div>
|
| 239 |
+
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span> vec<3, int, Q>(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>  }</div>
|
| 241 |
+
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  };</div>
|
| 242 |
+
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
|
| 243 |
+
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 244 |
+
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">struct </span>functor2_vec_int<4, T, Q></div>
|
| 245 |
+
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div>
|
| 246 |
+
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<4, int, Q> call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec<4, T, Q> <span class="keyword">const</span>& a, vec<4, int, Q> <span class="keyword">const</span>& b)</div>
|
| 247 |
+
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div>
|
| 248 |
+
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">return</span> vec<4, int, Q>(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>  }</div>
|
| 250 |
+
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  };</div>
|
| 251 |
+
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }<span class="comment">//namespace detail</span></div>
|
| 252 |
+
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }<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  <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 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 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<typename T , typename U > </td></tr>
|
| 102 |
+
<tr class="memitem:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </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"> </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"> </td></tr>
|
| 105 |
+
<tr class="memitem:ga5c6758bc50aa7fbe700f87123a045aad"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 106 |
+
<tr class="memitem:ga5c6758bc50aa7fbe700f87123a045aad"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 2, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga5c6758bc50aa7fbe700f87123a045aad">associatedMax</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)</td></tr>
|
| 107 |
+
<tr class="memdesc:ga5c6758bc50aa7fbe700f87123a045aad"><td class="mdescLeft"> </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"> </td></tr>
|
| 109 |
+
<tr class="memitem:ga0d169d6ce26b03248df175f39005d77f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 110 |
+
<tr class="memitem:ga0d169d6ce26b03248df175f39005d77f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga0d169d6ce26b03248df175f39005d77f">associatedMax</a> (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b)</td></tr>
|
| 111 |
+
<tr class="memdesc:ga0d169d6ce26b03248df175f39005d77f"><td class="mdescLeft"> </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"> </td></tr>
|
| 113 |
+
<tr class="memitem:ga4086269afabcb81dd7ded33cb3448653"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 114 |
+
<tr class="memitem:ga4086269afabcb81dd7ded33cb3448653"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga4086269afabcb81dd7ded33cb3448653">associatedMax</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)</td></tr>
|
| 115 |
+
<tr class="memdesc:ga4086269afabcb81dd7ded33cb3448653"><td class="mdescLeft"> </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"> </td></tr>
|
| 117 |
+
<tr class="memitem:gaec891e363d91abbf3a4443cf2f652209"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
|
| 118 |
+
<tr class="memitem:gaec891e363d91abbf3a4443cf2f652209"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </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"> </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"> </td></tr>
|
| 121 |
+
<tr class="memitem:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 122 |
+
<tr class="memitem:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c">associatedMax</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)</td></tr>
|
| 123 |
+
<tr class="memdesc:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="mdescLeft"> </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"> </td></tr>
|
| 125 |
+
<tr class="memitem:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 126 |
+
<tr class="memitem:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba">associatedMax</a> (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c)</td></tr>
|
| 127 |
+
<tr class="memdesc:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="mdescLeft"> </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"> </td></tr>
|
| 129 |
+
<tr class="memitem:ga19f59d1141a51a3b2108a9807af78f7f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 130 |
+
<tr class="memitem:ga19f59d1141a51a3b2108a9807af78f7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga19f59d1141a51a3b2108a9807af78f7f">associatedMax</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c)</td></tr>
|
| 131 |
+
<tr class="memdesc:ga19f59d1141a51a3b2108a9807af78f7f"><td class="mdescLeft"> </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"> </td></tr>
|
| 133 |
+
<tr class="memitem:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
|
| 134 |
+
<tr class="memitem:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </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"> </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"> </td></tr>
|
| 137 |
+
<tr class="memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 138 |
+
<tr class="memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6">associatedMax</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)</td></tr>
|
| 139 |
+
<tr class="memdesc:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="mdescLeft"> </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"> </td></tr>
|
| 141 |
+
<tr class="memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 142 |
+
<tr class="memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d">associatedMax</a> (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)</td></tr>
|
| 143 |
+
<tr class="memdesc:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="mdescLeft"> </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"> </td></tr>
|
| 145 |
+
<tr class="memitem:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 146 |
+
<tr class="memitem:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)</td></tr>
|
| 147 |
+
<tr class="memdesc:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="mdescLeft"> </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"> </td></tr>
|
| 149 |
+
<tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplParams" colspan="2">template<typename T , typename U , qualifier Q> </td></tr>
|
| 150 |
+
<tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </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"> </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"> </td></tr>
|
| 153 |
+
<tr class="memitem:gac2f0dff90948f2e44386a5eafd941d1c"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 154 |
+
<tr class="memitem:gac2f0dff90948f2e44386a5eafd941d1c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 2, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gac2f0dff90948f2e44386a5eafd941d1c">associatedMin</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)</td></tr>
|
| 155 |
+
<tr class="memdesc:gac2f0dff90948f2e44386a5eafd941d1c"><td class="mdescLeft"> </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"> </td></tr>
|
| 157 |
+
<tr class="memitem:gacfec519c820331d023ef53a511749319"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 158 |
+
<tr class="memitem:gacfec519c820331d023ef53a511749319"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gacfec519c820331d023ef53a511749319">associatedMin</a> (T x, const vec< L, U, Q > &a, T y, const vec< L, U, Q > &b)</td></tr>
|
| 159 |
+
<tr class="memdesc:gacfec519c820331d023ef53a511749319"><td class="mdescLeft"> </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"> </td></tr>
|
| 161 |
+
<tr class="memitem:ga4757c7cab2d809124a8525d0a9deeb37"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 162 |
+
<tr class="memitem:ga4757c7cab2d809124a8525d0a9deeb37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga4757c7cab2d809124a8525d0a9deeb37">associatedMin</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)</td></tr>
|
| 163 |
+
<tr class="memdesc:ga4757c7cab2d809124a8525d0a9deeb37"><td class="mdescLeft"> </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"> </td></tr>
|
| 165 |
+
<tr class="memitem:gad0aa8f86259a26d839d34a3577a923fc"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
|
| 166 |
+
<tr class="memitem:gad0aa8f86259a26d839d34a3577a923fc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </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"> </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"> </td></tr>
|
| 169 |
+
<tr class="memitem:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 170 |
+
<tr class="memitem:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d">associatedMin</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)</td></tr>
|
| 171 |
+
<tr class="memdesc:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="mdescLeft"> </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"> </td></tr>
|
| 173 |
+
<tr class="memitem:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
|
| 174 |
+
<tr class="memitem:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </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"> </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"> </td></tr>
|
| 177 |
+
<tr class="memitem:ga66b08118bc88f0494bcacb7cdb940556"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 178 |
+
<tr class="memitem:ga66b08118bc88f0494bcacb7cdb940556"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga66b08118bc88f0494bcacb7cdb940556">associatedMin</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)</td></tr>
|
| 179 |
+
<tr class="memdesc:ga66b08118bc88f0494bcacb7cdb940556"><td class="mdescLeft"> </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"> </td></tr>
|
| 181 |
+
<tr class="memitem:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 182 |
+
<tr class="memitem:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68">associatedMin</a> (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)</td></tr>
|
| 183 |
+
<tr class="memdesc:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="mdescLeft"> </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"> </td></tr>
|
| 185 |
+
<tr class="memitem:ga2db7e351994baee78540a562d4bb6d3b"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
| 186 |
+
<tr class="memitem:ga2db7e351994baee78540a562d4bb6d3b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)</td></tr>
|
| 187 |
+
<tr class="memdesc:ga2db7e351994baee78540a562d4bb6d3b"><td class="mdescLeft"> </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"> </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  <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 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 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> </div>
|
| 92 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
|
| 93 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
|
| 94 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
|
| 95 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
|
| 96 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
|
| 97 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
| 98 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
| 99 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("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.")</span></div>
|
| 100 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># else</span></div>
|
| 101 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_associated_min_max extension included")</span></div>
|
| 102 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># endif</span></div>
|
| 103 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#endif</span></div>
|
| 104 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
|
| 105 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <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> {</div>
|
| 107 |
+
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
|
| 108 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 109 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  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> </div>
|
| 111 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 112 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL vec<2, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
| 113 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 114 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b);</div>
|
| 115 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
|
| 116 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 117 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
| 118 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  T x, <span class="keyword">const</span> vec<L, U, Q>& a,</div>
|
| 119 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  T y, <span class="keyword">const</span> vec<L, U, Q>& b);</div>
|
| 120 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
|
| 121 |
+
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 122 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
| 123 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
| 124 |
+
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b);</div>
|
| 125 |
+
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
|
| 126 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
| 127 |
+
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  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>  T x, U a,</div>
|
| 129 |
+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  T y, U b,</div>
|
| 130 |
+
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  T z, U c);</div>
|
| 131 |
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
|
| 132 |
+
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 133 |
+
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
| 134 |
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 135 |
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
| 136 |
+
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  vec<L, T, Q> <span class="keyword">const</span>& z, vec<L, U, Q> <span class="keyword">const</span>& c);</div>
|
| 137 |
+
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
|
| 138 |
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
| 139 |
+
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  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>  T x, U a,</div>
|
| 141 |
+
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  T y, U b,</div>
|
| 142 |
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  T z, U c,</div>
|
| 143 |
+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  T w, U d);</div>
|
| 144 |
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
|
| 145 |
+
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 146 |
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
| 147 |
+
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 148 |
+
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
| 149 |
+
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  vec<L, T, Q> <span class="keyword">const</span>& z, vec<L, U, Q> <span class="keyword">const</span>& c,</div>
|
| 150 |
+
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  vec<L, T, Q> <span class="keyword">const</span>& w, vec<L, U, Q> <span class="keyword">const</span>& d);</div>
|
| 151 |
+
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
|
| 152 |
+
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 153 |
+
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
| 154 |
+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  T x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 155 |
+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  T y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
| 156 |
+
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  T z, vec<L, U, Q> <span class="keyword">const</span>& c,</div>
|
| 157 |
+
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  T w, vec<L, U, Q> <span class="keyword">const</span>& d);</div>
|
| 158 |
+
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
|
| 159 |
+
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 160 |
+
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
| 161 |
+
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
| 162 |
+
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b,</div>
|
| 163 |
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  vec<L, T, Q> <span class="keyword">const</span>& z, U c,</div>
|
| 164 |
+
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  vec<L, T, Q> <span class="keyword">const</span>& w, U d);</div>
|
| 165 |
+
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
|
| 166 |
+
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
| 167 |
+
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  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> </div>
|
| 169 |
+
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 170 |
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL vec<2, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 171 |
+
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 172 |
+
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b);</div>
|
| 173 |
+
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
|
| 174 |
+
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 175 |
+
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 176 |
+
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  T x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 177 |
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  T y, vec<L, U, Q> <span class="keyword">const</span>& b);</div>
|
| 178 |
+
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
|
| 179 |
+
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 180 |
+
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 181 |
+
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
| 182 |
+
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b);</div>
|
| 183 |
+
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
|
| 184 |
+
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
| 185 |
+
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  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>  T x, U a,</div>
|
| 187 |
+
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  T y, U b,</div>
|
| 188 |
+
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  T z, U c);</div>
|
| 189 |
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
|
| 190 |
+
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 191 |
+
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 192 |
+
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 193 |
+
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
| 194 |
+
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  vec<L, T, Q> <span class="keyword">const</span>& z, vec<L, U, Q> <span class="keyword">const</span>& c);</div>
|
| 195 |
+
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
|
| 196 |
+
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 197 |
+
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 198 |
+
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  T x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 199 |
+
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  T y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
| 200 |
+
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  T z, vec<L, U, Q> <span class="keyword">const</span>& c);</div>
|
| 201 |
+
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
|
| 202 |
+
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 203 |
+
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 204 |
+
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
| 205 |
+
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b,</div>
|
| 206 |
+
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  vec<L, T, Q> <span class="keyword">const</span>& z, U c);</div>
|
| 207 |
+
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
|
| 208 |
+
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
| 209 |
+
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  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>  T x, U a,</div>
|
| 211 |
+
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  T y, U b,</div>
|
| 212 |
+
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  T z, U c,</div>
|
| 213 |
+
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  T w, U d);</div>
|
| 214 |
+
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
|
| 215 |
+
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 216 |
+
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 217 |
+
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 218 |
+
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
| 219 |
+
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  vec<L, T, Q> <span class="keyword">const</span>& z, vec<L, U, Q> <span class="keyword">const</span>& c,</div>
|
| 220 |
+
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  vec<L, T, Q> <span class="keyword">const</span>& w, vec<L, U, Q> <span class="keyword">const</span>& d);</div>
|
| 221 |
+
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
|
| 222 |
+
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 223 |
+
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 224 |
+
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  T x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
| 225 |
+
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  T y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
| 226 |
+
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  T z, vec<L, U, Q> <span class="keyword">const</span>& c,</div>
|
| 227 |
+
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  T w, vec<L, U, Q> <span class="keyword">const</span>& d);</div>
|
| 228 |
+
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
|
| 229 |
+
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 230 |
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
| 231 |
+
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
| 232 |
+
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b,</div>
|
| 233 |
+
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  vec<L, T, Q> <span class="keyword">const</span>& z, U c,</div>
|
| 234 |
+
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  vec<L, T, Q> <span class="keyword">const</span>& w, U d);</div>
|
| 235 |
+
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
|
| 236 |
+
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> } <span class="comment">//namespace glm</span></div>
|
| 237 |
+
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
|
| 238 |
+
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor">#include "associated_min_max.inl"</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< L, U, Q > associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &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< L, U, Q > associatedMin(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &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  <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 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 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<typename genIUType > </td></tr>
|
| 102 |
+
<tr class="memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </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"> </td></tr>
|
| 104 |
+
<tr class="memitem:ga898ef075ccf809a1e480faab48fe96bf"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 105 |
+
<tr class="memitem:ga898ef075ccf809a1e480faab48fe96bf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">highestBitValue</a> (vec< L, T, Q > const &value)</td></tr>
|
| 106 |
+
<tr class="memdesc:ga898ef075ccf809a1e480faab48fe96bf"><td class="mdescLeft"> </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"> </td></tr>
|
| 108 |
+
<tr class="memitem:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 109 |
+
<tr class="memitem:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </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"> </td></tr>
|
| 111 |
+
<tr class="memitem:ga8cda2459871f574a0aecbe702ac93291"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 112 |
+
<tr class="memitem:ga8cda2459871f574a0aecbe702ac93291"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </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"> </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"> </td></tr>
|
| 115 |
+
<tr class="memitem:ga2bbded187c5febfefc1e524ba31b3fab"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 116 |
+
<tr class="memitem:ga2bbded187c5febfefc1e524ba31b3fab"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">powerOfTwoAbove</a> (vec< L, T, Q > const &value)</td></tr>
|
| 117 |
+
<tr class="memdesc:ga2bbded187c5febfefc1e524ba31b3fab"><td class="mdescLeft"> </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"> </td></tr>
|
| 119 |
+
<tr class="memitem:ga3de7df63c589325101a2817a56f8e29d"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 120 |
+
<tr class="memitem:ga3de7df63c589325101a2817a56f8e29d"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </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"> </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"> </td></tr>
|
| 123 |
+
<tr class="memitem:gaf78ddcc4152c051b2a21e68fecb10980"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 124 |
+
<tr class="memitem:gaf78ddcc4152c051b2a21e68fecb10980"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">powerOfTwoBelow</a> (vec< L, T, Q > const &value)</td></tr>
|
| 125 |
+
<tr class="memdesc:gaf78ddcc4152c051b2a21e68fecb10980"><td class="mdescLeft"> </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"> </td></tr>
|
| 127 |
+
<tr class="memitem:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 128 |
+
<tr class="memitem:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </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"> </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"> </td></tr>
|
| 131 |
+
<tr class="memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 132 |
+
<tr class="memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">powerOfTwoNearest</a> (vec< L, T, Q > const &value)</td></tr>
|
| 133 |
+
<tr class="memdesc:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="mdescLeft"> </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"> </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  <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 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 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> </div>
|
| 92 |
+
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
|
| 93 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
|
| 94 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependencies</span></div>
|
| 95 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../gtc/bitfield.hpp"</span></div>
|
| 96 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
| 97 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
| 98 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
| 99 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("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.")</span></div>
|
| 100 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># else</span></div>
|
| 101 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_bit extension included")</span></div>
|
| 102 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># endif</span></div>
|
| 103 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
|
| 104 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
|
| 105 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <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> {</div>
|
| 107 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
|
| 108 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 109 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  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> </div>
|
| 111 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 112 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  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> </div>
|
| 114 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 115 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">highestBitValue</a>(vec<L, T, Q> <span class="keyword">const</span>& value);</div>
|
| 116 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
|
| 117 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 118 |
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  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> </div>
|
| 120 |
+
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 121 |
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">powerOfTwoAbove</a>(vec<L, T, Q> <span class="keyword">const</span>& value);</div>
|
| 122 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
|
| 123 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 124 |
+
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  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> </div>
|
| 126 |
+
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 127 |
+
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">powerOfTwoBelow</a>(vec<L, T, Q> <span class="keyword">const</span>& value);</div>
|
| 128 |
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
|
| 129 |
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 130 |
+
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  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> </div>
|
| 132 |
+
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 133 |
+
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">powerOfTwoNearest</a>(vec<L, T, Q> <span class="keyword">const</span>& value);</div>
|
| 134 |
+
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
|
| 135 |
+
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> } <span class="comment">//namespace glm</span></div>
|
| 136 |
+
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
|
| 137 |
+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
|
| 138 |
+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#include "bit.inl"</span></div>
|
| 139 |
+
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </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< L, T, Q > highestBitValue(vec< L, T, Q > const &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< L, T, Q > powerOfTwoBelow(vec< L, T, Q > const &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< L, T, Q > powerOfTwoAbove(vec< L, T, Q > const &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< L, T, Q > powerOfTwoNearest(vec< L, T, Q > const &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  <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 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 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> </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"> </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"> </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> </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"> </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"> </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> </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"> </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"> </td></tr>
|
| 110 |
+
<tr class="memitem:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 111 |
+
<tr class="memitem:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </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"> </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"> </td></tr>
|
| 114 |
+
<tr class="memitem:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 115 |
+
<tr class="memitem:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">bitfieldFillOne</a> (vec< L, T, Q > const &Value, int FirstBit, int BitCount)</td></tr>
|
| 116 |
+
<tr class="memdesc:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="mdescLeft"> </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"> </td></tr>
|
| 118 |
+
<tr class="memitem:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 119 |
+
<tr class="memitem:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </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"> </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"> </td></tr>
|
| 122 |
+
<tr class="memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 123 |
+
<tr class="memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">bitfieldFillZero</a> (vec< L, T, Q > const &Value, int FirstBit, int BitCount)</td></tr>
|
| 124 |
+
<tr class="memdesc:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="mdescLeft"> </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"> </td></tr>
|
| 126 |
+
<tr class="memitem:ga24cad0069f9a0450abd80b3e89501adf"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int16 </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"> </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"> </td></tr>
|
| 129 |
+
<tr class="memitem:ga9a4976a529aec2cee56525e1165da484"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </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"> </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"> </td></tr>
|
| 132 |
+
<tr class="memitem:ga4a76bbca39c40153f3203d0a1926e142"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga4a76bbca39c40153f3203d0a1926e142">bitfieldInterleave</a> (u8vec2 const &v)</td></tr>
|
| 133 |
+
<tr class="memdesc:ga4a76bbca39c40153f3203d0a1926e142"><td class="mdescLeft"> </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"> </td></tr>
|
| 135 |
+
<tr class="memitem:gac51c33a394593f0631fa3aa5bb778809"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </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"> </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"> </td></tr>
|
| 138 |
+
<tr class="memitem:ga94f3646a5667f4be56f8dcf3310e963f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </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"> </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"> </td></tr>
|
| 141 |
+
<tr class="memitem:ga406c4ee56af4ca37a73f449f154eca3e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga406c4ee56af4ca37a73f449f154eca3e">bitfieldInterleave</a> (u16vec2 const &v)</td></tr>
|
| 142 |
+
<tr class="memdesc:ga406c4ee56af4ca37a73f449f154eca3e"><td class="mdescLeft"> </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"> </td></tr>
|
| 144 |
+
<tr class="memitem:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </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"> </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"> </td></tr>
|
| 147 |
+
<tr class="memitem:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </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"> </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"> </td></tr>
|
| 150 |
+
<tr class="memitem:ga8cb17574d60abd6ade84bc57c10e8f78"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78">bitfieldInterleave</a> (u32vec2 const &v)</td></tr>
|
| 151 |
+
<tr class="memdesc:ga8cb17574d60abd6ade84bc57c10e8f78"><td class="mdescLeft"> </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"> </td></tr>
|
| 153 |
+
<tr class="memitem:ga8fdb724dccd4a07d57efc01147102137"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </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"> </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"> </td></tr>
|
| 156 |
+
<tr class="memitem:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </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"> </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"> </td></tr>
|
| 159 |
+
<tr class="memitem:gaa901c36a842fa5d126ea650549f17b24"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </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"> </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"> </td></tr>
|
| 162 |
+
<tr class="memitem:ga3afd6d38881fe3948c53d4214d2197fd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </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"> </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"> </td></tr>
|
| 165 |
+
<tr class="memitem:gad2075d96a6640121edaa98ea534102ca"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </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"> </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"> </td></tr>
|
| 168 |
+
<tr class="memitem:gab19fbc739fc0cf7247978602c36f7da8"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </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"> </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"> </td></tr>
|
| 171 |
+
<tr class="memitem:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </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"> </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"> </td></tr>
|
| 174 |
+
<tr class="memitem:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </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"> </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"> </td></tr>
|
| 177 |
+
<tr class="memitem:ga180a63161e1319fbd5a53c84d0429c7a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </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"> </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"> </td></tr>
|
| 180 |
+
<tr class="memitem:gafca8768671a14c8016facccb66a89f26"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </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"> </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"> </td></tr>
|
| 183 |
+
<tr class="memitem:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 184 |
+
<tr class="memitem:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </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"> </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"> </td></tr>
|
| 187 |
+
<tr class="memitem:gae186317091b1a39214ebf79008d44a1e"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 188 |
+
<tr class="memitem:gae186317091b1a39214ebf79008d44a1e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#gae186317091b1a39214ebf79008d44a1e">bitfieldRotateLeft</a> (vec< L, T, Q > const &In, int Shift)</td></tr>
|
| 189 |
+
<tr class="memdesc:gae186317091b1a39214ebf79008d44a1e"><td class="mdescLeft"> </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"> </td></tr>
|
| 191 |
+
<tr class="memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 192 |
+
<tr class="memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </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"> </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"> </td></tr>
|
| 195 |
+
<tr class="memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 196 |
+
<tr class="memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">bitfieldRotateRight</a> (vec< L, T, Q > const &In, int Shift)</td></tr>
|
| 197 |
+
<tr class="memdesc:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="mdescLeft"> </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"> </td></tr>
|
| 199 |
+
<tr class="memitem:gad7eba518a0b71662114571ee76939f8a"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
|
| 200 |
+
<tr class="memitem:gad7eba518a0b71662114571ee76939f8a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </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"> </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"> </td></tr>
|
| 203 |
+
<tr class="memitem:ga2e64e3b922a296033b825311e7f5fff1"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 204 |
+
<tr class="memitem:ga2e64e3b922a296033b825311e7f5fff1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">mask</a> (vec< L, T, Q > const &v)</td></tr>
|
| 205 |
+
<tr class="memdesc:ga2e64e3b922a296033b825311e7f5fff1"><td class="mdescLeft"> </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"> </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  <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 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 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> </div>
|
| 92 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
|
| 93 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
|
| 94 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#pragma once</span></div>
|
| 95 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
| 96 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// Dependencies</span></div>
|
| 97 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../ext/scalar_int_sized.hpp"</span></div>
|
| 98 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../ext/scalar_uint_sized.hpp"</span></div>
|
| 99 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../detail/qualifier.hpp"</span></div>
|
| 100 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../detail/_vectorize.hpp"</span></div>
|
| 101 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "<a class="code" href="a00174.html">type_precision.hpp</a>"</span></div>
|
| 102 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <limits></span></div>
|
| 103 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
|
| 104 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
| 105 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_bitfield extension included")</span></div>
|
| 106 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
|
| 107 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
|
| 108 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <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> {</div>
|
| 110 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
|
| 111 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 112 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  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> </div>
|
| 114 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 115 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">mask</a>(vec<L, T, Q> <span class="keyword">const</span>& v);</div>
|
| 116 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
|
| 117 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 118 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  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> </div>
|
| 120 |
+
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 121 |
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">bitfieldRotateRight</a>(vec<L, T, Q> <span class="keyword">const</span>& In, <span class="keywordtype">int</span> Shift);</div>
|
| 122 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
|
| 123 |
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 124 |
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  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> </div>
|
| 126 |
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 127 |
+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#gae186317091b1a39214ebf79008d44a1e">bitfieldRotateLeft</a>(vec<L, T, Q> <span class="keyword">const</span>& In, <span class="keywordtype">int</span> Shift);</div>
|
| 128 |
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
|
| 129 |
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 130 |
+
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  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> </div>
|
| 132 |
+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 133 |
+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">bitfieldFillOne</a>(vec<L, T, Q> <span class="keyword">const</span>& 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> </div>
|
| 135 |
+
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
| 136 |
+
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  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> </div>
|
| 138 |
+
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 139 |
+
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">bitfieldFillZero</a>(vec<L, T, Q> <span class="keyword">const</span>& 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> </div>
|
| 141 |
+
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  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> </div>
|
| 143 |
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  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> </div>
|
| 145 |
+
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  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>& v);</div>
|
| 146 |
+
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
|
| 147 |
+
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  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> </div>
|
| 149 |
+
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  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> </div>
|
| 151 |
+
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  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> </div>
|
| 153 |
+
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  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>& v);</div>
|
| 154 |
+
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
|
| 155 |
+
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  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> </div>
|
| 157 |
+
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  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> </div>
|
| 159 |
+
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  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> </div>
|
| 161 |
+
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  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>& v);</div>
|
| 162 |
+
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
|
| 163 |
+
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  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> </div>
|
| 165 |
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  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> </div>
|
| 167 |
+
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  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> </div>
|
| 169 |
+
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  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> </div>
|
| 171 |
+
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  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> </div>
|
| 173 |
+
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  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> </div>
|
| 175 |
+
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  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> </div>
|
| 177 |
+
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  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> </div>
|
| 179 |
+
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  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> </div>
|
| 181 |
+
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  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> </div>
|
| 183 |
+
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  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> </div>
|
| 185 |
+
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> } <span class="comment">//namespace glm</span></div>
|
| 186 |
+
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
|
| 187 |
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor">#include "bitfield.inl"</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< L, T, Q > bitfieldFillZero(vec< L, T, Q > const &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< 2, u8, defaultp > 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< L, T, Q > bitfieldRotateLeft(vec< L, T, Q > const &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< L, T, Q > mask(vec< L, T, Q > const &v)</div><div class="ttdoc">Build a mask of 'count' 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< L, T, Q > bitfieldFillOne(vec< L, T, Q > const &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< 2, u32, defaultp > 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< L, T, Q > bitfieldRotateRight(vec< L, T, Q > const &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< 2, u16, defaultp > 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  <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 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 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<typename T , qualifier Q> </td></tr>
|
| 102 |
+
<tr class="memitem:ga36529c278ef716986151d58d151d697d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00310.html#ga36529c278ef716986151d58d151d697d">closestPointOnLine</a> (vec< 3, T, Q > const &point, vec< 3, T, Q > const &a, vec< 3, T, Q > const &b)</td></tr>
|
| 103 |
+
<tr class="memdesc:ga36529c278ef716986151d58d151d697d"><td class="mdescLeft"> </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"> </td></tr>
|
| 105 |
+
<tr class="memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"></a>
|
| 106 |
+
template<typename T , qualifier Q> </td></tr>
|
| 107 |
+
<tr class="memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 2, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a> (vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &b)</td></tr>
|
| 108 |
+
<tr class="memdesc:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="mdescLeft"> </td><td class="mdescRight">2d lines work as well <br /></td></tr>
|
| 109 |
+
<tr class="separator:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="memSeparator" colspan="2"> </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  <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 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 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> </div>
|
| 92 |
+
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
|
| 93 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
|
| 94 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
|
| 95 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
|
| 96 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
| 97 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
| 98 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
| 99 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("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.")</span></div>
|
| 100 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># else</span></div>
|
| 101 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_closest_point extension included")</span></div>
|
| 102 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># endif</span></div>
|
| 103 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
|
| 104 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
|
| 105 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <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> {</div>
|
| 107 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
|
| 108 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 109 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a>(</div>
|
| 110 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vec<3, T, Q> <span class="keyword">const</span>& point,</div>
|
| 111 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  vec<3, T, Q> <span class="keyword">const</span>& a,</div>
|
| 112 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  vec<3, T, Q> <span class="keyword">const</span>& b);</div>
|
| 113 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
|
| 114 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 115 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL vec<2, T, Q> <a class="code" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a>(</div>
|
| 116 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  vec<2, T, Q> <span class="keyword">const</span>& point,</div>
|
| 117 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  vec<2, T, Q> <span class="keyword">const</span>& a,</div>
|
| 118 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  vec<2, T, Q> <span class="keyword">const</span>& b);</div>
|
| 119 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
|
| 120 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }<span class="comment">// namespace glm</span></div>
|
| 121 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
|
| 122 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "closest_point.inl"</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< 2, T, Q > closestPointOnLine(vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &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  <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 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 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<typename T , qualifier Q> </td></tr>
|
| 103 |
+
<tr class="memitem:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48">convertD65XYZToD50XYZ</a> (vec< 3, T, Q > const &ColorD65XYZ)</td></tr>
|
| 104 |
+
<tr class="memdesc:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="mdescLeft"> </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"> </td></tr>
|
| 106 |
+
<tr class="memitem:ga5265386fc3ac29e4c580d37ed470859c"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5265386fc3ac29e4c580d37ed470859c"></a>
|
| 107 |
+
template<typename T , qualifier Q> </td></tr>
|
| 108 |
+
<tr class="memitem:ga5265386fc3ac29e4c580d37ed470859c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#ga5265386fc3ac29e4c580d37ed470859c">convertD65XYZToLinearSRGB</a> (vec< 3, T, Q > const &ColorD65XYZ)</td></tr>
|
| 109 |
+
<tr class="memdesc:ga5265386fc3ac29e4c580d37ed470859c"><td class="mdescLeft"> </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"> </td></tr>
|
| 111 |
+
<tr class="memitem:ga1522ba180e3d83d554a734056da031f9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1522ba180e3d83d554a734056da031f9"></a>
|
| 112 |
+
template<typename T , qualifier Q> </td></tr>
|
| 113 |
+
<tr class="memitem:ga1522ba180e3d83d554a734056da031f9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#ga1522ba180e3d83d554a734056da031f9">convertLinearSRGBToD50XYZ</a> (vec< 3, T, Q > const &ColorLinearSRGB)</td></tr>
|
| 114 |
+
<tr class="memdesc:ga1522ba180e3d83d554a734056da031f9"><td class="mdescLeft"> </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"> </td></tr>
|
| 116 |
+
<tr class="memitem:gaf9e130d9d4ccf51cc99317de7449f369"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf9e130d9d4ccf51cc99317de7449f369"></a>
|
| 117 |
+
template<typename T , qualifier Q> </td></tr>
|
| 118 |
+
<tr class="memitem:gaf9e130d9d4ccf51cc99317de7449f369"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#gaf9e130d9d4ccf51cc99317de7449f369">convertLinearSRGBToD65XYZ</a> (vec< 3, T, Q > const &ColorLinearSRGB)</td></tr>
|
| 119 |
+
<tr class="memdesc:gaf9e130d9d4ccf51cc99317de7449f369"><td class="mdescLeft"> </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"> </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  <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 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 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> </div>
|
| 92 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
|
| 93 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
|
| 94 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
|
| 95 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
|
| 96 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/qualifier.hpp"</span></div>
|
| 97 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
|
| 98 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <limits></span></div>
|
| 99 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
|
| 100 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
| 101 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
| 102 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># pragma message("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.")</span></div>
|
| 103 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># else</span></div>
|
| 104 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_color_encoding extension included")</span></div>
|
| 105 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"># endif</span></div>
|
| 106 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
|
| 107 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
|
| 108 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <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> {</div>
|
| 110 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
|
| 111 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 112 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00311.html#gaf9e130d9d4ccf51cc99317de7449f369">convertLinearSRGBToD65XYZ</a>(vec<3, T, Q> <span class="keyword">const</span>& ColorLinearSRGB);</div>
|
| 113 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
|
| 114 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 115 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00311.html#ga1522ba180e3d83d554a734056da031f9">convertLinearSRGBToD50XYZ</a>(vec<3, T, Q> <span class="keyword">const</span>& ColorLinearSRGB);</div>
|
| 116 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
|
| 117 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 118 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00311.html#ga5265386fc3ac29e4c580d37ed470859c">convertD65XYZToLinearSRGB</a>(vec<3, T, Q> <span class="keyword">const</span>& ColorD65XYZ);</div>
|
| 119 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
|
| 120 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 121 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48">convertD65XYZToD50XYZ</a>(vec<3, T, Q> <span class="keyword">const</span>& ColorD65XYZ);</div>
|
| 122 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
|
| 123 |
+
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> } <span class="comment">//namespace glm</span></div>
|
| 124 |
+
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
|
| 125 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#include "color_encoding.inl"</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< 3, T, Q > convertD65XYZToLinearSRGB(vec< 3, T, Q > const &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< 3, T, Q > convertLinearSRGBToD50XYZ(vec< 3, T, Q > const &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< 3, T, Q > convertLinearSRGBToD65XYZ(vec< 3, T, Q > const &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< 3, T, Q > convertD65XYZToD50XYZ(vec< 3, T, Q > const &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  <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>
|