Spaces:
Running on Zero
Running on Zero
Add UniSHARP Gradio Space
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +11 -32
- .gitignore +7 -0
- 3dgeer/submodules/geer-rasterizer/CMakeLists.txt +36 -0
- 3dgeer/submodules/geer-rasterizer/LICENSE.md +83 -0
- 3dgeer/submodules/geer-rasterizer/README.md +30 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/auxiliary.h +343 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/backward.cu +642 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/backward.h +80 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/config.h +19 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/forward.cu +1249 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/forward.h +84 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/rasterizer.h +107 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/rasterizer_impl.cu +616 -0
- 3dgeer/submodules/geer-rasterizer/cuda_rasterizer/rasterizer_impl.h +76 -0
- 3dgeer/submodules/geer-rasterizer/diff_gaussian_rasterization/__init__.py +239 -0
- 3dgeer/submodules/geer-rasterizer/ext.cpp +19 -0
- 3dgeer/submodules/geer-rasterizer/rasterize_points.cu +274 -0
- 3dgeer/submodules/geer-rasterizer/rasterize_points.h +81 -0
- 3dgeer/submodules/geer-rasterizer/setup.py +34 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/.appveyor.yml +92 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/.gitignore +61 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/.travis.yml +388 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/CMakeLists.txt +45 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/cmake/cmake_uninstall.cmake.in +21 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/copying.txt +54 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00001_source.html +493 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00002_source.html +121 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00003_source.html +182 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00004_source.html +0 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00005_source.html +0 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00006_source.html +262 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00007.html +205 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00007_source.html +250 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00008.html +149 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00008_source.html +154 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00009.html +223 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00009_source.html +212 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00010.html +124 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00010_source.html +133 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00011.html +137 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00011_source.html +139 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00012.html +134 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00012_source.html +136 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00013.html +139 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00013_source.html +150 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00014.html +131 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00014_source.html +141 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00015.html +267 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00015_source.html +276 -0
- 3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00016.html +131 -0
.gitattributes
CHANGED
|
@@ -1,35 +1,14 @@
|
|
| 1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 2 |
*.pth filter=lfs diff=lfs merge=lfs -text
|
|
|
|
| 3 |
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
|
| 6 |
+
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/manual/frontpage1.png filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/manual/frontpage2.png filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/manual.pdf filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
UniK3D/unik3d/ops/losses/resources/partition_spline.npz filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
examples/photo1.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
examples/photo2.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
examples/photo3.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
examples/photo4.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
examples/photo5.jpeg filter=lfs diff=lfs merge=lfs -text
|
.gitignore
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__pycache__/
|
| 2 |
+
*.pyc
|
| 3 |
+
/outputs/
|
| 4 |
+
/checkpoints/huggingface/
|
| 5 |
+
/checkpoints/torchhub/
|
| 6 |
+
/checkpoints/*.tmp
|
| 7 |
+
|
3dgeer/submodules/geer-rasterizer/CMakeLists.txt
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#
|
| 2 |
+
# Copyright (C) 2023, Inria
|
| 3 |
+
# GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
# All rights reserved.
|
| 5 |
+
#
|
| 6 |
+
# This software is free for non-commercial, research and evaluation use
|
| 7 |
+
# under the terms of the LICENSE.md file.
|
| 8 |
+
#
|
| 9 |
+
# For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
#
|
| 11 |
+
|
| 12 |
+
cmake_minimum_required(VERSION 3.20)
|
| 13 |
+
|
| 14 |
+
project(DiffRast LANGUAGES CUDA CXX)
|
| 15 |
+
|
| 16 |
+
set(CMAKE_CXX_STANDARD 17)
|
| 17 |
+
set(CMAKE_CXX_EXTENSIONS OFF)
|
| 18 |
+
set(CMAKE_CUDA_STANDARD 17)
|
| 19 |
+
|
| 20 |
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
| 21 |
+
|
| 22 |
+
add_library(CudaRasterizer
|
| 23 |
+
cuda_rasterizer/backward.h
|
| 24 |
+
cuda_rasterizer/backward.cu
|
| 25 |
+
cuda_rasterizer/forward.h
|
| 26 |
+
cuda_rasterizer/forward.cu
|
| 27 |
+
cuda_rasterizer/auxiliary.h
|
| 28 |
+
cuda_rasterizer/rasterizer_impl.cu
|
| 29 |
+
cuda_rasterizer/rasterizer_impl.h
|
| 30 |
+
cuda_rasterizer/rasterizer.h
|
| 31 |
+
)
|
| 32 |
+
|
| 33 |
+
set_target_properties(CudaRasterizer PROPERTIES CUDA_ARCHITECTURES "70;75;86")
|
| 34 |
+
|
| 35 |
+
target_include_directories(CudaRasterizer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cuda_rasterizer)
|
| 36 |
+
target_include_directories(CudaRasterizer PRIVATE third_party/glm ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
|
3dgeer/submodules/geer-rasterizer/LICENSE.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Gaussian-Splatting License
|
| 2 |
+
===========================
|
| 3 |
+
|
| 4 |
+
**Inria** and **the Max Planck Institut for Informatik (MPII)** hold all the ownership rights on the *Software* named **gaussian-splatting**.
|
| 5 |
+
The *Software* is in the process of being registered with the Agence pour la Protection des
|
| 6 |
+
Programmes (APP).
|
| 7 |
+
|
| 8 |
+
The *Software* is still being developed by the *Licensor*.
|
| 9 |
+
|
| 10 |
+
*Licensor*'s goal is to allow the research community to use, test and evaluate
|
| 11 |
+
the *Software*.
|
| 12 |
+
|
| 13 |
+
## 1. Definitions
|
| 14 |
+
|
| 15 |
+
*Licensee* means any person or entity that uses the *Software* and distributes
|
| 16 |
+
its *Work*.
|
| 17 |
+
|
| 18 |
+
*Licensor* means the owners of the *Software*, i.e Inria and MPII
|
| 19 |
+
|
| 20 |
+
*Software* means the original work of authorship made available under this
|
| 21 |
+
License ie gaussian-splatting.
|
| 22 |
+
|
| 23 |
+
*Work* means the *Software* and any additions to or derivative works of the
|
| 24 |
+
*Software* that are made available under this License.
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
## 2. Purpose
|
| 28 |
+
This license is intended to define the rights granted to the *Licensee* by
|
| 29 |
+
Licensors under the *Software*.
|
| 30 |
+
|
| 31 |
+
## 3. Rights granted
|
| 32 |
+
|
| 33 |
+
For the above reasons Licensors have decided to distribute the *Software*.
|
| 34 |
+
Licensors grant non-exclusive rights to use the *Software* for research purposes
|
| 35 |
+
to research users (both academic and industrial), free of charge, without right
|
| 36 |
+
to sublicense.. The *Software* may be used "non-commercially", i.e., for research
|
| 37 |
+
and/or evaluation purposes only.
|
| 38 |
+
|
| 39 |
+
Subject to the terms and conditions of this License, you are granted a
|
| 40 |
+
non-exclusive, royalty-free, license to reproduce, prepare derivative works of,
|
| 41 |
+
publicly display, publicly perform and distribute its *Work* and any resulting
|
| 42 |
+
derivative works in any form.
|
| 43 |
+
|
| 44 |
+
## 4. Limitations
|
| 45 |
+
|
| 46 |
+
**4.1 Redistribution.** You may reproduce or distribute the *Work* only if (a) you do
|
| 47 |
+
so under this License, (b) you include a complete copy of this License with
|
| 48 |
+
your distribution, and (c) you retain without modification any copyright,
|
| 49 |
+
patent, trademark, or attribution notices that are present in the *Work*.
|
| 50 |
+
|
| 51 |
+
**4.2 Derivative Works.** You may specify that additional or different terms apply
|
| 52 |
+
to the use, reproduction, and distribution of your derivative works of the *Work*
|
| 53 |
+
("Your Terms") only if (a) Your Terms provide that the use limitation in
|
| 54 |
+
Section 2 applies to your derivative works, and (b) you identify the specific
|
| 55 |
+
derivative works that are subject to Your Terms. Notwithstanding Your Terms,
|
| 56 |
+
this License (including the redistribution requirements in Section 3.1) will
|
| 57 |
+
continue to apply to the *Work* itself.
|
| 58 |
+
|
| 59 |
+
**4.3** Any other use without of prior consent of Licensors is prohibited. Research
|
| 60 |
+
users explicitly acknowledge having received from Licensors all information
|
| 61 |
+
allowing to appreciate the adequacy between of the *Software* and their needs and
|
| 62 |
+
to undertake all necessary precautions for its execution and use.
|
| 63 |
+
|
| 64 |
+
**4.4** The *Software* is provided both as a compiled library file and as source
|
| 65 |
+
code. In case of using the *Software* for a publication or other results obtained
|
| 66 |
+
through the use of the *Software*, users are strongly encouraged to cite the
|
| 67 |
+
corresponding publications as explained in the documentation of the *Software*.
|
| 68 |
+
|
| 69 |
+
## 5. Disclaimer
|
| 70 |
+
|
| 71 |
+
THE USER CANNOT USE, EXPLOIT OR DISTRIBUTE THE *SOFTWARE* FOR COMMERCIAL PURPOSES
|
| 72 |
+
WITHOUT PRIOR AND EXPLICIT CONSENT OF LICENSORS. YOU MUST CONTACT INRIA FOR ANY
|
| 73 |
+
UNAUTHORIZED USE: stip-sophia.transfert@inria.fr . ANY SUCH ACTION WILL
|
| 74 |
+
CONSTITUTE A FORGERY. THIS *SOFTWARE* IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES
|
| 75 |
+
OF ANY NATURE AND ANY EXPRESS OR IMPLIED WARRANTIES, WITH REGARDS TO COMMERCIAL
|
| 76 |
+
USE, PROFESSIONNAL USE, LEGAL OR NOT, OR OTHER, OR COMMERCIALISATION OR
|
| 77 |
+
ADAPTATION. UNLESS EXPLICITLY PROVIDED BY LAW, IN NO EVENT, SHALL INRIA OR THE
|
| 78 |
+
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| 79 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
| 80 |
+
GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION)
|
| 81 |
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
| 82 |
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM, OUT OF OR
|
| 83 |
+
IN CONNECTION WITH THE *SOFTWARE* OR THE USE OR OTHER DEALINGS IN THE *SOFTWARE*.
|
3dgeer/submodules/geer-rasterizer/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 3DGEER-CUDA-Rasterizer
|
| 2 |
+
Used as the rasterization engine for the paper "3DGEER: 3D Gaussian Rendering Made Exact and Efficient for Generic Cameras". If you can make use of it in your own research, please be so kind to cite us.
|
| 3 |
+
|
| 4 |
+
<section class="section" id="BibTeX">
|
| 5 |
+
<div class="container is-max-desktop content">
|
| 6 |
+
<h2 class="title">BibTeX</h2>
|
| 7 |
+
<pre><code>@misc{huang20263dgeer3dgaussianrendering,
|
| 8 |
+
title={3DGEER: 3D Gaussian Rendering Made Exact and Efficient for Generic Cameras},
|
| 9 |
+
author={Zixun Huang and Cho-Ying Wu and Yuliang Guo and Xinyu Huang and Liu Ren},
|
| 10 |
+
year={2026},
|
| 11 |
+
eprint={2505.24053},
|
| 12 |
+
archivePrefix={arXiv},
|
| 13 |
+
primaryClass={cs.GR},
|
| 14 |
+
url={https://arxiv.org/abs/2505.24053},
|
| 15 |
+
}</code></pre>
|
| 16 |
+
</div>
|
| 17 |
+
</section>
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
<!-- <div>
|
| 22 |
+
<p align="center">
|
| 23 |
+
<img src="../../assets/intgral.png" alt="teaser" style="width: 60%;">
|
| 24 |
+
Gradient Flow and Canonical Transformation for Ray-Gaussian Integral
|
| 25 |
+
</p>
|
| 26 |
+
<p align="center">
|
| 27 |
+
<img src="../../assets/asso.png" alt="teaser" style="width: 70%;">
|
| 28 |
+
EWA vs. UT vs. PBF: Fix Linear Approximation Error in Ray-Particle Association.
|
| 29 |
+
</p>
|
| 30 |
+
</div> -->
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/auxiliary.h
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#ifndef CUDA_RASTERIZER_AUXILIARY_H_INCLUDED
|
| 13 |
+
#define CUDA_RASTERIZER_AUXILIARY_H_INCLUDED
|
| 14 |
+
|
| 15 |
+
#include "config.h"
|
| 16 |
+
#include "stdio.h"
|
| 17 |
+
|
| 18 |
+
#include <thrust/sort.h>
|
| 19 |
+
#include <thrust/binary_search.h>
|
| 20 |
+
|
| 21 |
+
#define BLOCK_SIZE (BLOCK_X * BLOCK_Y)
|
| 22 |
+
#define NUM_WARPS (BLOCK_SIZE/32)
|
| 23 |
+
// Spherical harmonics coefficients
|
| 24 |
+
__device__ const float SH_C0 = 0.28209479177387814f;
|
| 25 |
+
__device__ const float SH_C1 = 0.4886025119029199f;
|
| 26 |
+
__device__ const float SH_C2[] = {
|
| 27 |
+
1.0925484305920792f,
|
| 28 |
+
-1.0925484305920792f,
|
| 29 |
+
0.31539156525252005f,
|
| 30 |
+
-1.0925484305920792f,
|
| 31 |
+
0.5462742152960396f
|
| 32 |
+
};
|
| 33 |
+
__device__ const float SH_C3[] = {
|
| 34 |
+
-0.5900435899266435f,
|
| 35 |
+
2.890611442640554f,
|
| 36 |
+
-0.4570457994644658f,
|
| 37 |
+
0.3731763325901154f,
|
| 38 |
+
-0.4570457994644658f,
|
| 39 |
+
1.445305721320277f,
|
| 40 |
+
-0.5900435899266435f
|
| 41 |
+
};
|
| 42 |
+
|
| 43 |
+
__device__ const float ut_alpha = 1.0f;
|
| 44 |
+
__device__ const float ut_beta = 2.0f;
|
| 45 |
+
__device__ const float ut_kappa = 0.0f;
|
| 46 |
+
__device__ const float ut_lambda = ut_alpha * ut_alpha * (3.f + ut_kappa) - 3.f;
|
| 47 |
+
|
| 48 |
+
__device__ __forceinline__ float sq(float x) { return x * x; }
|
| 49 |
+
__device__ __forceinline__ float cube(float x) { return x * x * x; }
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
__device__ __forceinline__ float dot(const float3 &a, const float3 &b) {
|
| 53 |
+
return a.x * b.x + a.y * b.y + a.z * b.z;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
__device__ __forceinline__ float3 cross(const float3 &a, const float3 &b) {
|
| 57 |
+
return make_float3(a.y * b.z - a.z * b.y,
|
| 58 |
+
a.z * b.x - a.x * b.z,
|
| 59 |
+
a.x * b.y - a.y * b.x);
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
__device__ __forceinline__ float2 divide_z(const glm::vec3& v) {
|
| 63 |
+
return make_float2(v.x / v.z, v.y / v.z);
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
__device__ __forceinline__ float2 atan(const float2& v) {
|
| 67 |
+
return make_float2(atan(v.x), atan(v.y));
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
__device__ __forceinline__ float3 toFloat3(const glm::vec3& v) {
|
| 71 |
+
return make_float3(v.x, v.y, v.z);
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
__forceinline__ __device__ float ndc2Pix(float v, int S)
|
| 75 |
+
{
|
| 76 |
+
return ((v + 1.0) * S - 1.0) * 0.5;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
__forceinline__ __device__ float2 invinterpolated_uv(
|
| 80 |
+
const float focal_x, const float focal_y,
|
| 81 |
+
const float principal_x, const float principal_y,
|
| 82 |
+
const float4 dist_coeff,
|
| 83 |
+
const float tan_x, const float tan_y) {
|
| 84 |
+
// Compute the inverse interpolation for the UV coordinates
|
| 85 |
+
float2 uv_indices;
|
| 86 |
+
float radius = sqrtf(sq(tan_x) + sq(tan_y));
|
| 87 |
+
float angle = atanf(radius);
|
| 88 |
+
float angle_sq = sq(angle);
|
| 89 |
+
float angle_sq_sq = sq(angle_sq);
|
| 90 |
+
|
| 91 |
+
float r = angle * (1.0 + dist_coeff.x * angle_sq + dist_coeff.y * angle_sq_sq + dist_coeff.z * angle_sq * angle_sq_sq + dist_coeff.w * angle_sq_sq * angle_sq_sq);
|
| 92 |
+
uv_indices.x = (tan_x * r * focal_x) / radius + principal_x;
|
| 93 |
+
uv_indices.y = (tan_y * r * focal_y) / radius + principal_y;
|
| 94 |
+
return uv_indices;
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
__forceinline__ __device__ void getRect2(const int4 pbf, uint2& rect_min, uint2& rect_max, dim3 grid)
|
| 98 |
+
{
|
| 99 |
+
rect_min = {
|
| 100 |
+
min(grid.x, max((int)0, (int)((pbf.x) / BLOCK_X))),
|
| 101 |
+
min(grid.y, max((int)0, (int)((pbf.z) / BLOCK_Y)))
|
| 102 |
+
};
|
| 103 |
+
rect_max = {
|
| 104 |
+
min(grid.x, max((int)0, (int)((pbf.y + BLOCK_X - 1) / BLOCK_X))),
|
| 105 |
+
min(grid.y, max((int)0, (int)((pbf.w + BLOCK_Y - 1) / BLOCK_Y)))
|
| 106 |
+
};
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
|
| 110 |
+
__forceinline__ __device__ void searchsorted_intersect(
|
| 111 |
+
const float* ref_start, int span,
|
| 112 |
+
const float* values,
|
| 113 |
+
int* indices
|
| 114 |
+
) {
|
| 115 |
+
thrust::lower_bound(thrust::device, ref_start, ref_start + span, values, values + 2, indices);
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
// Check whether the ray direction for pixel `idx` falls within the
|
| 119 |
+
// Particle Bounding Frustum (PBF) defined in tan-space as pbf_tan.
|
| 120 |
+
// pbf_tan: (.x=tan_theta_min, .y=tan_theta_max, .z=tan_phi_min, .w=tan_phi_max)
|
| 121 |
+
__forceinline__ __device__ bool checkValid(
|
| 122 |
+
const float* raymap,
|
| 123 |
+
const int idx,
|
| 124 |
+
const float4 pbf_tan
|
| 125 |
+
) {
|
| 126 |
+
float2 rayf = {(float)raymap[idx * 3] / (float)raymap[idx * 3 + 2], (float)raymap[idx * 3 + 1] / (float)raymap[idx * 3 + 2]};
|
| 127 |
+
if (rayf.x < pbf_tan.x || rayf.x > pbf_tan.y) return false;
|
| 128 |
+
if (rayf.y < pbf_tan.z || rayf.y > pbf_tan.w) return false;
|
| 129 |
+
return true;
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
// Emit (tile_id | depth, gaussian_id) key/value pairs for every tile that the
|
| 133 |
+
// Particle Bounding Frustum (PBF) of this Gaussian overlaps. When xmap/ymap
|
| 134 |
+
// are provided the PBF is projected onto the KB image grid via sorted intersection;
|
| 135 |
+
// otherwise a simple tile-rectangle loop is used (BEAP mode).
|
| 136 |
+
__forceinline__ __device__ uint32_t duplicateToTilesTouched(
|
| 137 |
+
const float3 points_xyz,
|
| 138 |
+
const float3* w2o,
|
| 139 |
+
const float opac,
|
| 140 |
+
int4 pbf,
|
| 141 |
+
float4 pbf_tan,
|
| 142 |
+
const dim3 grid,
|
| 143 |
+
const int W, int H,
|
| 144 |
+
uint32_t idx, uint32_t off, float depth,
|
| 145 |
+
uint64_t* gaussian_keys_unsorted,
|
| 146 |
+
uint32_t* gaussian_values_unsorted,
|
| 147 |
+
const float* xmap,
|
| 148 |
+
const float* ymap
|
| 149 |
+
)
|
| 150 |
+
{
|
| 151 |
+
uint2 rect_min, rect_max;
|
| 152 |
+
|
| 153 |
+
getRect2(pbf, rect_min, rect_max, grid);
|
| 154 |
+
|
| 155 |
+
int y_span = rect_max.y - rect_min.y;
|
| 156 |
+
int x_span = rect_max.x - rect_min.x;
|
| 157 |
+
|
| 158 |
+
// If no tiles are touched, return 0
|
| 159 |
+
if (y_span * x_span == 0) {
|
| 160 |
+
return 0;
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
bool isY = y_span > x_span;
|
| 164 |
+
const uint2 rect_max_ = isY ? rect_max : make_uint2(rect_max.y, rect_max.x);
|
| 165 |
+
const uint2 rect_min_ = isY ? rect_min : make_uint2(rect_min.y, rect_min.x);
|
| 166 |
+
const int4 pbf_ = isY ? pbf : make_int4(pbf.z, pbf.w, pbf.x, pbf.y);
|
| 167 |
+
const float2 pbf_tan_ = isY ? make_float2(pbf_tan.x, pbf_tan.y) : make_float2(pbf_tan.z, pbf_tan.w);
|
| 168 |
+
const float* cmap = isY ? xmap : ymap;
|
| 169 |
+
const int W_ = isY ? W : H;
|
| 170 |
+
// const int H_ = isY ? H : W;
|
| 171 |
+
|
| 172 |
+
uint32_t tiles_count = 0;
|
| 173 |
+
int2 slice_intersect_top, slice_intersect_bottom;
|
| 174 |
+
int slice_lefttop, slice_leftbottom;
|
| 175 |
+
|
| 176 |
+
// For each tile that the bounding rect overlaps, emit a
|
| 177 |
+
// key/value pair. The key is | tile ID | depth |,
|
| 178 |
+
// and the value is the ID of the Gaussian. Sorting the values
|
| 179 |
+
// with this key yields Gaussian IDs in a list, such that they
|
| 180 |
+
// are first sorted by tile and then by depth.
|
| 181 |
+
for (int y = rect_min_.y; y < rect_max_.y; y++)
|
| 182 |
+
{
|
| 183 |
+
// Get original BEAP ranged slice;
|
| 184 |
+
slice_leftbottom = min(max(pbf_.z, y * BLOCK_Y), pbf_.w) * W_ + pbf_.x;
|
| 185 |
+
searchsorted_intersect(cmap + slice_leftbottom, pbf_.y - pbf_.x + 1, (float*)(&pbf_tan_), (int*)(&slice_intersect_bottom));
|
| 186 |
+
|
| 187 |
+
slice_lefttop = min(max(pbf_.z, (y * BLOCK_Y + BLOCK_Y - 1)), pbf_.w) * W_ + pbf_.x;
|
| 188 |
+
searchsorted_intersect(cmap + slice_lefttop, pbf_.y - pbf_.x + 1, (float*)(&pbf_tan_), (int*)(&slice_intersect_top));
|
| 189 |
+
|
| 190 |
+
// Cull out useless tiles;
|
| 191 |
+
int tmp_left = min(max(0, min(slice_intersect_top.x, slice_intersect_bottom.x)), pbf_.y - pbf_.x);
|
| 192 |
+
int tmp_right = min(max(0, max(slice_intersect_top.y, slice_intersect_bottom.y)), pbf_.y - pbf_.x);
|
| 193 |
+
if (tmp_left >= tmp_right) {
|
| 194 |
+
continue;
|
| 195 |
+
}
|
| 196 |
+
int min_tile_x = max(rect_min_.x,
|
| 197 |
+
min(rect_max_.x, (int)((pbf_.x + tmp_left) / BLOCK_X))
|
| 198 |
+
);
|
| 199 |
+
int max_tile_x = max(rect_min_.x,
|
| 200 |
+
min(rect_max_.x, (int)((pbf_.x + tmp_right + BLOCK_X - 1) / BLOCK_X))
|
| 201 |
+
);
|
| 202 |
+
tiles_count += (max_tile_x - min_tile_x);
|
| 203 |
+
for (int x = min_tile_x; x < max_tile_x; x++)
|
| 204 |
+
{
|
| 205 |
+
|
| 206 |
+
if (gaussian_keys_unsorted != nullptr) {
|
| 207 |
+
uint64_t key = isY ? y * grid.x + x : x * grid.x + y;
|
| 208 |
+
key <<= 32;
|
| 209 |
+
key |= *((uint32_t*)&depth);
|
| 210 |
+
gaussian_keys_unsorted[off] = key;
|
| 211 |
+
gaussian_values_unsorted[off] = idx;
|
| 212 |
+
off++;
|
| 213 |
+
}
|
| 214 |
+
}
|
| 215 |
+
}
|
| 216 |
+
return tiles_count;
|
| 217 |
+
}
|
| 218 |
+
|
| 219 |
+
__forceinline__ __device__ float3 transformPoint4x3(const float3& p, const float* matrix)
|
| 220 |
+
{
|
| 221 |
+
float3 transformed = {
|
| 222 |
+
matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],
|
| 223 |
+
matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],
|
| 224 |
+
matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],
|
| 225 |
+
};
|
| 226 |
+
return transformed;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
__forceinline__ __device__ float4 transformPoint4x4(const float3& p, const float* matrix)
|
| 230 |
+
{
|
| 231 |
+
float4 transformed = {
|
| 232 |
+
matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],
|
| 233 |
+
matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],
|
| 234 |
+
matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],
|
| 235 |
+
matrix[3] * p.x + matrix[7] * p.y + matrix[11] * p.z + matrix[15]
|
| 236 |
+
};
|
| 237 |
+
return transformed;
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
__forceinline__ __device__ float3 transformVec4x3(const float3& p, const float* matrix)
|
| 241 |
+
{
|
| 242 |
+
float3 transformed = {
|
| 243 |
+
matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z,
|
| 244 |
+
matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z,
|
| 245 |
+
matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z,
|
| 246 |
+
};
|
| 247 |
+
return transformed;
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
__forceinline__ __device__ float3 transformVec4x3Transpose(const float3& p, const float* matrix)
|
| 251 |
+
{
|
| 252 |
+
float3 transformed = {
|
| 253 |
+
matrix[0] * p.x + matrix[1] * p.y + matrix[2] * p.z,
|
| 254 |
+
matrix[4] * p.x + matrix[5] * p.y + matrix[6] * p.z,
|
| 255 |
+
matrix[8] * p.x + matrix[9] * p.y + matrix[10] * p.z,
|
| 256 |
+
};
|
| 257 |
+
return transformed;
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
__forceinline__ __device__ float dnormvdz(float3 v, float3 dv)
|
| 261 |
+
{
|
| 262 |
+
float sum2 = v.x * v.x + v.y * v.y + v.z * v.z;
|
| 263 |
+
float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
|
| 264 |
+
float dnormvdz = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;
|
| 265 |
+
return dnormvdz;
|
| 266 |
+
}
|
| 267 |
+
|
| 268 |
+
__forceinline__ __device__ float3 dnormvdv(float3 v, float3 dv)
|
| 269 |
+
{
|
| 270 |
+
float sum2 = v.x * v.x + v.y * v.y + v.z * v.z;
|
| 271 |
+
float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
|
| 272 |
+
|
| 273 |
+
float3 dnormvdv;
|
| 274 |
+
dnormvdv.x = ((+sum2 - v.x * v.x) * dv.x - v.y * v.x * dv.y - v.z * v.x * dv.z) * invsum32;
|
| 275 |
+
dnormvdv.y = (-v.x * v.y * dv.x + (sum2 - v.y * v.y) * dv.y - v.z * v.y * dv.z) * invsum32;
|
| 276 |
+
dnormvdv.z = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;
|
| 277 |
+
return dnormvdv;
|
| 278 |
+
}
|
| 279 |
+
|
| 280 |
+
__forceinline__ __device__ float4 dnormvdv(float4 v, float4 dv)
|
| 281 |
+
{
|
| 282 |
+
float sum2 = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
|
| 283 |
+
float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
|
| 284 |
+
|
| 285 |
+
float4 vdv = { v.x * dv.x, v.y * dv.y, v.z * dv.z, v.w * dv.w };
|
| 286 |
+
float vdv_sum = vdv.x + vdv.y + vdv.z + vdv.w;
|
| 287 |
+
float4 dnormvdv;
|
| 288 |
+
dnormvdv.x = ((sum2 - v.x * v.x) * dv.x - v.x * (vdv_sum - vdv.x)) * invsum32;
|
| 289 |
+
dnormvdv.y = ((sum2 - v.y * v.y) * dv.y - v.y * (vdv_sum - vdv.y)) * invsum32;
|
| 290 |
+
dnormvdv.z = ((sum2 - v.z * v.z) * dv.z - v.z * (vdv_sum - vdv.z)) * invsum32;
|
| 291 |
+
dnormvdv.w = ((sum2 - v.w * v.w) * dv.w - v.w * (vdv_sum - vdv.w)) * invsum32;
|
| 292 |
+
return dnormvdv;
|
| 293 |
+
}
|
| 294 |
+
|
| 295 |
+
__forceinline__ __device__ float sigmoid(float x)
|
| 296 |
+
{
|
| 297 |
+
return 1.0f / (1.0f + expf(-x));
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
+
// ── Packed-type conventions used throughout the rasterizer ──────────────────
|
| 301 |
+
// float2 h_opacity : { x = antialiasing variance h_var,
|
| 302 |
+
// y = antialiasing-scaled Gaussian opacity }
|
| 303 |
+
// float4 pbf_tan : PBF (Particle Bounding Frustum) in ray-direction
|
| 304 |
+
// tangent space { x = tan_theta_min, y = tan_theta_max,
|
| 305 |
+
// z = tan_phi_min, w = tan_phi_max }
|
| 306 |
+
// float3 w2o[3] : rows of the world-to-object (canonical) matrix Σ^{-1/2}R_view^T
|
| 307 |
+
// (one float3 per row → 3 rows total per Gaussian)
|
| 308 |
+
// ────────────────────────────────────────────────────────────────────────────
|
| 309 |
+
|
| 310 |
+
__forceinline__ __device__ bool in_frustum(int idx,
|
| 311 |
+
const float* orig_points,
|
| 312 |
+
const float* viewmatrix,
|
| 313 |
+
bool prefiltered,
|
| 314 |
+
float3& p_view,
|
| 315 |
+
float near_threshold = 0.2f)
|
| 316 |
+
{
|
| 317 |
+
float3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] };
|
| 318 |
+
|
| 319 |
+
// Bring points to screen space
|
| 320 |
+
p_view = transformPoint4x3(p_orig, viewmatrix);
|
| 321 |
+
|
| 322 |
+
if (p_view.z <= near_threshold)
|
| 323 |
+
{
|
| 324 |
+
if (prefiltered)
|
| 325 |
+
{
|
| 326 |
+
printf("Point is filtered although prefiltered is set. This shouldn't happen!");
|
| 327 |
+
__trap();
|
| 328 |
+
}
|
| 329 |
+
return false;
|
| 330 |
+
}
|
| 331 |
+
return true;
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
+
#define CHECK_CUDA(A, debug) \
|
| 335 |
+
A; if(debug) { \
|
| 336 |
+
auto ret = cudaDeviceSynchronize(); \
|
| 337 |
+
if (ret != cudaSuccess) { \
|
| 338 |
+
std::cerr << "\n[CUDA ERROR] in " << __FILE__ << "\nLine " << __LINE__ << ": " << cudaGetErrorString(ret); \
|
| 339 |
+
throw std::runtime_error(cudaGetErrorString(ret)); \
|
| 340 |
+
} \
|
| 341 |
+
}
|
| 342 |
+
|
| 343 |
+
#endif
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/backward.cu
ADDED
|
@@ -0,0 +1,642 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#include "backward.h"
|
| 13 |
+
#include "auxiliary.h"
|
| 14 |
+
#include <cooperative_groups.h>
|
| 15 |
+
#include <cooperative_groups/reduce.h>
|
| 16 |
+
namespace cg = cooperative_groups;
|
| 17 |
+
|
| 18 |
+
//// IMPLEMENTATION OF THE 3DGEER BACKWARD FUNCTION
|
| 19 |
+
// Backward pass for the conversion of scale and rotation to the inversed Cov3Ds.
|
| 20 |
+
__device__ void computeWorldToObject(int idx, const glm::vec3 scale, float mod, const glm::vec4 rot, glm::mat3 dL_dMt_inv, glm::vec3* dL_dscales, glm::vec4* dL_drots, float& dL_dhvar, float h_var) {
|
| 21 |
+
// see details in 3DGEER paper (Eq.C.11-12)
|
| 22 |
+
// Normalize quaternion to get valid rotation
|
| 23 |
+
glm::vec4 q = rot;// / glm::length(rot);
|
| 24 |
+
float r = q.x; //r
|
| 25 |
+
float x = q.y; //i
|
| 26 |
+
float y = q.z; //j
|
| 27 |
+
float z = q.w; //k
|
| 28 |
+
|
| 29 |
+
// Compute inv_rotation matrix from quaternion (the transpose of the rotation matrix); column-major
|
| 30 |
+
glm::mat3 R_inv = glm::mat3(
|
| 31 |
+
1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y), // column 0
|
| 32 |
+
2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x), // column 1
|
| 33 |
+
2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y) // column 2
|
| 34 |
+
);
|
| 35 |
+
glm::mat3 Rt_inv = glm::transpose(R_inv); // to get the row vectors
|
| 36 |
+
|
| 37 |
+
// Compute inverse scaling matrix
|
| 38 |
+
glm::mat3 S_inv = glm::mat3(1.0f);
|
| 39 |
+
float scaling_inv[3] = { sqrtf(1.f / (sq(scale.x * mod) + h_var)), sqrtf(1.f / (sq(scale.y * mod) + h_var)), sqrtf(1.f / (sq(scale.z * mod) + h_var)) };
|
| 40 |
+
S_inv[0][0] *= scaling_inv[0];
|
| 41 |
+
S_inv[1][1] *= scaling_inv[1];
|
| 42 |
+
S_inv[2][2] *= scaling_inv[2];
|
| 43 |
+
|
| 44 |
+
// Compute gradients of loss w.r.t. scale
|
| 45 |
+
glm::vec3* dL_dscale = dL_dscales + idx;
|
| 46 |
+
float dL_dhscale_x = glm::dot(Rt_inv[0], dL_dMt_inv[0]) * (-S_inv[0][0] * S_inv[0][0]);
|
| 47 |
+
dL_dscale->x = dL_dhscale_x * (S_inv[0][0] * (scale.x * mod));
|
| 48 |
+
float dL_dhscale_y = glm::dot(Rt_inv[1], dL_dMt_inv[1]) * (-S_inv[1][1] * S_inv[1][1]);
|
| 49 |
+
dL_dscale->y = dL_dhscale_y * (S_inv[1][1] * (scale.y * mod));
|
| 50 |
+
float dL_dhscale_z = glm::dot(Rt_inv[2], dL_dMt_inv[2]) * (-S_inv[2][2] * S_inv[2][2]);
|
| 51 |
+
dL_dscale->z = dL_dhscale_z * (S_inv[2][2] * (scale.z * mod));
|
| 52 |
+
|
| 53 |
+
// Scale the loss gradient w.r.t. inv(RS)
|
| 54 |
+
dL_dMt_inv[0] *= S_inv[0][0];
|
| 55 |
+
dL_dMt_inv[1] *= S_inv[1][1];
|
| 56 |
+
dL_dMt_inv[2] *= S_inv[2][2];
|
| 57 |
+
|
| 58 |
+
// Gradients of loss w.r.t. normalized quaternion
|
| 59 |
+
glm::vec4 dL_dq;
|
| 60 |
+
dL_dq.x = 2 * z * (dL_dMt_inv[0][1] - dL_dMt_inv[1][0]) + 2 * y * (dL_dMt_inv[2][0] - dL_dMt_inv[0][2]) + 2 * x * (dL_dMt_inv[1][2] - dL_dMt_inv[2][1]); //wrt r,r
|
| 61 |
+
dL_dq.y = 2 * y * (dL_dMt_inv[1][0] + dL_dMt_inv[0][1]) + 2 * z * (dL_dMt_inv[2][0] + dL_dMt_inv[0][2]) + 2 * r * (dL_dMt_inv[1][2] - dL_dMt_inv[2][1]) - 4 * x * (dL_dMt_inv[2][2] + dL_dMt_inv[1][1]); //wrt i,x
|
| 62 |
+
dL_dq.z = 2 * x * (dL_dMt_inv[1][0] + dL_dMt_inv[0][1]) + 2 * r * (dL_dMt_inv[2][0] - dL_dMt_inv[0][2]) + 2 * z * (dL_dMt_inv[1][2] + dL_dMt_inv[2][1]) - 4 * y * (dL_dMt_inv[2][2] + dL_dMt_inv[0][0]); //wrt j,y
|
| 63 |
+
dL_dq.w = 2 * r * (dL_dMt_inv[0][1] - dL_dMt_inv[1][0]) + 2 * x * (dL_dMt_inv[2][0] + dL_dMt_inv[0][2]) + 2 * y * (dL_dMt_inv[1][2] + dL_dMt_inv[2][1]) - 4 * z * (dL_dMt_inv[1][1] + dL_dMt_inv[0][0]); //wrt k,z
|
| 64 |
+
|
| 65 |
+
// Gradients of loss w.r.t. unnormalized quaternion
|
| 66 |
+
float4* dL_drot = reinterpret_cast<float4*>(dL_drots + idx);
|
| 67 |
+
*dL_drot = float4{ dL_dq.x, dL_dq.y, dL_dq.z, dL_dq.w };//dnormvdv(float4{ rot.x, rot.y, rot.z, rot.w }, float4{ dL_dq.x, dL_dq.y, dL_dq.z, dL_dq.w });
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
// Backward pass for conversion of spherical harmonics to RGB for
|
| 71 |
+
// each Gaussian.
|
| 72 |
+
__device__ void computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, const bool* clamped, const glm::vec3* dL_dcolor, glm::vec3* dL_dmeans, glm::vec3* dL_dshs)
|
| 73 |
+
{
|
| 74 |
+
// Compute intermediate values, as it is done during forward
|
| 75 |
+
glm::vec3 pos = means[idx];
|
| 76 |
+
glm::vec3 dir_orig = pos - campos;
|
| 77 |
+
glm::vec3 dir = dir_orig / glm::length(dir_orig);
|
| 78 |
+
|
| 79 |
+
glm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;
|
| 80 |
+
|
| 81 |
+
// Use PyTorch rule for clamping: if clamping was applied,
|
| 82 |
+
// gradient becomes 0.
|
| 83 |
+
glm::vec3 dL_dRGB = dL_dcolor[idx];
|
| 84 |
+
dL_dRGB.x *= clamped[3 * idx + 0] ? 0 : 1;
|
| 85 |
+
dL_dRGB.y *= clamped[3 * idx + 1] ? 0 : 1;
|
| 86 |
+
dL_dRGB.z *= clamped[3 * idx + 2] ? 0 : 1;
|
| 87 |
+
|
| 88 |
+
glm::vec3 dRGBdx(0, 0, 0);
|
| 89 |
+
glm::vec3 dRGBdy(0, 0, 0);
|
| 90 |
+
glm::vec3 dRGBdz(0, 0, 0);
|
| 91 |
+
float x = dir.x;
|
| 92 |
+
float y = dir.y;
|
| 93 |
+
float z = dir.z;
|
| 94 |
+
|
| 95 |
+
// Target location for this Gaussian to write SH gradients to
|
| 96 |
+
glm::vec3* dL_dsh = dL_dshs + idx * max_coeffs;
|
| 97 |
+
|
| 98 |
+
// No tricks here, just high school-level calculus.
|
| 99 |
+
float dRGBdsh0 = SH_C0;
|
| 100 |
+
dL_dsh[0] = dRGBdsh0 * dL_dRGB;
|
| 101 |
+
if (deg > 0)
|
| 102 |
+
{
|
| 103 |
+
float dRGBdsh1 = -SH_C1 * y;
|
| 104 |
+
float dRGBdsh2 = SH_C1 * z;
|
| 105 |
+
float dRGBdsh3 = -SH_C1 * x;
|
| 106 |
+
dL_dsh[1] = dRGBdsh1 * dL_dRGB;
|
| 107 |
+
dL_dsh[2] = dRGBdsh2 * dL_dRGB;
|
| 108 |
+
dL_dsh[3] = dRGBdsh3 * dL_dRGB;
|
| 109 |
+
|
| 110 |
+
dRGBdx = -SH_C1 * sh[3];
|
| 111 |
+
dRGBdy = -SH_C1 * sh[1];
|
| 112 |
+
dRGBdz = SH_C1 * sh[2];
|
| 113 |
+
|
| 114 |
+
if (deg > 1)
|
| 115 |
+
{
|
| 116 |
+
float xx = x * x, yy = y * y, zz = z * z;
|
| 117 |
+
float xy = x * y, yz = y * z, xz = x * z;
|
| 118 |
+
|
| 119 |
+
float dRGBdsh4 = SH_C2[0] * xy;
|
| 120 |
+
float dRGBdsh5 = SH_C2[1] * yz;
|
| 121 |
+
float dRGBdsh6 = SH_C2[2] * (2.f * zz - xx - yy);
|
| 122 |
+
float dRGBdsh7 = SH_C2[3] * xz;
|
| 123 |
+
float dRGBdsh8 = SH_C2[4] * (xx - yy);
|
| 124 |
+
dL_dsh[4] = dRGBdsh4 * dL_dRGB;
|
| 125 |
+
dL_dsh[5] = dRGBdsh5 * dL_dRGB;
|
| 126 |
+
dL_dsh[6] = dRGBdsh6 * dL_dRGB;
|
| 127 |
+
dL_dsh[7] = dRGBdsh7 * dL_dRGB;
|
| 128 |
+
dL_dsh[8] = dRGBdsh8 * dL_dRGB;
|
| 129 |
+
|
| 130 |
+
dRGBdx += SH_C2[0] * y * sh[4] + SH_C2[2] * 2.f * -x * sh[6] + SH_C2[3] * z * sh[7] + SH_C2[4] * 2.f * x * sh[8];
|
| 131 |
+
dRGBdy += SH_C2[0] * x * sh[4] + SH_C2[1] * z * sh[5] + SH_C2[2] * 2.f * -y * sh[6] + SH_C2[4] * 2.f * -y * sh[8];
|
| 132 |
+
dRGBdz += SH_C2[1] * y * sh[5] + SH_C2[2] * 2.f * 2.f * z * sh[6] + SH_C2[3] * x * sh[7];
|
| 133 |
+
|
| 134 |
+
if (deg > 2)
|
| 135 |
+
{
|
| 136 |
+
float dRGBdsh9 = SH_C3[0] * y * (3.f * xx - yy);
|
| 137 |
+
float dRGBdsh10 = SH_C3[1] * xy * z;
|
| 138 |
+
float dRGBdsh11 = SH_C3[2] * y * (4.f * zz - xx - yy);
|
| 139 |
+
float dRGBdsh12 = SH_C3[3] * z * (2.f * zz - 3.f * xx - 3.f * yy);
|
| 140 |
+
float dRGBdsh13 = SH_C3[4] * x * (4.f * zz - xx - yy);
|
| 141 |
+
float dRGBdsh14 = SH_C3[5] * z * (xx - yy);
|
| 142 |
+
float dRGBdsh15 = SH_C3[6] * x * (xx - 3.f * yy);
|
| 143 |
+
dL_dsh[9] = dRGBdsh9 * dL_dRGB;
|
| 144 |
+
dL_dsh[10] = dRGBdsh10 * dL_dRGB;
|
| 145 |
+
dL_dsh[11] = dRGBdsh11 * dL_dRGB;
|
| 146 |
+
dL_dsh[12] = dRGBdsh12 * dL_dRGB;
|
| 147 |
+
dL_dsh[13] = dRGBdsh13 * dL_dRGB;
|
| 148 |
+
dL_dsh[14] = dRGBdsh14 * dL_dRGB;
|
| 149 |
+
dL_dsh[15] = dRGBdsh15 * dL_dRGB;
|
| 150 |
+
|
| 151 |
+
dRGBdx += (
|
| 152 |
+
SH_C3[0] * sh[9] * 3.f * 2.f * xy +
|
| 153 |
+
SH_C3[1] * sh[10] * yz +
|
| 154 |
+
SH_C3[2] * sh[11] * -2.f * xy +
|
| 155 |
+
SH_C3[3] * sh[12] * -3.f * 2.f * xz +
|
| 156 |
+
SH_C3[4] * sh[13] * (-3.f * xx + 4.f * zz - yy) +
|
| 157 |
+
SH_C3[5] * sh[14] * 2.f * xz +
|
| 158 |
+
SH_C3[6] * sh[15] * 3.f * (xx - yy));
|
| 159 |
+
|
| 160 |
+
dRGBdy += (
|
| 161 |
+
SH_C3[0] * sh[9] * 3.f * (xx - yy) +
|
| 162 |
+
SH_C3[1] * sh[10] * xz +
|
| 163 |
+
SH_C3[2] * sh[11] * (-3.f * yy + 4.f * zz - xx) +
|
| 164 |
+
SH_C3[3] * sh[12] * -3.f * 2.f * yz +
|
| 165 |
+
SH_C3[4] * sh[13] * -2.f * xy +
|
| 166 |
+
SH_C3[5] * sh[14] * -2.f * yz +
|
| 167 |
+
SH_C3[6] * sh[15] * -3.f * 2.f * xy);
|
| 168 |
+
|
| 169 |
+
dRGBdz += (
|
| 170 |
+
SH_C3[1] * sh[10] * xy +
|
| 171 |
+
SH_C3[2] * sh[11] * 4.f * 2.f * yz +
|
| 172 |
+
SH_C3[3] * sh[12] * 3.f * (2.f * zz - xx - yy) +
|
| 173 |
+
SH_C3[4] * sh[13] * 4.f * 2.f * xz +
|
| 174 |
+
SH_C3[5] * sh[14] * (xx - yy));
|
| 175 |
+
}
|
| 176 |
+
}
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
// The view direction is an input to the computation. View direction
|
| 180 |
+
// is influenced by the Gaussian's mean, so SHs gradients
|
| 181 |
+
// must propagate back into 3D position.
|
| 182 |
+
glm::vec3 dL_ddir(glm::dot(dRGBdx, dL_dRGB), glm::dot(dRGBdy, dL_dRGB), glm::dot(dRGBdz, dL_dRGB));
|
| 183 |
+
|
| 184 |
+
// Account for normalization of direction
|
| 185 |
+
float3 dL_dmean = dnormvdv(float3{ dir_orig.x, dir_orig.y, dir_orig.z }, float3{ dL_ddir.x, dL_ddir.y, dL_ddir.z });
|
| 186 |
+
|
| 187 |
+
// Gradients of loss w.r.t. Gaussian means, but only the portion
|
| 188 |
+
// that is caused because the mean affects the view-dependent color.
|
| 189 |
+
// Additional mean gradient is accumulated in below methods.
|
| 190 |
+
dL_dmeans[idx] += glm::vec3(dL_dmean.x, dL_dmean.y, dL_dmean.z);
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
|
| 194 |
+
template<int C>
|
| 195 |
+
__global__ void preprocessCUDA_mah(
|
| 196 |
+
int P, int D, int M,
|
| 197 |
+
const float3* means,
|
| 198 |
+
const float3* means3D_view,
|
| 199 |
+
const float* depths,
|
| 200 |
+
const int* radii,
|
| 201 |
+
const float2* h_opacity,
|
| 202 |
+
const float3* w2o,
|
| 203 |
+
const float* viewmatrix,
|
| 204 |
+
const float* shs,
|
| 205 |
+
const bool* clamped,
|
| 206 |
+
const glm::vec3* scales,
|
| 207 |
+
const glm::vec4* rotations,
|
| 208 |
+
const float scale_modifier,
|
| 209 |
+
const glm::vec3* campos,
|
| 210 |
+
const float tan_fovx, float tan_fovy,
|
| 211 |
+
const float focal_x, float focal_y,
|
| 212 |
+
glm::vec3* dL_dmeans,
|
| 213 |
+
glm::vec3* dL_dmean2D,
|
| 214 |
+
float* dL_dcolor,
|
| 215 |
+
float* dL_dsh,
|
| 216 |
+
glm::vec3* dL_dscale,
|
| 217 |
+
glm::vec4* dL_drot,
|
| 218 |
+
const glm::vec3* dL_dsigmaInv,
|
| 219 |
+
float* dL_dopacity)
|
| 220 |
+
{
|
| 221 |
+
auto idx = cg::this_grid().thread_rank();
|
| 222 |
+
if (idx >= P || !(radii[idx] > 0))
|
| 223 |
+
return;
|
| 224 |
+
|
| 225 |
+
const glm::mat3 Wt = glm::mat3(
|
| 226 |
+
viewmatrix[0], viewmatrix[4], viewmatrix[8],
|
| 227 |
+
viewmatrix[1], viewmatrix[5], viewmatrix[9],
|
| 228 |
+
viewmatrix[2], viewmatrix[6], viewmatrix[10]);
|
| 229 |
+
|
| 230 |
+
float3 p_view = means3D_view[idx];
|
| 231 |
+
float h_var = h_opacity[idx].x;
|
| 232 |
+
|
| 233 |
+
// Compute gradient updates due to computing covariance from scale/rotation
|
| 234 |
+
float dL_dhvar = 0.0f;
|
| 235 |
+
const glm::vec3* dL_dsigma_inv = dL_dsigmaInv + 3 * idx;
|
| 236 |
+
// see 3DGEER paper: https://openreview.net/pdf?id=4voMNlRWI7 (Eq.9)
|
| 237 |
+
glm::vec3 dL_dw2o[3];
|
| 238 |
+
dL_dw2o[0] = glm::vec3( dL_dmeans[idx].x * p_view.x + dL_dsigma_inv[0].x,
|
| 239 |
+
dL_dmeans[idx].x * p_view.y + dL_dsigma_inv[0].y,
|
| 240 |
+
dL_dmeans[idx].x * p_view.z + dL_dsigma_inv[0].z );
|
| 241 |
+
|
| 242 |
+
dL_dw2o[1] = glm::vec3( dL_dmeans[idx].y * p_view.x + dL_dsigma_inv[1].x,
|
| 243 |
+
dL_dmeans[idx].y * p_view.y + dL_dsigma_inv[1].y,
|
| 244 |
+
dL_dmeans[idx].y * p_view.z + dL_dsigma_inv[1].z );
|
| 245 |
+
|
| 246 |
+
dL_dw2o[2] = glm::vec3( dL_dmeans[idx].z * p_view.x + dL_dsigma_inv[2].x,
|
| 247 |
+
dL_dmeans[idx].z * p_view.y + dL_dsigma_inv[2].y,
|
| 248 |
+
dL_dmeans[idx].z * p_view.z + dL_dsigma_inv[2].z );
|
| 249 |
+
|
| 250 |
+
glm::mat3 dL_dMt_inv = {
|
| 251 |
+
Wt * dL_dw2o[0],
|
| 252 |
+
Wt * dL_dw2o[1],
|
| 253 |
+
Wt * dL_dw2o[2]
|
| 254 |
+
};
|
| 255 |
+
|
| 256 |
+
if (scales)
|
| 257 |
+
// see 3DGEER paper: https://openreview.net/pdf?id=4voMNlRWI7 (Eq.10-12)
|
| 258 |
+
computeWorldToObject(idx, scales[idx], scale_modifier, rotations[idx], dL_dMt_inv, dL_dscale, dL_drot, dL_dhvar, h_var);
|
| 259 |
+
|
| 260 |
+
// Compute gradient updates to means in the view space
|
| 261 |
+
glm::vec3 dL_dmean_view = glm::vec3(
|
| 262 |
+
dL_dmeans[idx].x * w2o[idx * 3].x + dL_dmeans[idx].y * w2o[idx * 3 + 1].x + dL_dmeans[idx].z * w2o[idx * 3 + 2].x,
|
| 263 |
+
dL_dmeans[idx].x * w2o[idx * 3].y + dL_dmeans[idx].y * w2o[idx * 3 + 1].y + dL_dmeans[idx].z * w2o[idx * 3 + 2].y,
|
| 264 |
+
dL_dmeans[idx].x * w2o[idx * 3].z + dL_dmeans[idx].y * w2o[idx * 3 + 1].z + dL_dmeans[idx].z * w2o[idx * 3 + 2].z );
|
| 265 |
+
|
| 266 |
+
float h_cov_scaling = (scales[idx].x * scale_modifier) / sqrtf((sq(scales[idx].x * scale_modifier) + h_var)) * (scales[idx].y * scale_modifier) / sqrtf((sq(scales[idx].y * scale_modifier) + h_var)) * (scales[idx].z * scale_modifier) / sqrtf((sq(scales[idx].z * scale_modifier) + h_var));
|
| 267 |
+
dL_dopacity[idx] *= fmaxf(h_cov_scaling, 5e-3f);
|
| 268 |
+
|
| 269 |
+
// Compute gradient updates to means in the object space
|
| 270 |
+
// see 3DGEER paper: https://openreview.net/pdf?id=4voMNlRWI7 (Eq.13)
|
| 271 |
+
dL_dmeans[idx] = Wt * dL_dmean_view;
|
| 272 |
+
|
| 273 |
+
// For densification
|
| 274 |
+
dL_dmean2D[idx] = glm::vec3(
|
| 275 |
+
dL_dmean2D[idx].x * w2o[idx * 3].x + dL_dmean2D[idx].y * w2o[idx * 3 + 1].x + dL_dmean2D[idx].z * w2o[idx * 3 + 2].x,
|
| 276 |
+
dL_dmean2D[idx].x * w2o[idx * 3].y + dL_dmean2D[idx].y * w2o[idx * 3 + 1].y + dL_dmean2D[idx].z * w2o[idx * 3 + 2].y,
|
| 277 |
+
dL_dmean2D[idx].x * w2o[idx * 3].z + dL_dmean2D[idx].y * w2o[idx * 3 + 1].z + dL_dmean2D[idx].z * w2o[idx * 3 + 2].z ) * (sq(depths[idx]) + 1.f) * 3e-1f;
|
| 278 |
+
|
| 279 |
+
// Compute gradient updates due to computing colors from SHs
|
| 280 |
+
if (shs)
|
| 281 |
+
computeColorFromSH(idx, D, M, (glm::vec3*)means, *campos, shs, clamped, (glm::vec3*)dL_dcolor, (glm::vec3*)dL_dmeans, (glm::vec3*)dL_dsh);
|
| 282 |
+
}
|
| 283 |
+
|
| 284 |
+
// Backward version of the rendering procedure.
|
| 285 |
+
template <uint32_t C>
|
| 286 |
+
__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)
|
| 287 |
+
renderCUDA(
|
| 288 |
+
const uint2* __restrict__ ranges,
|
| 289 |
+
const uint32_t* __restrict__ point_list,
|
| 290 |
+
int W, int H,
|
| 291 |
+
const float* tan_theta,
|
| 292 |
+
const float* tan_phi,
|
| 293 |
+
const float* __restrict__ raymap,
|
| 294 |
+
const float focal_x,
|
| 295 |
+
const float focal_y,
|
| 296 |
+
const int mode,
|
| 297 |
+
const float* __restrict__ bg_color,
|
| 298 |
+
const float3* __restrict__ points_xyz_view,
|
| 299 |
+
const float2* __restrict__ h_opacity,
|
| 300 |
+
const float3* __restrict__ w2o,
|
| 301 |
+
const float* __restrict__ colors,
|
| 302 |
+
const float* __restrict__ depths,
|
| 303 |
+
const float* __restrict__ final_Ts,
|
| 304 |
+
const uint32_t* __restrict__ n_contrib,
|
| 305 |
+
const float* __restrict__ dL_dpixels,
|
| 306 |
+
const float* __restrict__ dL_invdepths,
|
| 307 |
+
float3* __restrict__ dL_dmean2D,
|
| 308 |
+
glm::vec3* __restrict__ dL_dmeans,
|
| 309 |
+
float* __restrict__ dL_dopacity,
|
| 310 |
+
float* __restrict__ dL_dcolors,
|
| 311 |
+
float* __restrict__ dL_dinvdepths,
|
| 312 |
+
glm::vec3* __restrict__ dL_dsigmaInv
|
| 313 |
+
)
|
| 314 |
+
{
|
| 315 |
+
// We rasterize again. Compute necessary block info.
|
| 316 |
+
auto block = cg::this_thread_block();
|
| 317 |
+
const uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;
|
| 318 |
+
const uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };
|
| 319 |
+
const uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };
|
| 320 |
+
const uint32_t pix_id = W * pix.y + pix.x;
|
| 321 |
+
|
| 322 |
+
// Compute per-pixel ray direction matching the forward pass mode logic.
|
| 323 |
+
float3 rayf;
|
| 324 |
+
if (mode == 0) {
|
| 325 |
+
// BEAP mode: look up ray direction in the sorted reference arrays.
|
| 326 |
+
// In BEAP mode W == len(tan_theta) and H == len(tan_phi), so the
|
| 327 |
+
// clamped indices are always in bounds.
|
| 328 |
+
rayf = {(float)tan_theta[min(pix.x, W-1)], (float)tan_phi[min(pix.y, H-1)], 1.f};
|
| 329 |
+
} else if (mode == 1) {
|
| 330 |
+
// KB / EQ mode: per-pixel ray directions stored in the raymap [H, W, 3].
|
| 331 |
+
// Guard against out-of-bounds threads at tile edges.
|
| 332 |
+
const uint32_t safe_id = min(pix_id, (uint32_t)(W * H - 1));
|
| 333 |
+
rayf = make_float3(raymap[safe_id * 3], raymap[safe_id * 3 + 1], raymap[safe_id * 3 + 2]);
|
| 334 |
+
} else {
|
| 335 |
+
// PH mode (and any future pinhole-like mode): compute ray direction
|
| 336 |
+
// analytically from focal lengths, matching the forward kernel formula.
|
| 337 |
+
rayf = { ((float)pix.x + 0.5f) / focal_x - W / (2.0f * focal_x),
|
| 338 |
+
((float)pix.y + 0.5f) / focal_y - H / (2.0f * focal_y),
|
| 339 |
+
1.0f };
|
| 340 |
+
}
|
| 341 |
+
|
| 342 |
+
const bool inside = pix.x < W&& pix.y < H;
|
| 343 |
+
|
| 344 |
+
const uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];
|
| 345 |
+
const int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);
|
| 346 |
+
|
| 347 |
+
bool done = !inside;
|
| 348 |
+
int toDo = range.y - range.x;
|
| 349 |
+
|
| 350 |
+
__shared__ int collected_id[BLOCK_SIZE];
|
| 351 |
+
__shared__ float3 collected_xyz[BLOCK_SIZE];
|
| 352 |
+
__shared__ float2 collected_h_opacity[BLOCK_SIZE];
|
| 353 |
+
__shared__ float3 collected_w2o[BLOCK_SIZE * 3];
|
| 354 |
+
__shared__ float collected_colors[C * BLOCK_SIZE];
|
| 355 |
+
__shared__ float collected_depths[BLOCK_SIZE];
|
| 356 |
+
|
| 357 |
+
// In the forward, we stored the final value for T, the
|
| 358 |
+
// product of all (1 - alpha) factors.
|
| 359 |
+
const float T_final = inside ? final_Ts[pix_id] : 0;
|
| 360 |
+
float T = T_final;
|
| 361 |
+
|
| 362 |
+
// We start from the back. The ID of the last contributing
|
| 363 |
+
// Gaussian is known from each pixel from the forward.
|
| 364 |
+
uint32_t contributor = toDo;
|
| 365 |
+
const int last_contributor = inside ? n_contrib[pix_id] : 0;
|
| 366 |
+
|
| 367 |
+
float accum_rec[C] = { 0 };
|
| 368 |
+
float dL_dpixel[C];
|
| 369 |
+
float dL_invdepth;
|
| 370 |
+
float accum_invdepth_rec = 0;
|
| 371 |
+
if (inside)
|
| 372 |
+
{
|
| 373 |
+
for (int i = 0; i < C; i++)
|
| 374 |
+
dL_dpixel[i] = dL_dpixels[i * H * W + pix_id];
|
| 375 |
+
if(dL_invdepths)
|
| 376 |
+
dL_invdepth = dL_invdepths[pix_id];
|
| 377 |
+
}
|
| 378 |
+
|
| 379 |
+
float last_alpha = 0;
|
| 380 |
+
float last_color[C] = { 0 };
|
| 381 |
+
float last_invdepth = 0;
|
| 382 |
+
|
| 383 |
+
// // Gradient of pixel coordinate w.r.t. normalized
|
| 384 |
+
// // screen-space viewport corrdinates (-1 to 1)
|
| 385 |
+
// const float ddelx_dx = 0.5 * W;
|
| 386 |
+
// const float ddely_dy = 0.5 * H;
|
| 387 |
+
|
| 388 |
+
// Traverse all Gaussians
|
| 389 |
+
for (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)
|
| 390 |
+
{
|
| 391 |
+
// Load auxiliary data into shared memory, start in the BACK
|
| 392 |
+
// and load them in revers order.
|
| 393 |
+
block.sync();
|
| 394 |
+
const int progress = i * BLOCK_SIZE + block.thread_rank();
|
| 395 |
+
if (range.x + progress < range.y)
|
| 396 |
+
{
|
| 397 |
+
const int coll_id = point_list[range.y - progress - 1];
|
| 398 |
+
int thread_idx = block.thread_rank();
|
| 399 |
+
|
| 400 |
+
collected_id[thread_idx] = coll_id;
|
| 401 |
+
collected_xyz[thread_idx] = points_xyz_view[coll_id];
|
| 402 |
+
|
| 403 |
+
collected_h_opacity[thread_idx] = h_opacity[coll_id];
|
| 404 |
+
for (int j = 0; j < 3; j++) {
|
| 405 |
+
collected_w2o[thread_idx * 3 + j] = w2o[coll_id * 3 + j];
|
| 406 |
+
}
|
| 407 |
+
|
| 408 |
+
for (int i = 0; i < C; i++)
|
| 409 |
+
collected_colors[i * BLOCK_SIZE + thread_idx] = colors[coll_id * C + i];
|
| 410 |
+
|
| 411 |
+
if(dL_invdepths)
|
| 412 |
+
collected_depths[thread_idx] = depths[coll_id];
|
| 413 |
+
}
|
| 414 |
+
block.sync();
|
| 415 |
+
|
| 416 |
+
// Iterate over Gaussians
|
| 417 |
+
for (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)
|
| 418 |
+
{
|
| 419 |
+
// Keep track of current Gaussian ID. Skip, if this one
|
| 420 |
+
// is behind the last contributor for this pixel.
|
| 421 |
+
contributor--;
|
| 422 |
+
if (contributor >= last_contributor)
|
| 423 |
+
continue;
|
| 424 |
+
|
| 425 |
+
// Compute blending values, as before.
|
| 426 |
+
const float3 xyz = collected_xyz[j];
|
| 427 |
+
const float2 h_o = collected_h_opacity[j];
|
| 428 |
+
float3* w2o_rows = collected_w2o + j * 3;
|
| 429 |
+
|
| 430 |
+
// see 3DGEER paper: https://openreview.net/pdf?id=4voMNlRWI7 (Eq. 5, Sec.C)
|
| 431 |
+
// Transform Gaussian centre and ray direction into the canonical/object frame
|
| 432 |
+
// using the packed world-to-object matrix rows w2o_rows[0..2].
|
| 433 |
+
const float3 p_obj = { dot(xyz, w2o_rows[0]), dot(xyz, w2o_rows[1]), dot(xyz, w2o_rows[2]) };
|
| 434 |
+
const float3 d_obj = { dot(rayf, w2o_rows[0]), dot(rayf, w2o_rows[1]), dot(rayf, w2o_rows[2]) };
|
| 435 |
+
const float3 normal = cross(d_obj, p_obj);
|
| 436 |
+
const float dobj_norm_sq = dot(d_obj, d_obj);
|
| 437 |
+
const float D2 = dot(normal, normal) / dobj_norm_sq;
|
| 438 |
+
const float power_mah = -0.5f * D2;
|
| 439 |
+
|
| 440 |
+
if (power_mah > 0.0f)
|
| 441 |
+
continue;
|
| 442 |
+
|
| 443 |
+
const float G = exp(power_mah);
|
| 444 |
+
const float alpha = min(0.99f, h_o.y * G);
|
| 445 |
+
if (alpha < 1.0f / 255.0f)
|
| 446 |
+
continue;
|
| 447 |
+
|
| 448 |
+
T = T / (1.f - alpha);
|
| 449 |
+
const float dchannel_dcolor = alpha * T;
|
| 450 |
+
|
| 451 |
+
// Propagate gradients to per-Gaussian colors and keep
|
| 452 |
+
// gradients w.r.t. alpha (blending factor for a Gaussian/pixel
|
| 453 |
+
// pair).
|
| 454 |
+
float dL_dalpha = 0.0f;
|
| 455 |
+
const int global_id = collected_id[j];
|
| 456 |
+
for (int ch = 0; ch < C; ch++)
|
| 457 |
+
{
|
| 458 |
+
const float c = collected_colors[ch * BLOCK_SIZE + j];
|
| 459 |
+
// Update last color (to be used in the next iteration)
|
| 460 |
+
accum_rec[ch] = last_alpha * last_color[ch] + (1.f - last_alpha) * accum_rec[ch];
|
| 461 |
+
last_color[ch] = c;
|
| 462 |
+
|
| 463 |
+
const float dL_dchannel = dL_dpixel[ch];
|
| 464 |
+
dL_dalpha += (c - accum_rec[ch]) * dL_dchannel;
|
| 465 |
+
// Update the gradients w.r.t. color of the Gaussian.
|
| 466 |
+
// Atomic, since this pixel is just one of potentially
|
| 467 |
+
// many that were affected by this Gaussian.
|
| 468 |
+
atomicAdd(&(dL_dcolors[global_id * C + ch]), dchannel_dcolor * dL_dchannel);
|
| 469 |
+
}
|
| 470 |
+
// Propagate gradients from inverse depth to alphaas and
|
| 471 |
+
// per Gaussian inverse depths
|
| 472 |
+
if (dL_dinvdepths)
|
| 473 |
+
{
|
| 474 |
+
const float invd = 1.f / collected_depths[j];
|
| 475 |
+
accum_invdepth_rec = last_alpha * last_invdepth + (1.f - last_alpha) * accum_invdepth_rec;
|
| 476 |
+
last_invdepth = invd;
|
| 477 |
+
dL_dalpha += (invd - accum_invdepth_rec) * dL_invdepth;
|
| 478 |
+
atomicAdd(&(dL_dinvdepths[global_id]), dchannel_dcolor * dL_invdepth);
|
| 479 |
+
}
|
| 480 |
+
|
| 481 |
+
dL_dalpha *= T;
|
| 482 |
+
// Update last alpha (to be used in the next iteration)
|
| 483 |
+
last_alpha = alpha;
|
| 484 |
+
|
| 485 |
+
// Account for fact that alpha also influences how much of
|
| 486 |
+
// the background color is added if nothing left to blend
|
| 487 |
+
float bg_dot_dpixel = 0;
|
| 488 |
+
for (int i = 0; i < C; i++)
|
| 489 |
+
bg_dot_dpixel += bg_color[i] * dL_dpixel[i];
|
| 490 |
+
dL_dalpha += (-T_final / (1.f - alpha)) * bg_dot_dpixel;
|
| 491 |
+
|
| 492 |
+
|
| 493 |
+
// Helpful reusable temporary variables
|
| 494 |
+
const float dL_dG = h_o.y * dL_dalpha;
|
| 495 |
+
|
| 496 |
+
const float dL_dD2 = -0.5f * dL_dG * G;
|
| 497 |
+
const float3 dL_dnormal = { 2.f * dL_dD2 * normal.x / dobj_norm_sq, 2.f * dL_dD2 * normal.y / dobj_norm_sq, 2.f * dL_dD2 * normal.z / dobj_norm_sq };
|
| 498 |
+
const float dL_ddenom = dL_dG * G * (-power_mah / dobj_norm_sq);
|
| 499 |
+
float3 dL_dpobj;
|
| 500 |
+
dL_dpobj.x = dL_dnormal.y * d_obj.z - dL_dnormal.z * d_obj.y;
|
| 501 |
+
dL_dpobj.y = dL_dnormal.z * d_obj.x - dL_dnormal.x * d_obj.z;
|
| 502 |
+
dL_dpobj.z = dL_dnormal.x * d_obj.y - dL_dnormal.y * d_obj.x;
|
| 503 |
+
|
| 504 |
+
atomicAdd(&dL_dmeans[global_id].x, dL_dpobj.x);
|
| 505 |
+
atomicAdd(&dL_dmeans[global_id].y, dL_dpobj.y);
|
| 506 |
+
atomicAdd(&dL_dmeans[global_id].z, dL_dpobj.z);
|
| 507 |
+
|
| 508 |
+
atomicAdd(&dL_dmean2D[global_id].x, fabsf(dL_dpobj.x));
|
| 509 |
+
atomicAdd(&dL_dmean2D[global_id].y, fabsf(dL_dpobj.y));
|
| 510 |
+
atomicAdd(&dL_dmean2D[global_id].z, fabsf(dL_dpobj.z));
|
| 511 |
+
|
| 512 |
+
// see 3DGEER: https://openreview.net/pdf?id=4voMNlRWI7 (Eq.C.6-8)
|
| 513 |
+
float dL_ddobj[3];
|
| 514 |
+
dL_ddobj[0] = 2.f * dL_ddenom * d_obj.x - dL_dnormal.y * p_obj.z + dL_dnormal.z * p_obj.y;
|
| 515 |
+
dL_ddobj[1] = 2.f * dL_ddenom * d_obj.y - dL_dnormal.z * p_obj.x + dL_dnormal.x * p_obj.z;
|
| 516 |
+
dL_ddobj[2] = 2.f * dL_ddenom * d_obj.z - dL_dnormal.x * p_obj.y + dL_dnormal.y * p_obj.x;
|
| 517 |
+
// Atomic addition component-wise
|
| 518 |
+
#pragma unroll
|
| 519 |
+
for (int i = 0; i < 3; i++) {
|
| 520 |
+
atomicAdd(&dL_dsigmaInv[global_id * 3 + i].x, dL_ddobj[i] * rayf.x);
|
| 521 |
+
atomicAdd(&dL_dsigmaInv[global_id * 3 + i].y, dL_ddobj[i] * rayf.y);
|
| 522 |
+
atomicAdd(&dL_dsigmaInv[global_id * 3 + i].z, dL_ddobj[i] * rayf.z);
|
| 523 |
+
}
|
| 524 |
+
|
| 525 |
+
// Update gradients w.r.t. opacity of the Gaussian
|
| 526 |
+
atomicAdd(&(dL_dopacity[global_id]), G * dL_dalpha);
|
| 527 |
+
}
|
| 528 |
+
}
|
| 529 |
+
}
|
| 530 |
+
|
| 531 |
+
void BACKWARD::preprocess(
|
| 532 |
+
int P, int D, int M,
|
| 533 |
+
const float3* means3D,
|
| 534 |
+
const float3* means3D_view,
|
| 535 |
+
const float* depths,
|
| 536 |
+
const int* radii,
|
| 537 |
+
const float* shs,
|
| 538 |
+
const bool* clamped,
|
| 539 |
+
const float* opacities,
|
| 540 |
+
const glm::vec3* scales,
|
| 541 |
+
const glm::vec4* rotations,
|
| 542 |
+
const float scale_modifier,
|
| 543 |
+
const float2* h_opacity,
|
| 544 |
+
const float3* w2o,
|
| 545 |
+
const float* viewmatrix,
|
| 546 |
+
const float focal_x, float focal_y,
|
| 547 |
+
const float tan_fovx, float tan_fovy,
|
| 548 |
+
const glm::vec3* campos,
|
| 549 |
+
float3* dL_dmean2D,
|
| 550 |
+
const float* dL_dinvdepth,
|
| 551 |
+
float* dL_dopacity,
|
| 552 |
+
glm::vec3* dL_dmean3D,
|
| 553 |
+
float* dL_dcolor,
|
| 554 |
+
float* dL_dsh,
|
| 555 |
+
glm::vec3* dL_dscale,
|
| 556 |
+
glm::vec4* dL_drot,
|
| 557 |
+
const glm::vec3* dL_dsigmaInv,
|
| 558 |
+
bool antialiasing)
|
| 559 |
+
{
|
| 560 |
+
// Propagate gradients for the path of 2D conic matrix computation.
|
| 561 |
+
// Somewhat long, thus it is its own kernel rather than being part of
|
| 562 |
+
// "preprocess". When done, loss gradient w.r.t. 3D means has been
|
| 563 |
+
// modified and gradient w.r.t. 3D covariance matrix has been computed.
|
| 564 |
+
preprocessCUDA_mah<NUM_CHANNELS> << < (P + 255) / 256, 256 >> > (
|
| 565 |
+
P, D, M,
|
| 566 |
+
(float3*)means3D,
|
| 567 |
+
(float3*)means3D_view,
|
| 568 |
+
depths,
|
| 569 |
+
radii,
|
| 570 |
+
h_opacity,
|
| 571 |
+
w2o,
|
| 572 |
+
viewmatrix,
|
| 573 |
+
shs,
|
| 574 |
+
clamped,
|
| 575 |
+
(glm::vec3*)scales,
|
| 576 |
+
(glm::vec4*)rotations,
|
| 577 |
+
scale_modifier,
|
| 578 |
+
campos,
|
| 579 |
+
tan_fovx, tan_fovy,
|
| 580 |
+
focal_x, focal_y,
|
| 581 |
+
(glm::vec3*)dL_dmean3D,
|
| 582 |
+
(glm::vec3*)dL_dmean2D,
|
| 583 |
+
dL_dcolor,
|
| 584 |
+
dL_dsh,
|
| 585 |
+
dL_dscale,
|
| 586 |
+
dL_drot,
|
| 587 |
+
(glm::vec3*)dL_dsigmaInv,
|
| 588 |
+
dL_dopacity);
|
| 589 |
+
}
|
| 590 |
+
|
| 591 |
+
void BACKWARD::render(
|
| 592 |
+
const dim3 grid, const dim3 block,
|
| 593 |
+
const uint2* ranges,
|
| 594 |
+
const uint32_t* point_list,
|
| 595 |
+
int W, int H,
|
| 596 |
+
const float* tan_theta,
|
| 597 |
+
const float* tan_phi,
|
| 598 |
+
const float* raymap,
|
| 599 |
+
const float focal_x, const float focal_y,
|
| 600 |
+
const int mode,
|
| 601 |
+
const float* bg_color,
|
| 602 |
+
const float3* means3D_view,
|
| 603 |
+
const float2* h_opacity,
|
| 604 |
+
const float3* w2o,
|
| 605 |
+
const float* colors,
|
| 606 |
+
const float* depths,
|
| 607 |
+
const float* final_Ts,
|
| 608 |
+
const uint32_t* n_contrib,
|
| 609 |
+
const float* dL_dpixels,
|
| 610 |
+
const float* dL_invdepths,
|
| 611 |
+
float3* dL_dmean2D,
|
| 612 |
+
glm::vec3* dL_dmean3D,
|
| 613 |
+
float* dL_dopacity,
|
| 614 |
+
float* dL_dcolors,
|
| 615 |
+
float* dL_dinvdepths,
|
| 616 |
+
glm::vec3* dL_dsigmaInv)
|
| 617 |
+
{
|
| 618 |
+
renderCUDA<NUM_CHANNELS> << <grid, block >> >(
|
| 619 |
+
ranges,
|
| 620 |
+
point_list,
|
| 621 |
+
W, H,
|
| 622 |
+
tan_theta, tan_phi,
|
| 623 |
+
raymap,
|
| 624 |
+
focal_x, focal_y,
|
| 625 |
+
mode,
|
| 626 |
+
bg_color,
|
| 627 |
+
means3D_view,
|
| 628 |
+
h_opacity,
|
| 629 |
+
w2o,
|
| 630 |
+
colors,
|
| 631 |
+
depths,
|
| 632 |
+
final_Ts,
|
| 633 |
+
n_contrib,
|
| 634 |
+
dL_dpixels,
|
| 635 |
+
dL_invdepths,
|
| 636 |
+
dL_dmean2D,
|
| 637 |
+
dL_dmean3D,
|
| 638 |
+
dL_dopacity,
|
| 639 |
+
dL_dcolors,
|
| 640 |
+
dL_dinvdepths,
|
| 641 |
+
dL_dsigmaInv);
|
| 642 |
+
}
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/backward.h
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#ifndef CUDA_RASTERIZER_BACKWARD_H_INCLUDED
|
| 13 |
+
#define CUDA_RASTERIZER_BACKWARD_H_INCLUDED
|
| 14 |
+
|
| 15 |
+
#include <cuda.h>
|
| 16 |
+
#include "cuda_runtime.h"
|
| 17 |
+
#include "device_launch_parameters.h"
|
| 18 |
+
#define GLM_FORCE_CUDA
|
| 19 |
+
#include <glm/glm.hpp>
|
| 20 |
+
|
| 21 |
+
namespace BACKWARD
|
| 22 |
+
{
|
| 23 |
+
void render(
|
| 24 |
+
const dim3 grid, dim3 block,
|
| 25 |
+
const uint2* ranges,
|
| 26 |
+
const uint32_t* point_list,
|
| 27 |
+
int W, int H,
|
| 28 |
+
const float* tan_theta,
|
| 29 |
+
const float* tan_phi,
|
| 30 |
+
const float* raymap,
|
| 31 |
+
const float focal_x, float focal_y,
|
| 32 |
+
int mode,
|
| 33 |
+
const float* bg_color,
|
| 34 |
+
const float3* means3D_view,
|
| 35 |
+
const float2* h_opacity,
|
| 36 |
+
const float3* w2o,
|
| 37 |
+
const float* colors,
|
| 38 |
+
const float* depths,
|
| 39 |
+
const float* final_Ts,
|
| 40 |
+
const uint32_t* n_contrib,
|
| 41 |
+
const float* dL_dpixels,
|
| 42 |
+
const float* dL_invdepths,
|
| 43 |
+
float3* dL_dmean2D,
|
| 44 |
+
glm::vec3* dL_dmeans,
|
| 45 |
+
float* dL_dopacity,
|
| 46 |
+
float* dL_dcolors,
|
| 47 |
+
float* dL_dinvdepths,
|
| 48 |
+
glm::vec3* dL_dsigmaInv);
|
| 49 |
+
|
| 50 |
+
void preprocess(
|
| 51 |
+
int P, int D, int M,
|
| 52 |
+
const float3* means,
|
| 53 |
+
const float3* means3D_view,
|
| 54 |
+
const float* depths,
|
| 55 |
+
const int* radii,
|
| 56 |
+
const float* shs,
|
| 57 |
+
const bool* clamped,
|
| 58 |
+
const float* opacities,
|
| 59 |
+
const glm::vec3* scales,
|
| 60 |
+
const glm::vec4* rotations,
|
| 61 |
+
const float scale_modifier,
|
| 62 |
+
const float2* h_opacity,
|
| 63 |
+
const float3* w2o,
|
| 64 |
+
const float* view,
|
| 65 |
+
const float focal_x, float focal_y,
|
| 66 |
+
const float tan_fovx, float tan_fovy,
|
| 67 |
+
const glm::vec3* campos,
|
| 68 |
+
float3* dL_dmean2D,
|
| 69 |
+
const float* dL_dinvdepth,
|
| 70 |
+
float* dL_dopacity,
|
| 71 |
+
glm::vec3* dL_dmeans,
|
| 72 |
+
float* dL_dcolor,
|
| 73 |
+
float* dL_dsh,
|
| 74 |
+
glm::vec3* dL_dscale,
|
| 75 |
+
glm::vec4* dL_drot,
|
| 76 |
+
const glm::vec3* dL_dsigmaInv,
|
| 77 |
+
bool antialiasing);
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
#endif
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/config.h
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#ifndef CUDA_RASTERIZER_CONFIG_H_INCLUDED
|
| 13 |
+
#define CUDA_RASTERIZER_CONFIG_H_INCLUDED
|
| 14 |
+
|
| 15 |
+
#define NUM_CHANNELS 3 // Default 3, RGB
|
| 16 |
+
#define BLOCK_X 16
|
| 17 |
+
#define BLOCK_Y 16
|
| 18 |
+
|
| 19 |
+
#endif
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/forward.cu
ADDED
|
@@ -0,0 +1,1249 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#include "forward.h"
|
| 13 |
+
#include "auxiliary.h"
|
| 14 |
+
#include <thrust/sort.h>
|
| 15 |
+
#include <thrust/binary_search.h>
|
| 16 |
+
#include <cooperative_groups.h>
|
| 17 |
+
#include <cooperative_groups/reduce.h>
|
| 18 |
+
namespace cg = cooperative_groups;
|
| 19 |
+
|
| 20 |
+
__device__ glm::mat3 computeRotationMatrix(const glm::vec4 rot, const float* viewmatrix)
|
| 21 |
+
{
|
| 22 |
+
// Normalize quaternion to get valid rotation
|
| 23 |
+
glm::vec4 q = rot;// / glm::length(rot);
|
| 24 |
+
float r = q.x;
|
| 25 |
+
float x = q.y;
|
| 26 |
+
float y = q.z;
|
| 27 |
+
float z = q.w;
|
| 28 |
+
|
| 29 |
+
// Compute rotation matrix from quaternion
|
| 30 |
+
glm::mat3 R = glm::mat3(
|
| 31 |
+
1.f - 2.f * (y * y + z * z), 2.f * (x * y + r * z), 2.f * (x * z - r * y),
|
| 32 |
+
2.f * (x * y - r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z + r * x),
|
| 33 |
+
2.f * (x * z + r * y), 2.f * (y * z - r * x), 1.f - 2.f * (x * x + y * y)
|
| 34 |
+
);
|
| 35 |
+
|
| 36 |
+
// viewmatrix float* has been the column-major, 0,1,2 is the column;
|
| 37 |
+
glm::mat3 W = glm::mat3(
|
| 38 |
+
viewmatrix[0], viewmatrix[1], viewmatrix[2],
|
| 39 |
+
viewmatrix[4], viewmatrix[5], viewmatrix[6],
|
| 40 |
+
viewmatrix[8], viewmatrix[9], viewmatrix[10]);
|
| 41 |
+
|
| 42 |
+
glm::mat3 R_view = W * R;
|
| 43 |
+
return R_view;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
__device__ bool computeCov3D(const glm::vec3 scale, const float mod, const glm::mat3 R_view, float* cov3D, const float h_var)
|
| 47 |
+
{
|
| 48 |
+
glm::mat3 R_scaled = glm::mat3(
|
| 49 |
+
R_view[0] * (sq(scale.x * mod) + h_var),
|
| 50 |
+
R_view[1] * (sq(scale.y * mod) + h_var),
|
| 51 |
+
R_view[2] * (sq(scale.z * mod) + h_var)
|
| 52 |
+
);
|
| 53 |
+
|
| 54 |
+
glm::mat3 Cov3D_mat = R_scaled * glm::transpose(R_view);
|
| 55 |
+
|
| 56 |
+
// Covariance is symmetric, only store upper right
|
| 57 |
+
cov3D[0] = Cov3D_mat[0][0];
|
| 58 |
+
cov3D[1] = Cov3D_mat[0][1];
|
| 59 |
+
cov3D[2] = Cov3D_mat[0][2];
|
| 60 |
+
cov3D[3] = Cov3D_mat[1][1];
|
| 61 |
+
cov3D[4] = Cov3D_mat[1][2];
|
| 62 |
+
cov3D[5] = Cov3D_mat[2][2];
|
| 63 |
+
|
| 64 |
+
const float det_cov_plus_h_cov = cov3D[0] * cov3D[3] * cov3D[5] + 2.f * cov3D[1] * cov3D[2] * cov3D[4] - cov3D[0] * cov3D[4] * cov3D[4] - cov3D[3] * cov3D[2] * cov3D[2] - cov3D[5] * cov3D[1] * cov3D[1];
|
| 65 |
+
|
| 66 |
+
if (det_cov_plus_h_cov == 0.0f)
|
| 67 |
+
return false;
|
| 68 |
+
|
| 69 |
+
return true;
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
__forceinline__ __device__ void searchsorted_pbf(
|
| 73 |
+
const float* ref_u, int u_span,
|
| 74 |
+
const float* ref_v, int v_span,
|
| 75 |
+
const float* uv_values,
|
| 76 |
+
int* u_indices, int* v_indices) {
|
| 77 |
+
thrust::lower_bound(thrust::device, ref_u, ref_u + u_span, uv_values, uv_values + 2, u_indices);
|
| 78 |
+
thrust::lower_bound(thrust::device, ref_v, ref_v + v_span, uv_values + 2, uv_values + 4, v_indices);
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
__forceinline__ __device__ void invinterpolated_pbf(
|
| 82 |
+
const int W, int H,
|
| 83 |
+
const float focal_x, float focal_y,
|
| 84 |
+
const float principal_x, float principal_y,
|
| 85 |
+
const float4 dist_coeff,
|
| 86 |
+
const float4 tan_xxyy,
|
| 87 |
+
int* u_indices, int* v_indices) {
|
| 88 |
+
if ((tan_xxyy.y < 0.0f && tan_xxyy.z > 0.0f) || (tan_xxyy.x > 0.0f && tan_xxyy.w < 0.0f)) {
|
| 89 |
+
float2 _left_bottom = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.x, tan_xxyy.z);
|
| 90 |
+
float2 _right_top = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.y, tan_xxyy.w);
|
| 91 |
+
u_indices[0] = (int)floor(_left_bottom.x);
|
| 92 |
+
u_indices[1] = (int)floor(_right_top.x);
|
| 93 |
+
v_indices[0] = (int)floor(_left_bottom.y);
|
| 94 |
+
v_indices[1] = (int)floor(_right_top.y);
|
| 95 |
+
} else if ((tan_xxyy.y < 0.0f && tan_xxyy.w < 0.0f) || (tan_xxyy.x > 0.0f && tan_xxyy.z > 0.0f)) {
|
| 96 |
+
float2 _left_top = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.x, tan_xxyy.w);
|
| 97 |
+
float2 _right_bottom = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.y, tan_xxyy.z);
|
| 98 |
+
u_indices[0] = (int)floor(_left_top.x);
|
| 99 |
+
u_indices[1] = (int)floor(_right_bottom.x);
|
| 100 |
+
v_indices[0] = (int)floor(_right_bottom.y);
|
| 101 |
+
v_indices[1] = (int)floor(_left_top.y);
|
| 102 |
+
} else if ((tan_xxyy.x < 0.0f && tan_xxyy.y > 0.0f) && tan_xxyy.z > 0.0f) {
|
| 103 |
+
float2 _left_bottom = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.x, tan_xxyy.z);
|
| 104 |
+
float2 _right_bottom = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.y, tan_xxyy.z);
|
| 105 |
+
float2 _mid_top = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, 0.0f, tan_xxyy.w);
|
| 106 |
+
u_indices[0] = (int)floor(_left_bottom.x);
|
| 107 |
+
u_indices[1] = (int)floor(_right_bottom.x);
|
| 108 |
+
v_indices[0] = (int)floor(fminf(_left_bottom.y, _right_bottom.y));
|
| 109 |
+
v_indices[1] = (int)floor(_mid_top.y);
|
| 110 |
+
} else if ((tan_xxyy.x < 0.0f && tan_xxyy.y > 0.0f) && tan_xxyy.w < 0.0f) {
|
| 111 |
+
float2 _right_top = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.y, tan_xxyy.w);
|
| 112 |
+
float2 _left_top = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.x, tan_xxyy.w);
|
| 113 |
+
float2 _mid_bottom = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, 0.0f, tan_xxyy.z);
|
| 114 |
+
u_indices[0] = (int)floor(_left_top.x);
|
| 115 |
+
u_indices[1] = (int)floor(_right_top.x);
|
| 116 |
+
v_indices[0] = (int)floor(_mid_bottom.y);
|
| 117 |
+
v_indices[1] = (int)floor(fmaxf(_left_top.y, _right_top.y));
|
| 118 |
+
} else if ((tan_xxyy.z < 0.0f && tan_xxyy.w > 0.0f) && tan_xxyy.y < 0.0f) {
|
| 119 |
+
float2 _right_top = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.y, tan_xxyy.w);
|
| 120 |
+
float2 _right_bottom = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.y, tan_xxyy.z);
|
| 121 |
+
float2 _left_mid = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.x, 0.0f);
|
| 122 |
+
u_indices[0] = (int)floor(_left_mid.x);
|
| 123 |
+
u_indices[1] = (int)floor(fmaxf(_right_bottom.x, _right_top.x));
|
| 124 |
+
v_indices[0] = (int)floor(_right_bottom.y);
|
| 125 |
+
v_indices[1] = (int)floor(_right_top.y);
|
| 126 |
+
} else if ((tan_xxyy.z < 0.0f && tan_xxyy.w > 0.0f) && tan_xxyy.x > 0.0f) {
|
| 127 |
+
float2 _left_bottom = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.x, tan_xxyy.z);
|
| 128 |
+
float2 _left_top = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.x, tan_xxyy.w);
|
| 129 |
+
float2 _right_mid = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.y, 0.0f);
|
| 130 |
+
u_indices[0] = (int)floor(fminf(_left_bottom.x, _left_top.x));
|
| 131 |
+
u_indices[1] = (int)floor(_right_mid.x);
|
| 132 |
+
v_indices[0] = (int)floor(_left_bottom.y);
|
| 133 |
+
v_indices[1] = (int)floor(_left_top.y);
|
| 134 |
+
} else {
|
| 135 |
+
float2 _mid_top = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, 0.0f, tan_xxyy.w);
|
| 136 |
+
float2 _mid_bottom = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, 0.0f, tan_xxyy.z);
|
| 137 |
+
float2 _left_mid = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.x, 0.0f);
|
| 138 |
+
float2 _right_mid = invinterpolated_uv(focal_x, focal_y, principal_x, principal_y, dist_coeff, tan_xxyy.y, 0.0f);
|
| 139 |
+
u_indices[0] = (int)floor(_left_mid.x);
|
| 140 |
+
u_indices[1] = (int)floor(_right_mid.x);
|
| 141 |
+
v_indices[0] = (int)floor(_mid_bottom.y);
|
| 142 |
+
v_indices[1] = (int)floor(_mid_top.y);
|
| 143 |
+
}
|
| 144 |
+
u_indices[0] = fminf(fmaxf((int)0, u_indices[0]), (int)(W-1));
|
| 145 |
+
u_indices[1] = fminf(fmaxf((int)0, u_indices[1]), (int)(W-1));
|
| 146 |
+
v_indices[0] = fminf(fmaxf((int)0, v_indices[0]), (int)(H-1));
|
| 147 |
+
v_indices[1] = fminf(fmaxf((int)0, v_indices[1]), (int)(H-1));
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
// Compute antialiasing variance (h_var) and pack into h_opacity:
|
| 151 |
+
// h_opacity->x = h_var (small isotropic variance added to each axis for anti-aliasing)
|
| 152 |
+
// h_opacity->y = antialiasing-scaled Gaussian opacity
|
| 153 |
+
// Returns false if the resulting opacity falls below the visibility threshold.
|
| 154 |
+
__device__ bool omni_hvar(const glm::vec3 scale, const float mod, const float opacity, float2* h_opacity, bool antialiasing)
|
| 155 |
+
{
|
| 156 |
+
float h_var = 1e-7f;
|
| 157 |
+
|
| 158 |
+
float h_cov_scaling = 1.0f;
|
| 159 |
+
if (antialiasing) {
|
| 160 |
+
h_cov_scaling = (scale.x * mod) * (scale.y * mod) * (scale.z * mod) / sqrtf((sq(scale.x * mod) + h_var) * (sq(scale.y * mod) + h_var) * (sq(scale.z * mod) + h_var));
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
h_opacity->x = h_var;
|
| 164 |
+
h_opacity->y = h_cov_scaling * opacity;
|
| 165 |
+
|
| 166 |
+
if (h_opacity->y < 1.0f / 255.0f)
|
| 167 |
+
return false;
|
| 168 |
+
|
| 169 |
+
return true;
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
__device__ void mirror_transform_pbf(const float4& m, const float xi, float* result) {
|
| 173 |
+
float _m0 = xi * sqrtf(1 + m.x * m.x);
|
| 174 |
+
float _m1 = xi * sqrtf(1 + m.y * m.y);
|
| 175 |
+
float _m2 = xi * sqrtf(1 + m.z * m.z);
|
| 176 |
+
float _m3 = xi * sqrtf(1 + m.w * m.w);
|
| 177 |
+
result[0] = m.x / (1 + _m0);
|
| 178 |
+
result[1] = m.x / (1 - _m0);
|
| 179 |
+
result[2] = m.y / (1 + _m1);
|
| 180 |
+
result[3] = m.y / (1 - _m1);
|
| 181 |
+
result[4] = m.z / (1 + _m2);
|
| 182 |
+
result[5] = m.z / (1 - _m2);
|
| 183 |
+
result[6] = m.w / (1 + _m3);
|
| 184 |
+
result[7] = m.w / (1 - _m3);
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
__device__ void mirror_transform_fov(const float tan_fovx, const float tan_fovy, const float xi, float* result) {
|
| 188 |
+
float _tan_fovx = xi * sqrtf(1 + tan_fovx * tan_fovx);
|
| 189 |
+
float _tan_fovy = xi * sqrtf(1 + tan_fovy * tan_fovy);
|
| 190 |
+
result[0] = tan_fovx / (1 + _tan_fovx);
|
| 191 |
+
result[1] = -result[0];
|
| 192 |
+
result[2] = tan_fovy / (1 + _tan_fovy);
|
| 193 |
+
result[3] = -result[2];
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
__forceinline__ __device__ float mirror_transform_tan(const float m, const float z, const float xi) {
|
| 197 |
+
if (xi == 0.0f) {
|
| 198 |
+
return m;
|
| 199 |
+
}
|
| 200 |
+
return m / (1 + xi * (z / fabsf(z)) * sqrtf(1 + m * m));
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
// Compute the Particle Bounding Frustum (PBF) for a 3D Gaussian in ray-direction
|
| 204 |
+
// tangent space. The PBF is a tight axis-aligned bounding box (AABB) on the set
|
| 205 |
+
// of rays that intersect the Gaussian's λ-sigma ellipsoid. It is defined as
|
| 206 |
+
// pbf = {tan_theta_min, tan_theta_max, tan_phi_min, tan_phi_max}
|
| 207 |
+
// and maps directly to pixel ranges via the BEAP reference arrays or the KB grid.
|
| 208 |
+
// See 3DGEER paper (https://openreview.net/pdf?id=4voMNlRWI7), Sec. D / Eq. 10.
|
| 209 |
+
// Returns false if the Gaussian is degenerate or entirely outside the frustum.
|
| 210 |
+
__device__ bool computePBF(
|
| 211 |
+
const glm::vec3 scale, const float mod, const glm::mat3 R_view, const float3 p_view, const float lambda, float4& pbf, const float tan_fovx, const float tan_fovy, float h_var)
|
| 212 |
+
{
|
| 213 |
+
float lambda_sq = sq(lambda);
|
| 214 |
+
float cov3d[6];
|
| 215 |
+
if (!computeCov3D(scale, mod, R_view, cov3d, h_var))
|
| 216 |
+
return false;
|
| 217 |
+
|
| 218 |
+
float Tc_22 = lambda_sq * cov3d[5] - p_view.z * p_view.z;
|
| 219 |
+
if (Tc_22 == 0.0f)
|
| 220 |
+
return false;
|
| 221 |
+
|
| 222 |
+
float Tc_00 = lambda_sq * cov3d[0] - p_view.x * p_view.x;
|
| 223 |
+
float Tc_02 = lambda_sq * cov3d[2] - p_view.x * p_view.z;
|
| 224 |
+
float Tc_11 = lambda_sq * cov3d[3] - p_view.y * p_view.y;
|
| 225 |
+
float Tc_12 = lambda_sq * cov3d[4] - p_view.y * p_view.z;
|
| 226 |
+
|
| 227 |
+
float center[2];
|
| 228 |
+
center[0] = Tc_02 / Tc_22;
|
| 229 |
+
center[1]= Tc_12 / Tc_22;
|
| 230 |
+
|
| 231 |
+
float half_extend[2];
|
| 232 |
+
half_extend[0] = sqrtf(Tc_02 * Tc_02 - Tc_22 * Tc_00) / fabsf(Tc_22);
|
| 233 |
+
half_extend[1] = sqrtf(Tc_12 * Tc_12 - Tc_22 * Tc_11) / fabsf(Tc_22);
|
| 234 |
+
|
| 235 |
+
bool neg = false;
|
| 236 |
+
if (isnan(half_extend[0]))
|
| 237 |
+
{
|
| 238 |
+
half_extend[0] = fmaxf(fabsf(center[0] - tan_fovx), fabsf(center[0] + tan_fovx));
|
| 239 |
+
neg = true;
|
| 240 |
+
}
|
| 241 |
+
if (isnan(half_extend[1]))
|
| 242 |
+
{
|
| 243 |
+
half_extend[1] = fmaxf(fabsf(center[1] - tan_fovy), fabsf(center[1] + tan_fovy));
|
| 244 |
+
neg = true;
|
| 245 |
+
}
|
| 246 |
+
float _left = center[0] - half_extend[0];
|
| 247 |
+
float _right = center[0] + half_extend[0];
|
| 248 |
+
float _bottom = center[1] - half_extend[1];
|
| 249 |
+
float _upper = center[1] + half_extend[1];
|
| 250 |
+
|
| 251 |
+
pbf.x = _left;
|
| 252 |
+
pbf.y = _right;
|
| 253 |
+
pbf.z = _bottom;
|
| 254 |
+
pbf.w = _upper;
|
| 255 |
+
|
| 256 |
+
// If half-extend is negative, return and do not compute the omni
|
| 257 |
+
if (neg) return false;
|
| 258 |
+
|
| 259 |
+
// Omni mapping for AABB
|
| 260 |
+
float xi = 1.0;
|
| 261 |
+
float mirror_transformed_pbf[8];
|
| 262 |
+
mirror_transform_pbf(pbf, xi, mirror_transformed_pbf);
|
| 263 |
+
|
| 264 |
+
const float eps = 1e-6f;
|
| 265 |
+
float depth = p_view.z;
|
| 266 |
+
depth = (fabsf(depth) < eps) ? eps : depth; // Prevent division by zero
|
| 267 |
+
float gaus_center_omni[2] = {
|
| 268 |
+
mirror_transform_tan(p_view.x / depth, depth, xi),
|
| 269 |
+
mirror_transform_tan(p_view.y / depth, depth, xi)
|
| 270 |
+
};
|
| 271 |
+
|
| 272 |
+
float fov_omni[4];
|
| 273 |
+
mirror_transform_fov(tan_fovx, tan_fovy, xi, fov_omni);
|
| 274 |
+
|
| 275 |
+
float aa_omni[4] = { mirror_transformed_pbf[0], mirror_transformed_pbf[1], mirror_transformed_pbf[2], mirror_transformed_pbf[3] };
|
| 276 |
+
float bb_omni[4] = { mirror_transformed_pbf[4], mirror_transformed_pbf[5], mirror_transformed_pbf[6], mirror_transformed_pbf[7] };
|
| 277 |
+
float a_min = -INFINITY;
|
| 278 |
+
float a_max = INFINITY;
|
| 279 |
+
float b_min = -INFINITY;
|
| 280 |
+
float b_max = INFINITY;
|
| 281 |
+
|
| 282 |
+
int a_min_idx = -1;
|
| 283 |
+
int a_max_idx = -1;
|
| 284 |
+
int b_min_idx = -1;
|
| 285 |
+
int b_max_idx = -1;
|
| 286 |
+
|
| 287 |
+
for (int i = 0; i < 4; i++) {
|
| 288 |
+
if (aa_omni[i] < gaus_center_omni[0] && aa_omni[i] >= a_min){
|
| 289 |
+
a_min = aa_omni[i];
|
| 290 |
+
a_min_idx = i;
|
| 291 |
+
}
|
| 292 |
+
if (aa_omni[i] > gaus_center_omni[0] && aa_omni[i] <= a_max){
|
| 293 |
+
a_max = aa_omni[i];
|
| 294 |
+
a_max_idx = i;
|
| 295 |
+
}
|
| 296 |
+
if (bb_omni[i] < gaus_center_omni[1] && bb_omni[i] >= b_min){
|
| 297 |
+
b_min = bb_omni[i];
|
| 298 |
+
b_min_idx = i;
|
| 299 |
+
}
|
| 300 |
+
if (bb_omni[i] > gaus_center_omni[1] && bb_omni[i] <= b_max){
|
| 301 |
+
b_max = bb_omni[i];
|
| 302 |
+
b_max_idx = i;
|
| 303 |
+
}
|
| 304 |
+
}
|
| 305 |
+
if (a_min < fov_omni[1]) a_min_idx = 4;
|
| 306 |
+
if (a_min > fov_omni[0]) a_min_idx = 5;
|
| 307 |
+
|
| 308 |
+
if (a_max < fov_omni[1]) a_max_idx = 4;
|
| 309 |
+
if (a_max > fov_omni[0]) a_max_idx = 5;
|
| 310 |
+
|
| 311 |
+
if (b_min < fov_omni[3]) b_min_idx = 4;
|
| 312 |
+
if (b_min > fov_omni[2]) b_min_idx = 5;
|
| 313 |
+
|
| 314 |
+
if (b_max < fov_omni[3]) b_max_idx = 4;
|
| 315 |
+
if (b_max > fov_omni[2]) b_max_idx = 5;
|
| 316 |
+
|
| 317 |
+
if (a_min_idx == 4) pbf.x = -tan_fovx;
|
| 318 |
+
else if (a_min_idx == 5) pbf.x = tan_fovx;
|
| 319 |
+
else if (a_min_idx == 0) pbf.x = _left;
|
| 320 |
+
else if (a_min_idx == 1) pbf.x = _left;
|
| 321 |
+
else if (a_min_idx == 2) pbf.x = _right;
|
| 322 |
+
else if (a_min_idx == 3) pbf.x = _right;
|
| 323 |
+
|
| 324 |
+
if (a_max_idx == 5) pbf.y = tan_fovx;
|
| 325 |
+
else if (a_max_idx == 4) pbf.y = -tan_fovx;
|
| 326 |
+
else if (a_max_idx == 0) pbf.y = _left;
|
| 327 |
+
else if (a_max_idx == 1) pbf.y = _left;
|
| 328 |
+
else if (a_max_idx == 2) pbf.y = _right;
|
| 329 |
+
else if (a_max_idx == 3) pbf.y = _right;
|
| 330 |
+
|
| 331 |
+
if (b_min_idx == 4) pbf.z = -tan_fovy;
|
| 332 |
+
else if (b_min_idx == 5) pbf.z = tan_fovy;
|
| 333 |
+
else if (b_min_idx == 0) pbf.z = _bottom;
|
| 334 |
+
else if (b_min_idx == 1) pbf.z = _bottom;
|
| 335 |
+
else if (b_min_idx == 2) pbf.z = _upper;
|
| 336 |
+
else if (b_min_idx == 3) pbf.z = _upper;
|
| 337 |
+
|
| 338 |
+
if (b_max_idx == 5) pbf.w = tan_fovy;
|
| 339 |
+
else if (b_max_idx == 4) pbf.w = -tan_fovy;
|
| 340 |
+
else if (b_max_idx == 0) pbf.w = _bottom;
|
| 341 |
+
else if (b_max_idx == 1) pbf.w = _bottom;
|
| 342 |
+
else if (b_max_idx == 2) pbf.w = _upper;
|
| 343 |
+
else if (b_max_idx == 3) pbf.w = _upper;
|
| 344 |
+
|
| 345 |
+
return true;
|
| 346 |
+
}
|
| 347 |
+
|
| 348 |
+
// For runtime ablation: PBF vs. UT vs. EWA
|
| 349 |
+
|
| 350 |
+
__device__ void sample_ut(const glm::vec3 scale, const float mod, const glm::mat3 R_view, const float3 p_view, float2& p_ut, float3& cov_ut){
|
| 351 |
+
float ut_sqrt = sqrtf(ut_lambda + 3.f);
|
| 352 |
+
float2 x_[7];
|
| 353 |
+
glm::vec3 p_view_vec(p_view.x, p_view.y, p_view.z);
|
| 354 |
+
x_[0] = atan(divide_z(p_view_vec));
|
| 355 |
+
x_[1] = atan(divide_z(p_view_vec + (ut_sqrt * R_view[0] * scale.x * mod)));
|
| 356 |
+
x_[2] = atan(divide_z(p_view_vec + (ut_sqrt * R_view[1] * scale.y * mod)));
|
| 357 |
+
x_[3] = atan(divide_z(p_view_vec + (ut_sqrt * R_view[2] * scale.z * mod)));
|
| 358 |
+
x_[4] = atan(divide_z(p_view_vec - (ut_sqrt * R_view[0] * scale.x * mod)));
|
| 359 |
+
x_[5] = atan(divide_z(p_view_vec - (ut_sqrt * R_view[1] * scale.y * mod)));
|
| 360 |
+
x_[6] = atan(divide_z(p_view_vec - (ut_sqrt * R_view[2] * scale.z * mod)));
|
| 361 |
+
|
| 362 |
+
float l1 = ut_lambda / (ut_lambda + 3.0f);
|
| 363 |
+
float l2 = 0.5f / (ut_lambda + 3.0f);
|
| 364 |
+
|
| 365 |
+
p_ut.x = (l1) * x_[0].x + (l2) * (x_[1].x + x_[2].x + x_[3].x + x_[4].x + x_[5].x + x_[6].x);
|
| 366 |
+
p_ut.y = (l1) * x_[0].y + (l2) * (x_[1].y + x_[2].y + x_[3].y + x_[4].y + x_[5].y + x_[6].y);
|
| 367 |
+
|
| 368 |
+
cov_ut.x = (l1 + 1.f - sq(ut_alpha) + ut_beta) * sq(x_[0].x - p_ut.x) + (l2) * (sq(x_[1].x - p_ut.x) + sq(x_[2].x - p_ut.x) + sq(x_[3].x - p_ut.x) + sq(x_[4].x - p_ut.x) + sq(x_[5].x - p_ut.x) + sq(x_[6].x - p_ut.x));
|
| 369 |
+
|
| 370 |
+
cov_ut.y = (l1 + 1.f - sq(ut_alpha) + ut_beta) * (x_[0].x - p_ut.x) * (x_[0].y - p_ut.y) + (l2) * ((x_[1].x - p_ut.x) * (x_[1].y - p_ut.y) + (x_[2].x - p_ut.x) * (x_[2].y - p_ut.y) + (x_[3].x - p_ut.x) * (x_[3].y - p_ut.y) + (x_[4].x - p_ut.x) * (x_[4].y - p_ut.y) + (x_[5].x - p_ut.x) * (x_[5].y - p_ut.y) + (x_[6].x - p_ut.x) * (x_[6].y - p_ut.y));
|
| 371 |
+
|
| 372 |
+
cov_ut.z = (l1 + 1.f - sq(ut_alpha) + ut_beta) * sq(x_[0].y - p_ut.y) + (l2) * (sq(x_[1].y - p_ut.y) + sq(x_[2].y - p_ut.y) + sq(x_[3].y - p_ut.y) + sq(x_[4].y - p_ut.y) + sq(x_[5].y - p_ut.y) + sq(x_[6].y - p_ut.y));
|
| 373 |
+
}
|
| 374 |
+
|
| 375 |
+
|
| 376 |
+
__device__ float2 computeEllipseIntersection(
|
| 377 |
+
const float3 con_o, const float disc, const float t, const float2 p,
|
| 378 |
+
const bool isY, const float coord)
|
| 379 |
+
{
|
| 380 |
+
float p_u = isY ? p.y : p.x;
|
| 381 |
+
float p_v = isY ? p.x : p.y;
|
| 382 |
+
float coeff = isY ? con_o.x : con_o.z;
|
| 383 |
+
|
| 384 |
+
float h = coord - p_u; // h = y - p.y for y, x - p.x for x
|
| 385 |
+
float sqrt_term = sqrt(disc * h * h + t * coeff);
|
| 386 |
+
|
| 387 |
+
return {
|
| 388 |
+
(-con_o.y * h - sqrt_term) / coeff + p_v,
|
| 389 |
+
(-con_o.y * h + sqrt_term) / coeff + p_v
|
| 390 |
+
};
|
| 391 |
+
}
|
| 392 |
+
|
| 393 |
+
__device__ bool computeAABB_UT(
|
| 394 |
+
const glm::vec3 scale, const float mod, const glm::mat3 R_view, const float3 p_view, const float lambda, float4& aabb, const float tan_fovx, const float tan_fovy, float h_var, bool tighten)
|
| 395 |
+
{
|
| 396 |
+
float3 cov;
|
| 397 |
+
float2 p;
|
| 398 |
+
sample_ut(scale, mod, R_view, p_view, p, cov); // https://arxiv.org/abs/2412.12507
|
| 399 |
+
const float det = cov.x * cov.z - cov.y * cov.y;
|
| 400 |
+
if (det == 0.0f)
|
| 401 |
+
return false;
|
| 402 |
+
float det_inv = 1.f / det;
|
| 403 |
+
|
| 404 |
+
float center_angle[2];
|
| 405 |
+
center_angle[0] = p.x;
|
| 406 |
+
center_angle[1]= p.y;
|
| 407 |
+
|
| 408 |
+
float half_extend_angle[2];
|
| 409 |
+
if (tighten)
|
| 410 |
+
{
|
| 411 |
+
// tighten the AABB https://arxiv.org/pdf/2412.00578
|
| 412 |
+
float3 conic = { cov.z * det_inv, -cov.y * det_inv, cov.x * det_inv };
|
| 413 |
+
float denom = sq(conic.y) - conic.x * conic.z;
|
| 414 |
+
if (conic.x <= 0 || conic.z <= 0 || denom >= 0) {
|
| 415 |
+
return false;
|
| 416 |
+
}
|
| 417 |
+
|
| 418 |
+
float x_term = lambda * sqrt(-sq(conic.y) / (denom * conic.x));
|
| 419 |
+
x_term = (conic.y < 0) ? x_term : -x_term;
|
| 420 |
+
float y_term = lambda * sqrt(-sq(conic.y) / (denom * conic.z));
|
| 421 |
+
y_term = (conic.y < 0) ? y_term : -y_term;
|
| 422 |
+
float2 bbox_argmin = { p.y - y_term, p.x - x_term };
|
| 423 |
+
float2 bbox_argmax = { p.y + y_term, p.x + x_term };
|
| 424 |
+
float2 bbox_min = {
|
| 425 |
+
computeEllipseIntersection(conic, denom, sq(lambda), p, true, bbox_argmin.x).x,
|
| 426 |
+
computeEllipseIntersection(conic, denom, sq(lambda), p, false, bbox_argmin.y).x
|
| 427 |
+
};
|
| 428 |
+
float2 bbox_max = {
|
| 429 |
+
computeEllipseIntersection(conic, denom, sq(lambda), p, true, bbox_argmax.x).y,
|
| 430 |
+
computeEllipseIntersection(conic, denom, sq(lambda), p, false, bbox_argmax.y).y
|
| 431 |
+
};
|
| 432 |
+
half_extend_angle[0] = (bbox_max.x - bbox_min.x) / 2.f;
|
| 433 |
+
half_extend_angle[1] = (bbox_max.y - bbox_min.y) / 2.f;
|
| 434 |
+
}
|
| 435 |
+
else
|
| 436 |
+
{
|
| 437 |
+
// loosen the AABB
|
| 438 |
+
float mid = 0.5f * (cov.x + cov.z);
|
| 439 |
+
float lambda1 = mid + sqrt(max(0.0f, mid * mid - det));
|
| 440 |
+
float lambda2 = mid - sqrt(max(0.0f, mid * mid - det));
|
| 441 |
+
// float my_radius = ceil(3.f * sqrt(max(lambda1, lambda2)));
|
| 442 |
+
float my_radius = (lambda * sqrt(max(lambda1, lambda2)));
|
| 443 |
+
half_extend_angle[0] = my_radius; // my_radius / focal_x;
|
| 444 |
+
half_extend_angle[1] = my_radius; // my_radius / focal_y;
|
| 445 |
+
}
|
| 446 |
+
|
| 447 |
+
float center[2];
|
| 448 |
+
float half_extend[2];
|
| 449 |
+
center[0] = (tan(center_angle[0] + half_extend_angle[0]) + tan(center_angle[0] - half_extend_angle[0])) / 2.f;
|
| 450 |
+
center[1] = (tan(center_angle[1] + half_extend_angle[1]) + tan(center_angle[1] - half_extend_angle[1])) / 2.f;
|
| 451 |
+
half_extend[0] = (tan(center_angle[0] + half_extend_angle[0]) - tan(center_angle[0] - half_extend_angle[0])) / 2.f;
|
| 452 |
+
half_extend[1] = (tan(center_angle[1] + half_extend_angle[1]) - tan(center_angle[1] - half_extend_angle[1])) / 2.f;
|
| 453 |
+
|
| 454 |
+
float neg = false;
|
| 455 |
+
|
| 456 |
+
if (isnan(half_extend[0]))
|
| 457 |
+
{
|
| 458 |
+
half_extend[0] = fmaxf(fabsf(center[0] - tan_fovx), fabsf(center[0] + tan_fovx));
|
| 459 |
+
neg = true;
|
| 460 |
+
}
|
| 461 |
+
if (isnan(half_extend[1]))
|
| 462 |
+
{
|
| 463 |
+
half_extend[1] = fmaxf(fabsf(center[1] - tan_fovy), fabsf(center[1] + tan_fovy));
|
| 464 |
+
neg = true;
|
| 465 |
+
}
|
| 466 |
+
float _left = center[0] - half_extend[0];
|
| 467 |
+
float _right = center[0] + half_extend[0];
|
| 468 |
+
float _bottom = center[1] - half_extend[1];
|
| 469 |
+
float _upper = center[1] + half_extend[1];
|
| 470 |
+
|
| 471 |
+
aabb.x = _left;
|
| 472 |
+
aabb.y = _right;
|
| 473 |
+
aabb.z = _bottom;
|
| 474 |
+
aabb.w = _upper;
|
| 475 |
+
|
| 476 |
+
// If half-extend is negative, return and do not compute the omni
|
| 477 |
+
if (neg) return false;
|
| 478 |
+
|
| 479 |
+
// Omni mapping for AABB
|
| 480 |
+
float xi = 1.0;
|
| 481 |
+
float aabb_omni[8];
|
| 482 |
+
mirror_transform_pbf(aabb, xi, aabb_omni);
|
| 483 |
+
|
| 484 |
+
const float eps = 1e-6f;
|
| 485 |
+
float depth = p_view.z;
|
| 486 |
+
depth = (fabsf(depth) < eps) ? eps : depth; // Prevent division by zero
|
| 487 |
+
float gaus_center_omni[2] = {
|
| 488 |
+
mirror_transform_tan(p_view.x / depth, depth, xi),
|
| 489 |
+
mirror_transform_tan(p_view.y / depth, depth, xi)
|
| 490 |
+
};
|
| 491 |
+
|
| 492 |
+
float fov_omni[4];
|
| 493 |
+
mirror_transform_fov(tan_fovx, tan_fovy, xi, fov_omni);
|
| 494 |
+
|
| 495 |
+
float aa_omni[4] = { aabb_omni[0], aabb_omni[1], aabb_omni[2], aabb_omni[3] };
|
| 496 |
+
float bb_omni[4] = { aabb_omni[4], aabb_omni[5], aabb_omni[6], aabb_omni[7] };
|
| 497 |
+
float a_min = -INFINITY;
|
| 498 |
+
float a_max = INFINITY;
|
| 499 |
+
float b_min = -INFINITY;
|
| 500 |
+
float b_max = INFINITY;
|
| 501 |
+
|
| 502 |
+
int a_min_idx = -1;
|
| 503 |
+
int a_max_idx = -1;
|
| 504 |
+
int b_min_idx = -1;
|
| 505 |
+
int b_max_idx = -1;
|
| 506 |
+
|
| 507 |
+
for (int i = 0; i < 4; i++) {
|
| 508 |
+
if (aa_omni[i] < gaus_center_omni[0] && aa_omni[i] >= a_min){
|
| 509 |
+
a_min = aa_omni[i];
|
| 510 |
+
a_min_idx = i;
|
| 511 |
+
}
|
| 512 |
+
if (aa_omni[i] > gaus_center_omni[0] && aa_omni[i] <= a_max){
|
| 513 |
+
a_max = aa_omni[i];
|
| 514 |
+
a_max_idx = i;
|
| 515 |
+
}
|
| 516 |
+
if (bb_omni[i] < gaus_center_omni[1] && bb_omni[i] >= b_min){
|
| 517 |
+
b_min = bb_omni[i];
|
| 518 |
+
b_min_idx = i;
|
| 519 |
+
}
|
| 520 |
+
if (bb_omni[i] > gaus_center_omni[1] && bb_omni[i] <= b_max){
|
| 521 |
+
b_max = bb_omni[i];
|
| 522 |
+
b_max_idx = i;
|
| 523 |
+
}
|
| 524 |
+
}
|
| 525 |
+
if (a_min < fov_omni[1]) a_min_idx = 4;
|
| 526 |
+
if (a_min > fov_omni[0]) a_min_idx = 5;
|
| 527 |
+
|
| 528 |
+
if (a_max < fov_omni[1]) a_max_idx = 4;
|
| 529 |
+
if (a_max > fov_omni[0]) a_max_idx = 5;
|
| 530 |
+
|
| 531 |
+
if (b_min < fov_omni[3]) b_min_idx = 4;
|
| 532 |
+
if (b_min > fov_omni[2]) b_min_idx = 5;
|
| 533 |
+
|
| 534 |
+
if (b_max < fov_omni[3]) b_max_idx = 4;
|
| 535 |
+
if (b_max > fov_omni[2]) b_max_idx = 5;
|
| 536 |
+
|
| 537 |
+
if (a_min_idx == 4) aabb.x = -tan_fovx;
|
| 538 |
+
else if (a_min_idx == 5) aabb.x = tan_fovx;
|
| 539 |
+
else if (a_min_idx == 0) aabb.x = _left;
|
| 540 |
+
else if (a_min_idx == 1) aabb.x = _left;
|
| 541 |
+
else if (a_min_idx == 2) aabb.x = _right;
|
| 542 |
+
else if (a_min_idx == 3) aabb.x = _right;
|
| 543 |
+
|
| 544 |
+
if (a_max_idx == 5) aabb.y = tan_fovx;
|
| 545 |
+
else if (a_max_idx == 4) aabb.y = -tan_fovx;
|
| 546 |
+
else if (a_max_idx == 0) aabb.y = _left;
|
| 547 |
+
else if (a_max_idx == 1) aabb.y = _left;
|
| 548 |
+
else if (a_max_idx == 2) aabb.y = _right;
|
| 549 |
+
else if (a_max_idx == 3) aabb.y = _right;
|
| 550 |
+
|
| 551 |
+
if (b_min_idx == 4) aabb.z = -tan_fovy;
|
| 552 |
+
else if (b_min_idx == 5) aabb.z = tan_fovy;
|
| 553 |
+
else if (b_min_idx == 0) aabb.z = _bottom;
|
| 554 |
+
else if (b_min_idx == 1) aabb.z = _bottom;
|
| 555 |
+
else if (b_min_idx == 2) aabb.z = _upper;
|
| 556 |
+
else if (b_min_idx == 3) aabb.z = _upper;
|
| 557 |
+
|
| 558 |
+
if (b_max_idx == 5) aabb.w = tan_fovy;
|
| 559 |
+
else if (b_max_idx == 4) aabb.w = -tan_fovy;
|
| 560 |
+
else if (b_max_idx == 0) aabb.w = _bottom;
|
| 561 |
+
else if (b_max_idx == 1) aabb.w = _bottom;
|
| 562 |
+
else if (b_max_idx == 2) aabb.w = _upper;
|
| 563 |
+
else if (b_max_idx == 3) aabb.w = _upper;
|
| 564 |
+
|
| 565 |
+
return true;
|
| 566 |
+
}
|
| 567 |
+
|
| 568 |
+
__device__ bool computeAABB_EWA(
|
| 569 |
+
const glm::vec3 scale, const float mod, const glm::mat3 R_view, const float3 p_view, const float lambda, float4& aabb, const float tan_fovx, const float tan_fovy, float h_var, bool tighten)
|
| 570 |
+
{
|
| 571 |
+
float lambda_sq = sq(lambda);
|
| 572 |
+
float cov3d[6];
|
| 573 |
+
if (!computeCov3D(scale, mod, R_view, cov3d, h_var))
|
| 574 |
+
return false;
|
| 575 |
+
|
| 576 |
+
float3 t = p_view;
|
| 577 |
+
const float txtz = t.x / t.z;
|
| 578 |
+
const float tytz = t.y / t.z;
|
| 579 |
+
// glm::mat3 J = glm::mat3(
|
| 580 |
+
// focal_x / t.z, 0.0f, -focal_x * t.x / (t.z * t.z),
|
| 581 |
+
// 0.0f, focal_y / t.z, -focal_y * t.y / (t.z * t.z),
|
| 582 |
+
// 0, 0, 0);
|
| 583 |
+
glm::mat3 J = glm::mat3(
|
| 584 |
+
1.f / t.z, 0.0f, -t.x / (t.z * t.z),
|
| 585 |
+
0.0f, 1.f / t.z, -t.y / (t.z * t.z),
|
| 586 |
+
0, 0, 0);
|
| 587 |
+
glm::mat3 Vrk = glm::mat3(
|
| 588 |
+
cov3d[0], cov3d[1], cov3d[2],
|
| 589 |
+
cov3d[1], cov3d[3], cov3d[4],
|
| 590 |
+
cov3d[2], cov3d[4], cov3d[5]);
|
| 591 |
+
|
| 592 |
+
glm::mat3 cov2d = glm::transpose(J) * glm::transpose(Vrk) * J;
|
| 593 |
+
float3 cov = { float(cov2d[0][0]), float(cov2d[0][1]), float(cov2d[1][1]) };
|
| 594 |
+
const float det = cov.x * cov.z - cov.y * cov.y;
|
| 595 |
+
if (det == 0.0f)
|
| 596 |
+
return false;
|
| 597 |
+
float det_inv = 1.f / det;
|
| 598 |
+
|
| 599 |
+
// float3 cov_ut;
|
| 600 |
+
// float2 p_ut;
|
| 601 |
+
// sample_ut(scale, mod, R_view, p_view, p_ut, cov_ut);
|
| 602 |
+
// printf("cov2d: %f %f %f\n cov_ut: %f %f %f\n p2d: %f %f\n p_ut: %f %f\n", cov.x, cov.y, cov.z, cov_ut.x, cov_ut.y, cov_ut.z, txtz, tytz, p_ut.x, p_ut.y);
|
| 603 |
+
|
| 604 |
+
// float mid = 0.5f * (cov.x + cov.z);
|
| 605 |
+
// float lambda1 = mid + sqrt(max(0.0f, mid * mid - det));
|
| 606 |
+
// float lambda2 = mid - sqrt(max(0.0f, mid * mid - det));
|
| 607 |
+
// // float my_radius = ceil(3.f * sqrt(max(lambda1, lambda2)));
|
| 608 |
+
// float my_radius = (lambda * sqrt(max(lambda1, lambda2)));
|
| 609 |
+
|
| 610 |
+
float center[2];
|
| 611 |
+
center[0] = txtz;
|
| 612 |
+
center[1] = tytz;
|
| 613 |
+
|
| 614 |
+
float half_extend[2];
|
| 615 |
+
if (tighten)
|
| 616 |
+
{
|
| 617 |
+
// tighten the AABB https://arxiv.org/pdf/2412.00578
|
| 618 |
+
float3 conic = { cov.z * det_inv, -cov.y * det_inv, cov.x * det_inv };
|
| 619 |
+
float denom = sq(conic.y) - conic.x * conic.z;
|
| 620 |
+
float2 p = { center[0], center[1] };
|
| 621 |
+
if (conic.x <= 0 || conic.z <= 0 || denom >= 0) {
|
| 622 |
+
return false;
|
| 623 |
+
}
|
| 624 |
+
|
| 625 |
+
float x_term = lambda * sqrt(-sq(conic.y) / (denom * conic.x));
|
| 626 |
+
x_term = (conic.y < 0) ? x_term : -x_term;
|
| 627 |
+
float y_term = lambda * sqrt(-sq(conic.y) / (denom * conic.z));
|
| 628 |
+
y_term = (conic.y < 0) ? y_term : -y_term;
|
| 629 |
+
float2 bbox_argmin = { p.y - y_term, p.x - x_term };
|
| 630 |
+
float2 bbox_argmax = { p.y + y_term, p.x + x_term };
|
| 631 |
+
float2 bbox_min = {
|
| 632 |
+
computeEllipseIntersection(conic, denom, sq(lambda), p, true, bbox_argmin.x).x,
|
| 633 |
+
computeEllipseIntersection(conic, denom, sq(lambda), p, false, bbox_argmin.y).x
|
| 634 |
+
};
|
| 635 |
+
float2 bbox_max = {
|
| 636 |
+
computeEllipseIntersection(conic, denom, sq(lambda), p, true, bbox_argmax.x).y,
|
| 637 |
+
computeEllipseIntersection(conic, denom, sq(lambda), p, false, bbox_argmax.y).y
|
| 638 |
+
};
|
| 639 |
+
half_extend[0] = (bbox_max.x - bbox_min.x) / 2.f;
|
| 640 |
+
half_extend[1] = (bbox_max.y - bbox_min.y) / 2.f;
|
| 641 |
+
}
|
| 642 |
+
else
|
| 643 |
+
{
|
| 644 |
+
// loosen the AABB
|
| 645 |
+
float mid = 0.5f * (cov.x + cov.z);
|
| 646 |
+
float lambda1 = mid + sqrt(max(0.0f, mid * mid - det));
|
| 647 |
+
float lambda2 = mid - sqrt(max(0.0f, mid * mid - det));
|
| 648 |
+
// float my_radius = ceil(3.f * sqrt(max(lambda1, lambda2)));
|
| 649 |
+
float my_radius = (lambda * sqrt(max(lambda1, lambda2)));
|
| 650 |
+
half_extend[0] = my_radius; // my_radius / focal_x;
|
| 651 |
+
half_extend[1] = my_radius; // my_radius / focal_y;
|
| 652 |
+
}
|
| 653 |
+
|
| 654 |
+
float neg = false;
|
| 655 |
+
|
| 656 |
+
if (isnan(half_extend[0]))
|
| 657 |
+
{
|
| 658 |
+
half_extend[0] = fmaxf(fabsf(center[0] - tan_fovx), fabsf(center[0] + tan_fovx));
|
| 659 |
+
neg = true;
|
| 660 |
+
}
|
| 661 |
+
if (isnan(half_extend[1]))
|
| 662 |
+
{
|
| 663 |
+
half_extend[1] = fmaxf(fabsf(center[1] - tan_fovy), fabsf(center[1] + tan_fovy));
|
| 664 |
+
neg = true;
|
| 665 |
+
}
|
| 666 |
+
float _left = center[0] - half_extend[0];
|
| 667 |
+
float _right = center[0] + half_extend[0];
|
| 668 |
+
float _bottom = center[1] - half_extend[1];
|
| 669 |
+
float _upper = center[1] + half_extend[1];
|
| 670 |
+
|
| 671 |
+
aabb.x = _left;
|
| 672 |
+
aabb.y = _right;
|
| 673 |
+
aabb.z = _bottom;
|
| 674 |
+
aabb.w = _upper;
|
| 675 |
+
|
| 676 |
+
// If half-extend is negative, return and do not compute the omni
|
| 677 |
+
if (neg) return;
|
| 678 |
+
|
| 679 |
+
// Omni mapping for AABB
|
| 680 |
+
float xi = 1.0;
|
| 681 |
+
float aabb_omni[8];
|
| 682 |
+
mirror_transform_pbf(aabb, xi, aabb_omni);
|
| 683 |
+
|
| 684 |
+
const float eps = 1e-6f;
|
| 685 |
+
float depth = p_view.z;
|
| 686 |
+
depth = (fabsf(depth) < eps) ? eps : depth; // Prevent division by zero
|
| 687 |
+
float gaus_center_omni[2] = {
|
| 688 |
+
mirror_transform_tan(p_view.x / depth, depth, xi),
|
| 689 |
+
mirror_transform_tan(p_view.y / depth, depth, xi)
|
| 690 |
+
};
|
| 691 |
+
|
| 692 |
+
float fov_omni[4];
|
| 693 |
+
mirror_transform_fov(tan_fovx, tan_fovy, xi, fov_omni);
|
| 694 |
+
|
| 695 |
+
float aa_omni[4] = { aabb_omni[0], aabb_omni[1], aabb_omni[2], aabb_omni[3] };
|
| 696 |
+
float bb_omni[4] = { aabb_omni[4], aabb_omni[5], aabb_omni[6], aabb_omni[7] };
|
| 697 |
+
float a_min = -INFINITY;
|
| 698 |
+
float a_max = INFINITY;
|
| 699 |
+
float b_min = -INFINITY;
|
| 700 |
+
float b_max = INFINITY;
|
| 701 |
+
|
| 702 |
+
int a_min_idx = -1;
|
| 703 |
+
int a_max_idx = -1;
|
| 704 |
+
int b_min_idx = -1;
|
| 705 |
+
int b_max_idx = -1;
|
| 706 |
+
|
| 707 |
+
for (int i = 0; i < 4; i++) {
|
| 708 |
+
if (aa_omni[i] < gaus_center_omni[0] && aa_omni[i] >= a_min){
|
| 709 |
+
a_min = aa_omni[i];
|
| 710 |
+
a_min_idx = i;
|
| 711 |
+
}
|
| 712 |
+
if (aa_omni[i] > gaus_center_omni[0] && aa_omni[i] <= a_max){
|
| 713 |
+
a_max = aa_omni[i];
|
| 714 |
+
a_max_idx = i;
|
| 715 |
+
}
|
| 716 |
+
if (bb_omni[i] < gaus_center_omni[1] && bb_omni[i] >= b_min){
|
| 717 |
+
b_min = bb_omni[i];
|
| 718 |
+
b_min_idx = i;
|
| 719 |
+
}
|
| 720 |
+
if (bb_omni[i] > gaus_center_omni[1] && bb_omni[i] <= b_max){
|
| 721 |
+
b_max = bb_omni[i];
|
| 722 |
+
b_max_idx = i;
|
| 723 |
+
}
|
| 724 |
+
}
|
| 725 |
+
if (a_min < fov_omni[1]) a_min_idx = 4;
|
| 726 |
+
if (a_min > fov_omni[0]) a_min_idx = 5;
|
| 727 |
+
|
| 728 |
+
if (a_max < fov_omni[1]) a_max_idx = 4;
|
| 729 |
+
if (a_max > fov_omni[0]) a_max_idx = 5;
|
| 730 |
+
|
| 731 |
+
if (b_min < fov_omni[3]) b_min_idx = 4;
|
| 732 |
+
if (b_min > fov_omni[2]) b_min_idx = 5;
|
| 733 |
+
|
| 734 |
+
if (b_max < fov_omni[3]) b_max_idx = 4;
|
| 735 |
+
if (b_max > fov_omni[2]) b_max_idx = 5;
|
| 736 |
+
|
| 737 |
+
if (a_min_idx == 4) aabb.x = -tan_fovx;
|
| 738 |
+
else if (a_min_idx == 5) aabb.x = tan_fovx;
|
| 739 |
+
else if (a_min_idx == 0) aabb.x = _left;
|
| 740 |
+
else if (a_min_idx == 1) aabb.x = _left;
|
| 741 |
+
else if (a_min_idx == 2) aabb.x = _right;
|
| 742 |
+
else if (a_min_idx == 3) aabb.x = _right;
|
| 743 |
+
|
| 744 |
+
if (a_max_idx == 5) aabb.y = tan_fovx;
|
| 745 |
+
else if (a_max_idx == 4) aabb.y = -tan_fovx;
|
| 746 |
+
else if (a_max_idx == 0) aabb.y = _left;
|
| 747 |
+
else if (a_max_idx == 1) aabb.y = _left;
|
| 748 |
+
else if (a_max_idx == 2) aabb.y = _right;
|
| 749 |
+
else if (a_max_idx == 3) aabb.y = _right;
|
| 750 |
+
|
| 751 |
+
if (b_min_idx == 4) aabb.z = -tan_fovy;
|
| 752 |
+
else if (b_min_idx == 5) aabb.z = tan_fovy;
|
| 753 |
+
else if (b_min_idx == 0) aabb.z = _bottom;
|
| 754 |
+
else if (b_min_idx == 1) aabb.z = _bottom;
|
| 755 |
+
else if (b_min_idx == 2) aabb.z = _upper;
|
| 756 |
+
else if (b_min_idx == 3) aabb.z = _upper;
|
| 757 |
+
|
| 758 |
+
if (b_max_idx == 5) aabb.w = tan_fovy;
|
| 759 |
+
else if (b_max_idx == 4) aabb.w = -tan_fovy;
|
| 760 |
+
else if (b_max_idx == 0) aabb.w = _bottom;
|
| 761 |
+
else if (b_max_idx == 1) aabb.w = _bottom;
|
| 762 |
+
else if (b_max_idx == 2) aabb.w = _upper;
|
| 763 |
+
else if (b_max_idx == 3) aabb.w = _upper;
|
| 764 |
+
|
| 765 |
+
return true;
|
| 766 |
+
}
|
| 767 |
+
|
| 768 |
+
// Forward method for converting the input spherical harmonics
|
| 769 |
+
// coefficients of each Gaussian to a simple RGB color.
|
| 770 |
+
__device__ glm::vec3 computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, bool* clamped)
|
| 771 |
+
{
|
| 772 |
+
// The implementation is loosely based on code for
|
| 773 |
+
// "Differentiable Point-Based Radiance Fields for
|
| 774 |
+
// Efficient View Synthesis" by Zhang et al. (2022)
|
| 775 |
+
glm::vec3 pos = means[idx];
|
| 776 |
+
glm::vec3 dir = pos - campos;
|
| 777 |
+
dir = dir / glm::length(dir);
|
| 778 |
+
|
| 779 |
+
glm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;
|
| 780 |
+
glm::vec3 result = SH_C0 * sh[0];
|
| 781 |
+
|
| 782 |
+
if (deg > 0)
|
| 783 |
+
{
|
| 784 |
+
float x = dir.x;
|
| 785 |
+
float y = dir.y;
|
| 786 |
+
float z = dir.z;
|
| 787 |
+
result = result - SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3];
|
| 788 |
+
|
| 789 |
+
if (deg > 1)
|
| 790 |
+
{
|
| 791 |
+
float xx = x * x, yy = y * y, zz = z * z;
|
| 792 |
+
float xy = x * y, yz = y * z, xz = x * z;
|
| 793 |
+
result = result +
|
| 794 |
+
SH_C2[0] * xy * sh[4] +
|
| 795 |
+
SH_C2[1] * yz * sh[5] +
|
| 796 |
+
SH_C2[2] * (2.0f * zz - xx - yy) * sh[6] +
|
| 797 |
+
SH_C2[3] * xz * sh[7] +
|
| 798 |
+
SH_C2[4] * (xx - yy) * sh[8];
|
| 799 |
+
|
| 800 |
+
if (deg > 2)
|
| 801 |
+
{
|
| 802 |
+
result = result +
|
| 803 |
+
SH_C3[0] * y * (3.0f * xx - yy) * sh[9] +
|
| 804 |
+
SH_C3[1] * xy * z * sh[10] +
|
| 805 |
+
SH_C3[2] * y * (4.0f * zz - xx - yy) * sh[11] +
|
| 806 |
+
SH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh[12] +
|
| 807 |
+
SH_C3[4] * x * (4.0f * zz - xx - yy) * sh[13] +
|
| 808 |
+
SH_C3[5] * z * (xx - yy) * sh[14] +
|
| 809 |
+
SH_C3[6] * x * (xx - 3.0f * yy) * sh[15];
|
| 810 |
+
}
|
| 811 |
+
}
|
| 812 |
+
}
|
| 813 |
+
result += 0.5f;
|
| 814 |
+
|
| 815 |
+
// RGB colors are clamped to positive values. If values are
|
| 816 |
+
// clamped, we need to keep track of this for the backward pass.
|
| 817 |
+
clamped[3 * idx + 0] = (result.x < 0);
|
| 818 |
+
clamped[3 * idx + 1] = (result.y < 0);
|
| 819 |
+
clamped[3 * idx + 2] = (result.z < 0);
|
| 820 |
+
return glm::max(result, 0.0f);
|
| 821 |
+
}
|
| 822 |
+
|
| 823 |
+
|
| 824 |
+
// Perform initial steps for each Gaussian prior to rasterization.
|
| 825 |
+
template<int C>
|
| 826 |
+
__global__ void preprocessCUDA(int P, int D, int M,
|
| 827 |
+
const float* orig_points,
|
| 828 |
+
const glm::vec3* scales,
|
| 829 |
+
const float scale_modifier,
|
| 830 |
+
const glm::vec4* rotations,
|
| 831 |
+
const float* opacities,
|
| 832 |
+
const float* shs,
|
| 833 |
+
bool* clamped,
|
| 834 |
+
const float* colors_precomp,
|
| 835 |
+
const float* viewmatrix,
|
| 836 |
+
const float* mirror_transformed_tan_x, // tan_theta of mirror transformed PBF
|
| 837 |
+
const float* mirror_transformed_tan_y, // tan_phi of mirror transformed PBF
|
| 838 |
+
const glm::vec3* cam_pos,
|
| 839 |
+
const int W, int H,
|
| 840 |
+
const float tan_fovx, float tan_fovy,
|
| 841 |
+
const float focal_x, float focal_y,
|
| 842 |
+
const float principal_x, float principal_y,
|
| 843 |
+
const float* distortion_coeffs, // KB fisheye distortion coefficients (k1,k2,k3,k4 in polynomial angle model)
|
| 844 |
+
int* radii,
|
| 845 |
+
int* pbf_id,
|
| 846 |
+
float4* pbf_tan,
|
| 847 |
+
const float* xmap,
|
| 848 |
+
const float* ymap,
|
| 849 |
+
float3* points_xyz_view,
|
| 850 |
+
float* depths,
|
| 851 |
+
float* rgb,
|
| 852 |
+
float2* h_opacity,
|
| 853 |
+
float3* w2o,
|
| 854 |
+
const dim3 grid,
|
| 855 |
+
uint32_t* tiles_touched,
|
| 856 |
+
bool prefiltered,
|
| 857 |
+
bool antialiasing,
|
| 858 |
+
int mode,
|
| 859 |
+
float near_threshold,
|
| 860 |
+
int asso_mode)
|
| 861 |
+
{
|
| 862 |
+
auto idx = cg::this_grid().thread_rank();
|
| 863 |
+
if (idx >= P)
|
| 864 |
+
return;
|
| 865 |
+
|
| 866 |
+
// Initialize radius and touched tiles to 0. If this isn't changed,
|
| 867 |
+
// this Gaussian will not be processed further.
|
| 868 |
+
radii[idx] = 0;
|
| 869 |
+
pbf_id[idx * 4] = 0;
|
| 870 |
+
pbf_id[idx * 4 + 1] = 0;
|
| 871 |
+
pbf_id[idx * 4 + 2] = 0;
|
| 872 |
+
pbf_id[idx * 4 + 3] = 0;
|
| 873 |
+
|
| 874 |
+
tiles_touched[idx] = 0;
|
| 875 |
+
|
| 876 |
+
// Perform near culling, quit if outside.
|
| 877 |
+
float3 p_view;
|
| 878 |
+
if (!in_frustum(idx, orig_points, viewmatrix, prefiltered, p_view, near_threshold))
|
| 879 |
+
return;
|
| 880 |
+
|
| 881 |
+
glm::mat3 R_view = computeRotationMatrix(rotations[idx], viewmatrix);
|
| 882 |
+
float cutoff = 3.0f;
|
| 883 |
+
float3 p_view_identity = {orig_points[3 * idx] + viewmatrix[12], orig_points[3 * idx + 1] + viewmatrix[13], orig_points[3 * idx + 2] + viewmatrix[14]};
|
| 884 |
+
if (!omni_hvar(scales[idx], scale_modifier, opacities[idx], h_opacity + idx, true)) return;
|
| 885 |
+
|
| 886 |
+
// Prepare world-to-canonical transformation maxtrix for exact ray-Gaussian integral
|
| 887 |
+
// see details in 3DGEER https://openreview.net/pdf?id=4voMNlRWI7, Eq.3
|
| 888 |
+
w2o[idx * 3 + 0] = toFloat3(R_view[0] / (sqrtf(sq(scales[idx].x) + h_opacity[idx].x) * scale_modifier));
|
| 889 |
+
w2o[idx * 3 + 1] = toFloat3(R_view[1] / (sqrtf(sq(scales[idx].y) + h_opacity[idx].x) * scale_modifier));
|
| 890 |
+
w2o[idx * 3 + 2] = toFloat3(R_view[2] / (sqrtf(sq(scales[idx].z) + h_opacity[idx].x) * scale_modifier));
|
| 891 |
+
|
| 892 |
+
points_xyz_view[idx] = p_view;
|
| 893 |
+
|
| 894 |
+
// Compute bounding region for this Gaussian using the selected association mode:
|
| 895 |
+
// asso_mode == 0: Particle Bounding Frustum (PBF) - exact and tight (default)
|
| 896 |
+
// asso_mode == 1: AABB via Elliptical Weighted Average (EWA)
|
| 897 |
+
// asso_mode == 2: AABB via Unscented Transform (UT)
|
| 898 |
+
// Any value outside [0, 2] falls back to PBF.
|
| 899 |
+
float4 tan_xxyy; // clamped tan value in x / y dir, i.e., tan_theta, tan_phi
|
| 900 |
+
bool tighten = false;
|
| 901 |
+
if (asso_mode == 1) {
|
| 902 |
+
if (!computeAABB_EWA(scales[idx], scale_modifier, R_view, p_view, cutoff, tan_xxyy, tan_fovx, tan_fovy, h_opacity[idx].x, tighten)) return;
|
| 903 |
+
} else if (asso_mode == 2) {
|
| 904 |
+
if (!computeAABB_UT(scales[idx], scale_modifier, R_view, p_view, cutoff, tan_xxyy, tan_fovx, tan_fovy, h_opacity[idx].x, tighten)) return;
|
| 905 |
+
} else {
|
| 906 |
+
// Default: asso_mode == 0, use PBF
|
| 907 |
+
// see details in 3DGEER paper: https://openreview.net/pdf?id=4voMNlRWI7, Eq.10 (mathmatical proof in Sec.D.1)
|
| 908 |
+
if (!computePBF(scales[idx], scale_modifier, R_view, p_view, cutoff, tan_xxyy, tan_fovx, tan_fovy, h_opacity[idx].x)) return;
|
| 909 |
+
}
|
| 910 |
+
|
| 911 |
+
if ((tan_xxyy.y - tan_xxyy.x) * (tan_xxyy.w - tan_xxyy.z) == 0)
|
| 912 |
+
return;
|
| 913 |
+
|
| 914 |
+
int _aa[2];
|
| 915 |
+
int _bb[2];
|
| 916 |
+
if (mode == 0)
|
| 917 |
+
{
|
| 918 |
+
// Convert PBF into BEAP space;
|
| 919 |
+
searchsorted_pbf(mirror_transformed_tan_x, W, mirror_transformed_tan_y, H, (float*)(&tan_xxyy), _aa, _bb);
|
| 920 |
+
} else if (mode == 1) {
|
| 921 |
+
// Bound PBF into KB imaging space;
|
| 922 |
+
const float4* kb_params4 = reinterpret_cast<const float4*>(distortion_coeffs);
|
| 923 |
+
const float4 kb_params = kb_params4[0];
|
| 924 |
+
invinterpolated_pbf(W, H, focal_x, focal_y, principal_x, principal_y, kb_params, tan_xxyy, _aa, _bb);
|
| 925 |
+
} else {
|
| 926 |
+
_aa[0] = (int)fmaxf(-(float)W, fminf(2.0f * W, floorf(focal_x * tan_xxyy.x + W / 2.0f - 1.0f)));
|
| 927 |
+
_aa[1] = (int)fmaxf(-(float)W, fminf(2.0f * W, ceilf( focal_x * tan_xxyy.y + W / 2.0f + 1.0f)));
|
| 928 |
+
_bb[0] = (int)fmaxf(-(float)H, fminf(2.0f * H, floorf(focal_y * tan_xxyy.z + H / 2.0f - 1.0f)));
|
| 929 |
+
_bb[1] = (int)fmaxf(-(float)H, fminf(2.0f * H, ceilf( focal_y * tan_xxyy.w + H / 2.0f + 1.0f)));
|
| 930 |
+
}
|
| 931 |
+
int4 _pbf = {_aa[0], _aa[1], _bb[0], _bb[1]};
|
| 932 |
+
if ((_pbf.y - _pbf.x) * (_pbf.w - _pbf.z) == 0)
|
| 933 |
+
return;
|
| 934 |
+
|
| 935 |
+
int4 screen_grid_aligned_pbf = _pbf;
|
| 936 |
+
float2 point_image = { (screen_grid_aligned_pbf.y + screen_grid_aligned_pbf.x)/2.f, (screen_grid_aligned_pbf.w + screen_grid_aligned_pbf.z)/2.f };
|
| 937 |
+
|
| 938 |
+
uint2 rect_min, rect_max;
|
| 939 |
+
getRect2(screen_grid_aligned_pbf, rect_min, rect_max, grid);
|
| 940 |
+
if ((rect_max.x - rect_min.x) * (rect_max.y - rect_min.y) == 0)
|
| 941 |
+
return;
|
| 942 |
+
int my_radius = max(rect_max.x - rect_min.x, rect_max.y - rect_min.y);
|
| 943 |
+
|
| 944 |
+
// If colors have been precomputed, use them, otherwise convert
|
| 945 |
+
// spherical harmonics coefficients to RGB color.
|
| 946 |
+
if (colors_precomp == nullptr)
|
| 947 |
+
{
|
| 948 |
+
glm::vec3 result = computeColorFromSH(idx, D, M, (glm::vec3*)orig_points, *cam_pos, shs, clamped);
|
| 949 |
+
rgb[idx * C + 0] = result.x;
|
| 950 |
+
rgb[idx * C + 1] = result.y;
|
| 951 |
+
rgb[idx * C + 2] = result.z;
|
| 952 |
+
}
|
| 953 |
+
|
| 954 |
+
// Store some useful helper data for the next steps.
|
| 955 |
+
depths[idx] = sqrtf((p_view.z * p_view.z) + (p_view.x * p_view.x) + (p_view.y * p_view.y));
|
| 956 |
+
radii[idx] = my_radius;
|
| 957 |
+
|
| 958 |
+
pbf_id[idx * 4] = screen_grid_aligned_pbf.x;
|
| 959 |
+
pbf_id[idx * 4 + 1] = screen_grid_aligned_pbf.y;
|
| 960 |
+
pbf_id[idx * 4 + 2] = screen_grid_aligned_pbf.z;
|
| 961 |
+
pbf_id[idx * 4 + 3] = screen_grid_aligned_pbf.w;
|
| 962 |
+
|
| 963 |
+
pbf_tan[idx] = tan_xxyy;
|
| 964 |
+
tiles_touched[idx] = (rect_max.y - rect_min.y) * (rect_max.x - rect_min.x);
|
| 965 |
+
}
|
| 966 |
+
|
| 967 |
+
// Main rasterization method. Collaboratively works on one tile per
|
| 968 |
+
// block, each thread treats one pixel. Alternates between fetching
|
| 969 |
+
// and rasterizing data.
|
| 970 |
+
template <uint32_t CHANNELS>
|
| 971 |
+
__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)
|
| 972 |
+
renderCUDA(
|
| 973 |
+
const uint2* __restrict__ ranges,
|
| 974 |
+
const uint32_t* __restrict__ point_list,
|
| 975 |
+
int W, int H,
|
| 976 |
+
const int mode,
|
| 977 |
+
const float focal_x, float focal_y,
|
| 978 |
+
const float* tan_theta,
|
| 979 |
+
const float* tan_phi,
|
| 980 |
+
const float* raymap,
|
| 981 |
+
const float4* __restrict__ pbf_tan,
|
| 982 |
+
const float3* __restrict__ points_xyz_view,
|
| 983 |
+
const float* __restrict__ features,
|
| 984 |
+
const float2* __restrict__ h_opacity,
|
| 985 |
+
const float3* __restrict__ w2o_mat,
|
| 986 |
+
float* __restrict__ final_T,
|
| 987 |
+
uint32_t* __restrict__ n_contrib,
|
| 988 |
+
const float* __restrict__ bg_color,
|
| 989 |
+
float* __restrict__ out_color,
|
| 990 |
+
const float* __restrict__ depths,
|
| 991 |
+
float* __restrict__ invdepth
|
| 992 |
+
)
|
| 993 |
+
{
|
| 994 |
+
// Identify current tile and associated min/max pixel range.
|
| 995 |
+
auto block = cg::this_thread_block();
|
| 996 |
+
uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;
|
| 997 |
+
uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };
|
| 998 |
+
uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };
|
| 999 |
+
uint32_t pix_id = W * pix.y + pix.x;
|
| 1000 |
+
bool inside = pix.x < W && pix.y < H;
|
| 1001 |
+
float3 rayf;
|
| 1002 |
+
// if (raymap == nullptr) {
|
| 1003 |
+
// rayf = make_float3((float)tan_theta[min(pix.x, W-1)], (float)tan_phi[min(pix.y, H-1)], 1.f);
|
| 1004 |
+
// } else {
|
| 1005 |
+
// rayf = make_float3((float)raymap[pix_id * 3], (float)raymap[pix_id * 3 + 1],(float)raymap[pix_id * 3 + 2]);
|
| 1006 |
+
// }
|
| 1007 |
+
if (mode == 0) {
|
| 1008 |
+
rayf = make_float3((float)tan_theta[min(pix.x, W-1)], (float)tan_phi[min(pix.y, H-1)], 1.f);
|
| 1009 |
+
} else if (mode == 1) {
|
| 1010 |
+
rayf = inside
|
| 1011 |
+
? make_float3((float)raymap[pix_id * 3], (float)raymap[pix_id * 3 + 1], (float)raymap[pix_id * 3 + 2])
|
| 1012 |
+
: make_float3(0.0f, 0.0f, 1.0f);
|
| 1013 |
+
} else {
|
| 1014 |
+
rayf = { ((float)pix.x + 0.5f) / focal_x - W / (2.0f * focal_x), ((float)pix.y + 0.5f) / focal_y - H / (2.0f * focal_y), 1.0f };
|
| 1015 |
+
}
|
| 1016 |
+
|
| 1017 |
+
// Done threads can help with fetching, but don't rasterize
|
| 1018 |
+
bool done = !inside;
|
| 1019 |
+
|
| 1020 |
+
// Load start/end range of IDs to process in bit sorted list.
|
| 1021 |
+
uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];
|
| 1022 |
+
const int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);
|
| 1023 |
+
int toDo = range.y - range.x;
|
| 1024 |
+
|
| 1025 |
+
// Allocate storage for batches of collectively fetched data.
|
| 1026 |
+
__shared__ int collected_id[BLOCK_SIZE];
|
| 1027 |
+
__shared__ float3 collected_xyz[BLOCK_SIZE];
|
| 1028 |
+
__shared__ float2 collected_h_opacity[BLOCK_SIZE];
|
| 1029 |
+
__shared__ float3 collected_w2o[BLOCK_SIZE * 3];
|
| 1030 |
+
__shared__ float4 collected_pbf_tan[BLOCK_SIZE * 4];
|
| 1031 |
+
|
| 1032 |
+
// Initialize helper variables
|
| 1033 |
+
float T = 1.0f;
|
| 1034 |
+
uint32_t contributor = 0;
|
| 1035 |
+
uint32_t last_contributor = 0;
|
| 1036 |
+
float C[CHANNELS] = { 0 };
|
| 1037 |
+
|
| 1038 |
+
float expected_invdepth = 0.0f;
|
| 1039 |
+
|
| 1040 |
+
// Iterate over batches until all done or range is complete
|
| 1041 |
+
for (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)
|
| 1042 |
+
{
|
| 1043 |
+
// End if entire block votes that it is done rasterizing
|
| 1044 |
+
int num_done = __syncthreads_count(done);
|
| 1045 |
+
if (num_done == BLOCK_SIZE)
|
| 1046 |
+
break;
|
| 1047 |
+
|
| 1048 |
+
// Collectively fetch per-Gaussian data from global to shared
|
| 1049 |
+
int progress = i * BLOCK_SIZE + block.thread_rank();
|
| 1050 |
+
if (range.x + progress < range.y)
|
| 1051 |
+
{
|
| 1052 |
+
int coll_id = point_list[range.x + progress];
|
| 1053 |
+
int thread_idx = block.thread_rank();
|
| 1054 |
+
|
| 1055 |
+
collected_id[thread_idx] = coll_id;
|
| 1056 |
+
collected_xyz[thread_idx] = points_xyz_view[coll_id];
|
| 1057 |
+
collected_pbf_tan[thread_idx] = pbf_tan[coll_id];
|
| 1058 |
+
|
| 1059 |
+
for (int j = 0; j < 3; j++) {
|
| 1060 |
+
collected_w2o[thread_idx * 3 + j] = w2o_mat[coll_id * 3 + j];
|
| 1061 |
+
}
|
| 1062 |
+
collected_h_opacity[thread_idx] = h_opacity[coll_id];
|
| 1063 |
+
}
|
| 1064 |
+
block.sync();
|
| 1065 |
+
|
| 1066 |
+
// Iterate over current batch
|
| 1067 |
+
for (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)
|
| 1068 |
+
{
|
| 1069 |
+
// Keep track of current position in range
|
| 1070 |
+
contributor++;
|
| 1071 |
+
|
| 1072 |
+
// if (rayf not in pbf_tan) continue;
|
| 1073 |
+
float4 b_xxyy = collected_pbf_tan[j];
|
| 1074 |
+
|
| 1075 |
+
if (mode==1) {
|
| 1076 |
+
if (((rayf.x / rayf.z) < b_xxyy.x) || ((rayf.x / rayf.z) > b_xxyy.y))
|
| 1077 |
+
continue;
|
| 1078 |
+
if (((rayf.y / rayf.z) < b_xxyy.z) || ((rayf.y / rayf.z) > b_xxyy.w))
|
| 1079 |
+
continue;
|
| 1080 |
+
}
|
| 1081 |
+
|
| 1082 |
+
float3 xyz = collected_xyz[j];
|
| 1083 |
+
float2 h_o = collected_h_opacity[j];
|
| 1084 |
+
float3* w2o = collected_w2o + j * 3;
|
| 1085 |
+
|
| 1086 |
+
// see 3DGEER paper: https://openreview.net/pdf?id=4voMNlRWI7 (Eq. 5, mathmatical proof in Sec.B)
|
| 1087 |
+
float3 p_obj = { dot(xyz, w2o[0]), dot(xyz, w2o[1]), dot(xyz, w2o[2]) };
|
| 1088 |
+
float3 d_obj = { dot(rayf, w2o[0]), dot(rayf, w2o[1]), dot(rayf, w2o[2]) };
|
| 1089 |
+
float3 normal = cross(d_obj, p_obj); // check Sec.C.7
|
| 1090 |
+
float power_mah = -0.5f * dot(normal, normal) / dot(d_obj, d_obj);
|
| 1091 |
+
|
| 1092 |
+
if (power_mah > 0.0f)
|
| 1093 |
+
continue;
|
| 1094 |
+
|
| 1095 |
+
// Eq. (2) from 3D Gaussian splatting paper.
|
| 1096 |
+
// Obtain alpha by multiplying with Gaussian opacity
|
| 1097 |
+
// and its exponential falloff from mean.
|
| 1098 |
+
// Avoid numerical instabilities (see paper appendix).
|
| 1099 |
+
float alpha = min(0.99f, h_o.y * exp(power_mah)); // For ray-splatting
|
| 1100 |
+
if (alpha < 1.0f / 255.0f)
|
| 1101 |
+
continue;
|
| 1102 |
+
float test_T = T * (1 - alpha);
|
| 1103 |
+
if (test_T < 0.0001f)
|
| 1104 |
+
{
|
| 1105 |
+
done = true;
|
| 1106 |
+
continue;
|
| 1107 |
+
}
|
| 1108 |
+
|
| 1109 |
+
// Eq. (3) from 3D Gaussian splatting paper.
|
| 1110 |
+
for (int ch = 0; ch < CHANNELS; ch++)
|
| 1111 |
+
C[ch] += features[collected_id[j] * CHANNELS + ch] * alpha * T;
|
| 1112 |
+
|
| 1113 |
+
if(invdepth)
|
| 1114 |
+
expected_invdepth += (1 / depths[collected_id[j]]) * alpha * T;
|
| 1115 |
+
|
| 1116 |
+
T = test_T;
|
| 1117 |
+
|
| 1118 |
+
// Keep track of last range entry to update this pixel.
|
| 1119 |
+
last_contributor = contributor;
|
| 1120 |
+
}
|
| 1121 |
+
}
|
| 1122 |
+
|
| 1123 |
+
// All threads that treat valid pixel write out their final
|
| 1124 |
+
// rendering data to the frame and auxiliary buffers.
|
| 1125 |
+
if (inside)
|
| 1126 |
+
{
|
| 1127 |
+
final_T[pix_id] = T;
|
| 1128 |
+
n_contrib[pix_id] = last_contributor;
|
| 1129 |
+
for (int ch = 0; ch < CHANNELS; ch++)
|
| 1130 |
+
out_color[ch * H * W + pix_id] = C[ch] + T * bg_color[ch];
|
| 1131 |
+
|
| 1132 |
+
if (invdepth)
|
| 1133 |
+
invdepth[pix_id] = expected_invdepth;// 1. / (expected_depth + T * 1e3);
|
| 1134 |
+
}
|
| 1135 |
+
}
|
| 1136 |
+
|
| 1137 |
+
void FORWARD::render(
|
| 1138 |
+
const dim3 grid, dim3 block,
|
| 1139 |
+
const uint2* ranges,
|
| 1140 |
+
const uint32_t* point_list,
|
| 1141 |
+
int W, int H,
|
| 1142 |
+
int mode,
|
| 1143 |
+
float focal_x, float focal_y,
|
| 1144 |
+
const float* tan_theta,
|
| 1145 |
+
const float* tan_phi,
|
| 1146 |
+
const float* raymap,
|
| 1147 |
+
const float4* pbf_tan,
|
| 1148 |
+
const float3* means3D_view,
|
| 1149 |
+
const float* colors,
|
| 1150 |
+
const float2* h_opacity,
|
| 1151 |
+
const float3* w2o,
|
| 1152 |
+
float* final_T,
|
| 1153 |
+
uint32_t* n_contrib,
|
| 1154 |
+
const float* bg_color,
|
| 1155 |
+
float* out_color,
|
| 1156 |
+
float* depths,
|
| 1157 |
+
float* depth)
|
| 1158 |
+
{
|
| 1159 |
+
renderCUDA<NUM_CHANNELS> << <grid, block >> > (
|
| 1160 |
+
ranges,
|
| 1161 |
+
point_list,
|
| 1162 |
+
W, H,
|
| 1163 |
+
mode,
|
| 1164 |
+
focal_x, focal_y,
|
| 1165 |
+
tan_theta, tan_phi,
|
| 1166 |
+
raymap,
|
| 1167 |
+
pbf_tan,
|
| 1168 |
+
means3D_view,
|
| 1169 |
+
colors,
|
| 1170 |
+
h_opacity,
|
| 1171 |
+
w2o,
|
| 1172 |
+
final_T,
|
| 1173 |
+
n_contrib,
|
| 1174 |
+
bg_color,
|
| 1175 |
+
out_color,
|
| 1176 |
+
depths,
|
| 1177 |
+
depth);
|
| 1178 |
+
}
|
| 1179 |
+
|
| 1180 |
+
void FORWARD::preprocess(int P, int D, int M,
|
| 1181 |
+
const float* means3D,
|
| 1182 |
+
const glm::vec3* scales,
|
| 1183 |
+
const float scale_modifier,
|
| 1184 |
+
const glm::vec4* rotations,
|
| 1185 |
+
const float* opacities,
|
| 1186 |
+
const float* shs,
|
| 1187 |
+
bool* clamped,
|
| 1188 |
+
const float* colors_precomp,
|
| 1189 |
+
const float* viewmatrix,
|
| 1190 |
+
const float* mirror_transformed_tan_x,
|
| 1191 |
+
const float* mirror_transformed_tan_y,
|
| 1192 |
+
const glm::vec3* cam_pos,
|
| 1193 |
+
const int W, int H,
|
| 1194 |
+
const float focal_x, float focal_y,
|
| 1195 |
+
const float principal_x, float principal_y,
|
| 1196 |
+
const float* distortion_coeffs,
|
| 1197 |
+
const float tan_fovx, float tan_fovy,
|
| 1198 |
+
int* radii,
|
| 1199 |
+
int* pbf,
|
| 1200 |
+
float4* pbf_tan,
|
| 1201 |
+
const float* xmap,
|
| 1202 |
+
const float* ymap,
|
| 1203 |
+
float3* means3D_view,
|
| 1204 |
+
float* depths,
|
| 1205 |
+
float* rgb,
|
| 1206 |
+
float2* h_opacity,
|
| 1207 |
+
float3* w2o,
|
| 1208 |
+
const dim3 grid,
|
| 1209 |
+
uint32_t* tiles_touched,
|
| 1210 |
+
bool prefiltered,
|
| 1211 |
+
bool antialiasing,
|
| 1212 |
+
int mode,
|
| 1213 |
+
float near_threshold,
|
| 1214 |
+
int asso_mode)
|
| 1215 |
+
{
|
| 1216 |
+
preprocessCUDA<NUM_CHANNELS> << <(P + 255) / 256, 256 >> > (
|
| 1217 |
+
P, D, M,
|
| 1218 |
+
means3D,
|
| 1219 |
+
scales,
|
| 1220 |
+
scale_modifier,
|
| 1221 |
+
rotations,
|
| 1222 |
+
opacities,
|
| 1223 |
+
shs,
|
| 1224 |
+
clamped,
|
| 1225 |
+
colors_precomp,
|
| 1226 |
+
viewmatrix,
|
| 1227 |
+
mirror_transformed_tan_x, mirror_transformed_tan_y,
|
| 1228 |
+
cam_pos,
|
| 1229 |
+
W, H,
|
| 1230 |
+
tan_fovx, tan_fovy,
|
| 1231 |
+
focal_x, focal_y,
|
| 1232 |
+
principal_x, principal_y,
|
| 1233 |
+
distortion_coeffs,
|
| 1234 |
+
radii,
|
| 1235 |
+
pbf, pbf_tan,
|
| 1236 |
+
xmap, ymap,
|
| 1237 |
+
means3D_view,
|
| 1238 |
+
depths,
|
| 1239 |
+
rgb, h_opacity,
|
| 1240 |
+
w2o,
|
| 1241 |
+
grid,
|
| 1242 |
+
tiles_touched,
|
| 1243 |
+
prefiltered,
|
| 1244 |
+
antialiasing,
|
| 1245 |
+
mode,
|
| 1246 |
+
near_threshold,
|
| 1247 |
+
asso_mode
|
| 1248 |
+
);
|
| 1249 |
+
}
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/forward.h
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#ifndef CUDA_RASTERIZER_FORWARD_H_INCLUDED
|
| 13 |
+
#define CUDA_RASTERIZER_FORWARD_H_INCLUDED
|
| 14 |
+
|
| 15 |
+
#include <cuda.h>
|
| 16 |
+
#include "cuda_runtime.h"
|
| 17 |
+
#include "device_launch_parameters.h"
|
| 18 |
+
#define GLM_FORCE_CUDA
|
| 19 |
+
#include <glm/glm.hpp>
|
| 20 |
+
|
| 21 |
+
namespace FORWARD
|
| 22 |
+
{
|
| 23 |
+
// Perform initial steps for each Gaussian prior to rasterization.
|
| 24 |
+
void preprocess(int P, int D, int M,
|
| 25 |
+
const float* orig_points,
|
| 26 |
+
const glm::vec3* scales,
|
| 27 |
+
const float scale_modifier,
|
| 28 |
+
const glm::vec4* rotations,
|
| 29 |
+
const float* opacities,
|
| 30 |
+
const float* shs,
|
| 31 |
+
bool* clamped,
|
| 32 |
+
const float* colors_precomp,
|
| 33 |
+
const float* viewmatrix,
|
| 34 |
+
const float* mirror_transformed_tan_theta,
|
| 35 |
+
const float* mirror_transformed_tan_phi,
|
| 36 |
+
const glm::vec3* cam_pos,
|
| 37 |
+
const int W, int H,
|
| 38 |
+
const float focal_x, float focal_y,
|
| 39 |
+
const float principal_x, float principal_y,
|
| 40 |
+
const float* distortion_coeffs,
|
| 41 |
+
const float tan_fovx, float tan_fovy,
|
| 42 |
+
int* radii,
|
| 43 |
+
int* pbf_id,
|
| 44 |
+
float4* pbf_tan,
|
| 45 |
+
const float* xmap,
|
| 46 |
+
const float* ymap,
|
| 47 |
+
float3* points_xyz_view,
|
| 48 |
+
float* depths,
|
| 49 |
+
float* colors,
|
| 50 |
+
float2* h_opacity,
|
| 51 |
+
float3* w2o,
|
| 52 |
+
const dim3 grid,
|
| 53 |
+
uint32_t* tiles_touched,
|
| 54 |
+
bool prefiltered,
|
| 55 |
+
bool antialiasing,
|
| 56 |
+
int mode,
|
| 57 |
+
float near_threshold = 0.2f,
|
| 58 |
+
int asso_mode = 0);
|
| 59 |
+
|
| 60 |
+
// Main rasterization method.
|
| 61 |
+
void render(
|
| 62 |
+
const dim3 grid, dim3 block,
|
| 63 |
+
const uint2* ranges,
|
| 64 |
+
const uint32_t* point_list,
|
| 65 |
+
int W, int H,
|
| 66 |
+
int mode,
|
| 67 |
+
float focal_x, float focal_y,
|
| 68 |
+
const float* tan_theta,
|
| 69 |
+
const float* tan_phi,
|
| 70 |
+
const float* raymap,
|
| 71 |
+
const float4* pbf_tan,
|
| 72 |
+
const float3* points_xyz_view,
|
| 73 |
+
const float* features,
|
| 74 |
+
const float2* h_opacity,
|
| 75 |
+
const float3* w2o,
|
| 76 |
+
float* final_T,
|
| 77 |
+
uint32_t* n_contrib,
|
| 78 |
+
const float* bg_color,
|
| 79 |
+
float* out_color,
|
| 80 |
+
float* depths,
|
| 81 |
+
float* depth);
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
#endif
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/rasterizer.h
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#ifndef CUDA_RASTERIZER_H_INCLUDED
|
| 13 |
+
#define CUDA_RASTERIZER_H_INCLUDED
|
| 14 |
+
|
| 15 |
+
#include <vector>
|
| 16 |
+
#include <functional>
|
| 17 |
+
|
| 18 |
+
namespace CudaRasterizer
|
| 19 |
+
{
|
| 20 |
+
class Rasterizer
|
| 21 |
+
{
|
| 22 |
+
public:
|
| 23 |
+
|
| 24 |
+
static void markVisible(
|
| 25 |
+
int P,
|
| 26 |
+
float* means3D,
|
| 27 |
+
float* viewmatrix,
|
| 28 |
+
bool* present);
|
| 29 |
+
|
| 30 |
+
static int forward(
|
| 31 |
+
std::function<char* (size_t)> geometryBuffer,
|
| 32 |
+
std::function<char* (size_t)> binningBuffer,
|
| 33 |
+
std::function<char* (size_t)> imageBuffer,
|
| 34 |
+
const int P, int D, int M,
|
| 35 |
+
const float* background,
|
| 36 |
+
const int width, int height,
|
| 37 |
+
const float* means3D,
|
| 38 |
+
const float* shs,
|
| 39 |
+
const float* colors_precomp,
|
| 40 |
+
const float* opacities,
|
| 41 |
+
const float* scales,
|
| 42 |
+
const float scale_modifier,
|
| 43 |
+
const float* rotations,
|
| 44 |
+
const float* viewmatrix,
|
| 45 |
+
const float* mirror_transformed_tan_theta,
|
| 46 |
+
const float* mirror_transformed_tan_phi,
|
| 47 |
+
const float* tan_theta,
|
| 48 |
+
const float* tan_phi,
|
| 49 |
+
const float* cam_pos,
|
| 50 |
+
const float focal_x, float focal_y,
|
| 51 |
+
const float principal_x, float principal_y,
|
| 52 |
+
const float* distortion_coeffs,
|
| 53 |
+
const float* raymap,
|
| 54 |
+
float* xmap,
|
| 55 |
+
float* ymap,
|
| 56 |
+
const float tan_fovx, float tan_fovy,
|
| 57 |
+
const bool prefiltered,
|
| 58 |
+
float* kernel_times,
|
| 59 |
+
float* out_color,
|
| 60 |
+
float* depth,
|
| 61 |
+
bool antialiasing,
|
| 62 |
+
int mode,
|
| 63 |
+
int* radii = nullptr,
|
| 64 |
+
int* ranges = nullptr,
|
| 65 |
+
float near_threshold = 0.2f,
|
| 66 |
+
bool debug = false,
|
| 67 |
+
int asso_mode = 0);
|
| 68 |
+
|
| 69 |
+
static void backward(
|
| 70 |
+
const int P, int D, int M, int R,
|
| 71 |
+
const float* background,
|
| 72 |
+
const int width, int height,
|
| 73 |
+
const float* tan_theta,
|
| 74 |
+
const float* tan_phi,
|
| 75 |
+
const float* raymap,
|
| 76 |
+
const int mode,
|
| 77 |
+
const float* means3D,
|
| 78 |
+
const float* shs,
|
| 79 |
+
const float* colors_precomp,
|
| 80 |
+
const float* opacities,
|
| 81 |
+
const float* scales,
|
| 82 |
+
const float scale_modifier,
|
| 83 |
+
const float* rotations,
|
| 84 |
+
const float* viewmatrix,
|
| 85 |
+
const float* campos,
|
| 86 |
+
const float tan_fovx, float tan_fovy,
|
| 87 |
+
const int* radii,
|
| 88 |
+
char* geom_buffer,
|
| 89 |
+
char* binning_buffer,
|
| 90 |
+
char* image_buffer,
|
| 91 |
+
const float* dL_dpix,
|
| 92 |
+
const float* dL_invdepths,
|
| 93 |
+
float* dL_dmean2D,
|
| 94 |
+
float* dL_dopacity,
|
| 95 |
+
float* dL_dcolor,
|
| 96 |
+
float* dL_dinvdepth,
|
| 97 |
+
float* dL_dmean3D,
|
| 98 |
+
float* dL_dsh,
|
| 99 |
+
float* dL_dscale,
|
| 100 |
+
float* dL_drot,
|
| 101 |
+
float* dL_dsigmaInv,
|
| 102 |
+
bool antialiasing,
|
| 103 |
+
bool debug);
|
| 104 |
+
};
|
| 105 |
+
};
|
| 106 |
+
|
| 107 |
+
#endif
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/rasterizer_impl.cu
ADDED
|
@@ -0,0 +1,616 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#include "rasterizer_impl.h"
|
| 13 |
+
#include <iostream>
|
| 14 |
+
#include <fstream>
|
| 15 |
+
#include <algorithm>
|
| 16 |
+
#include <numeric>
|
| 17 |
+
#include <cuda.h>
|
| 18 |
+
#include "cuda_runtime.h"
|
| 19 |
+
#include "device_launch_parameters.h"
|
| 20 |
+
#include <cub/cub.cuh>
|
| 21 |
+
#include <cub/device/device_radix_sort.cuh>
|
| 22 |
+
#define GLM_FORCE_CUDA
|
| 23 |
+
#include <glm/glm.hpp>
|
| 24 |
+
|
| 25 |
+
#include <cooperative_groups.h>
|
| 26 |
+
#include <cooperative_groups/reduce.h>
|
| 27 |
+
namespace cg = cooperative_groups;
|
| 28 |
+
|
| 29 |
+
#include "auxiliary.h"
|
| 30 |
+
#include "forward.h"
|
| 31 |
+
#include "backward.h"
|
| 32 |
+
|
| 33 |
+
// Helper function to find the next-highest bit of the MSB
|
| 34 |
+
// on the CPU.
|
| 35 |
+
uint32_t getHigherMsb(uint32_t n)
|
| 36 |
+
{
|
| 37 |
+
uint32_t msb = sizeof(n) * 4;
|
| 38 |
+
uint32_t step = msb;
|
| 39 |
+
while (step > 1)
|
| 40 |
+
{
|
| 41 |
+
step /= 2;
|
| 42 |
+
if (n >> msb)
|
| 43 |
+
msb += step;
|
| 44 |
+
else
|
| 45 |
+
msb -= step;
|
| 46 |
+
}
|
| 47 |
+
if (n >> msb)
|
| 48 |
+
msb++;
|
| 49 |
+
return msb;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
// Wrapper method to call auxiliary coarse frustum containment test.
|
| 53 |
+
// Mark all Gaussians that pass it.
|
| 54 |
+
__global__ void checkFrustum(int P,
|
| 55 |
+
const float* orig_points,
|
| 56 |
+
const float* viewmatrix,
|
| 57 |
+
bool* present)
|
| 58 |
+
{
|
| 59 |
+
auto idx = cg::this_grid().thread_rank();
|
| 60 |
+
if (idx >= P)
|
| 61 |
+
return;
|
| 62 |
+
|
| 63 |
+
float3 p_view;
|
| 64 |
+
present[idx] = in_frustum(idx, orig_points, viewmatrix, false, p_view);
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
__global__ void extractRaymapChannel(const float* raymap,
|
| 68 |
+
int W, int H,
|
| 69 |
+
float* channelmap, int c,
|
| 70 |
+
int N)
|
| 71 |
+
{
|
| 72 |
+
auto idx = cg::this_grid().thread_rank();
|
| 73 |
+
if (idx >= N || raymap == nullptr)
|
| 74 |
+
return;
|
| 75 |
+
int ray_idx = idx;
|
| 76 |
+
if (c == 1) {
|
| 77 |
+
int x = int(idx / H);
|
| 78 |
+
int y = idx - H * x;
|
| 79 |
+
ray_idx = y * W + x;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
channelmap[idx] = raymap[3 * ray_idx + c] / raymap[3 * ray_idx + 2];
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
// Generates one key/value pair for all Gaussian / tile overlaps.
|
| 86 |
+
// Run once per Gaussian (1:N mapping).
|
| 87 |
+
__global__ void duplicateWithKeys(
|
| 88 |
+
int P,
|
| 89 |
+
const float3* points_xyz,
|
| 90 |
+
const float3* w2o,
|
| 91 |
+
const float2* h_opacity,
|
| 92 |
+
const float* depths,
|
| 93 |
+
const uint32_t* offsets,
|
| 94 |
+
uint64_t* gaussian_keys_unsorted,
|
| 95 |
+
uint32_t* gaussian_values_unsorted,
|
| 96 |
+
int* radii,
|
| 97 |
+
const int4* pbf,
|
| 98 |
+
const float4* pbf_tan,
|
| 99 |
+
const float* xmap,
|
| 100 |
+
const float* ymap,
|
| 101 |
+
const int W, int H,
|
| 102 |
+
uint32_t* tiles_touched,
|
| 103 |
+
dim3 grid,
|
| 104 |
+
int mode)
|
| 105 |
+
{
|
| 106 |
+
auto idx = cg::this_grid().thread_rank();
|
| 107 |
+
if (idx >= P)
|
| 108 |
+
return;
|
| 109 |
+
|
| 110 |
+
// Generate no key/value pair for invisible Gaussians
|
| 111 |
+
if ((radii[idx] > 0) && (tiles_touched[idx] > 0))
|
| 112 |
+
{
|
| 113 |
+
const bool use_kb_sorted_tile_culling = false;
|
| 114 |
+
|
| 115 |
+
// Find this Gaussian's offset in buffer for writing keys/values.
|
| 116 |
+
uint32_t off = (idx == 0) ? 0 : offsets[idx - 1];
|
| 117 |
+
|
| 118 |
+
// Update unsorted arrays with Gaussian idx for every tile that Gaussian touches
|
| 119 |
+
|
| 120 |
+
// For each tile that the bounding rect overlaps, emit a
|
| 121 |
+
// key/value pair. The key is | tile ID | depth |,
|
| 122 |
+
// and the value is the ID of the Gaussian. Sorting the values
|
| 123 |
+
// with this key yields Gaussian IDs in a list, such that they
|
| 124 |
+
// are first sorted by tile and then by depth.
|
| 125 |
+
if ((xmap == nullptr) || (mode != 1) || !use_kb_sorted_tile_culling) {
|
| 126 |
+
uint2 rect_min, rect_max;
|
| 127 |
+
getRect2(pbf[idx], rect_min, rect_max, grid);
|
| 128 |
+
|
| 129 |
+
for (int y = rect_min.y; y < rect_max.y; y++)
|
| 130 |
+
{
|
| 131 |
+
for (int x = rect_min.x; x < rect_max.x; x++)
|
| 132 |
+
{
|
| 133 |
+
uint64_t key = y * grid.x + x;
|
| 134 |
+
key <<= 32;
|
| 135 |
+
key |= *((uint32_t*)&depths[idx]);
|
| 136 |
+
gaussian_keys_unsorted[off] = key;
|
| 137 |
+
gaussian_values_unsorted[off] = idx;
|
| 138 |
+
off++;
|
| 139 |
+
}
|
| 140 |
+
}
|
| 141 |
+
} else {
|
| 142 |
+
tiles_touched[idx] = duplicateToTilesTouched(
|
| 143 |
+
points_xyz[idx], w2o + 3 * idx, h_opacity[idx].y,
|
| 144 |
+
pbf[idx], pbf_tan[idx], grid,
|
| 145 |
+
W, H,
|
| 146 |
+
idx, off, depths[idx],
|
| 147 |
+
gaussian_keys_unsorted,
|
| 148 |
+
gaussian_values_unsorted,
|
| 149 |
+
xmap, ymap);
|
| 150 |
+
}
|
| 151 |
+
}
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
// Check keys to see if it is at the start/end of one tile's range in
|
| 155 |
+
// the full sorted list. If yes, write start/end of this tile.
|
| 156 |
+
// Run once per instanced (duplicated) Gaussian ID.
|
| 157 |
+
__global__ void identifyTileRanges(int L, uint64_t* point_list_keys, uint2* ranges)
|
| 158 |
+
{
|
| 159 |
+
auto idx = cg::this_grid().thread_rank();
|
| 160 |
+
if (idx >= L)
|
| 161 |
+
return;
|
| 162 |
+
|
| 163 |
+
// Read tile ID from key. Update start/end of tile range if at limit.
|
| 164 |
+
uint64_t key = point_list_keys[idx];
|
| 165 |
+
uint32_t currtile = key >> 32;
|
| 166 |
+
if (idx == 0)
|
| 167 |
+
ranges[currtile].x = 0;
|
| 168 |
+
else
|
| 169 |
+
{
|
| 170 |
+
uint32_t prevtile = point_list_keys[idx - 1] >> 32;
|
| 171 |
+
if (currtile != prevtile)
|
| 172 |
+
{
|
| 173 |
+
ranges[prevtile].y = idx;
|
| 174 |
+
ranges[currtile].x = idx;
|
| 175 |
+
}
|
| 176 |
+
}
|
| 177 |
+
if (idx == L - 1) ranges[currtile].y = L;
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
// ranges for each tile: Compute the length of each tile's range in the full sorted list
|
| 181 |
+
__global__ void computeRangeLengths(const uint2* ranges, int* range_len, int N)
|
| 182 |
+
{
|
| 183 |
+
auto idx = cg::this_grid().thread_rank();
|
| 184 |
+
if (idx >= N)
|
| 185 |
+
return;
|
| 186 |
+
range_len[idx] = ranges[idx].y - ranges[idx].x;
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
// Mark Gaussians as visible/invisible, based on view frustum testing
|
| 190 |
+
void CudaRasterizer::Rasterizer::markVisible(
|
| 191 |
+
int P,
|
| 192 |
+
float* means3D,
|
| 193 |
+
float* viewmatrix,
|
| 194 |
+
bool* present)
|
| 195 |
+
{
|
| 196 |
+
checkFrustum << <(P + 255) / 256, 256 >> > (
|
| 197 |
+
P,
|
| 198 |
+
means3D,
|
| 199 |
+
viewmatrix,
|
| 200 |
+
present);
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
CudaRasterizer::GeometryState CudaRasterizer::GeometryState::fromChunk(char*& chunk, size_t P)
|
| 204 |
+
{
|
| 205 |
+
GeometryState geom;
|
| 206 |
+
obtain(chunk, geom.depths, P, 128);
|
| 207 |
+
obtain(chunk, geom.clamped, P * 3, 128);
|
| 208 |
+
obtain(chunk, geom.internal_radii, P, 128);
|
| 209 |
+
obtain(chunk, geom.means3D_view, P, 128);
|
| 210 |
+
obtain(chunk, geom.h_opacity, P, 128);
|
| 211 |
+
obtain(chunk, geom.w2o, P * 3, 128);
|
| 212 |
+
obtain(chunk, geom.pbf, P * 4, 128);
|
| 213 |
+
obtain(chunk, geom.pbf_tan, P, 128);
|
| 214 |
+
obtain(chunk, geom.rgb, P * 3, 128);
|
| 215 |
+
obtain(chunk, geom.tiles_touched, P, 128);
|
| 216 |
+
cub::DeviceScan::InclusiveSum(nullptr, geom.scan_size, geom.tiles_touched, geom.tiles_touched, P);
|
| 217 |
+
obtain(chunk, geom.scanning_space, geom.scan_size, 128);
|
| 218 |
+
obtain(chunk, geom.point_offsets, P, 128);
|
| 219 |
+
return geom;
|
| 220 |
+
}
|
| 221 |
+
|
| 222 |
+
CudaRasterizer::ImageState CudaRasterizer::ImageState::fromChunk(char*& chunk, size_t N)
|
| 223 |
+
{
|
| 224 |
+
ImageState img;
|
| 225 |
+
obtain(chunk, img.accum_alpha, N, 128);
|
| 226 |
+
obtain(chunk, img.n_contrib, N, 128);
|
| 227 |
+
obtain(chunk, img.ranges, N, 128);
|
| 228 |
+
return img;
|
| 229 |
+
}
|
| 230 |
+
|
| 231 |
+
CudaRasterizer::BinningState CudaRasterizer::BinningState::fromChunk(char*& chunk, size_t P)
|
| 232 |
+
{
|
| 233 |
+
BinningState binning;
|
| 234 |
+
obtain(chunk, binning.point_list, P, 128);
|
| 235 |
+
obtain(chunk, binning.point_list_unsorted, P, 128);
|
| 236 |
+
obtain(chunk, binning.point_list_keys, P, 128);
|
| 237 |
+
obtain(chunk, binning.point_list_keys_unsorted, P, 128);
|
| 238 |
+
cub::DeviceRadixSort::SortPairs(
|
| 239 |
+
nullptr, binning.sorting_size,
|
| 240 |
+
binning.point_list_keys_unsorted, binning.point_list_keys,
|
| 241 |
+
binning.point_list_unsorted, binning.point_list, P);
|
| 242 |
+
obtain(chunk, binning.list_sorting_space, binning.sorting_size, 128);
|
| 243 |
+
return binning;
|
| 244 |
+
}
|
| 245 |
+
|
| 246 |
+
// Forward rendering procedure for differentiable rasterization
|
| 247 |
+
// of Gaussians.
|
| 248 |
+
int CudaRasterizer::Rasterizer::forward(
|
| 249 |
+
std::function<char* (size_t)> geometryBuffer,
|
| 250 |
+
std::function<char* (size_t)> binningBuffer,
|
| 251 |
+
std::function<char* (size_t)> imageBuffer,
|
| 252 |
+
const int P, int D, int M,
|
| 253 |
+
const float* background,
|
| 254 |
+
const int width, int height,
|
| 255 |
+
const float* means3D,
|
| 256 |
+
const float* shs,
|
| 257 |
+
const float* colors_precomp,
|
| 258 |
+
const float* opacities,
|
| 259 |
+
const float* scales,
|
| 260 |
+
const float scale_modifier,
|
| 261 |
+
const float* rotations,
|
| 262 |
+
const float* viewmatrix,
|
| 263 |
+
const float* mirror_transformed_tan_theta, const float* mirror_transformed_tan_phi,
|
| 264 |
+
const float* tan_theta, const float* tan_phi,
|
| 265 |
+
const float* cam_pos,
|
| 266 |
+
const float focal_x, float focal_y,
|
| 267 |
+
const float principal_x, float principal_y,
|
| 268 |
+
const float* distortion_coeffs,
|
| 269 |
+
const float* raymap,
|
| 270 |
+
float* xmap, float* ymap,
|
| 271 |
+
const float tan_fovx, float tan_fovy,
|
| 272 |
+
const bool prefiltered,
|
| 273 |
+
float* kernel_times,
|
| 274 |
+
float* out_color,
|
| 275 |
+
float* depth,
|
| 276 |
+
bool antialiasing,
|
| 277 |
+
const int mode,
|
| 278 |
+
int* radii,
|
| 279 |
+
int* range_len,
|
| 280 |
+
float near_threshold,
|
| 281 |
+
bool debug,
|
| 282 |
+
int asso_mode)
|
| 283 |
+
{
|
| 284 |
+
cudaEvent_t overallStart, overallStop;
|
| 285 |
+
cudaEvent_t preprocessStart, preprocessStop;
|
| 286 |
+
cudaEvent_t duplicateStart, duplicateStop;
|
| 287 |
+
cudaEvent_t sortStart, sortStop;
|
| 288 |
+
cudaEvent_t renderStart, renderStop;
|
| 289 |
+
cudaEventCreate(&overallStart);
|
| 290 |
+
cudaEventCreate(&overallStop);
|
| 291 |
+
cudaEventCreate(&preprocessStart);
|
| 292 |
+
cudaEventCreate(&preprocessStop);
|
| 293 |
+
cudaEventCreate(&duplicateStart);
|
| 294 |
+
cudaEventCreate(&duplicateStop);
|
| 295 |
+
cudaEventCreate(&sortStart);
|
| 296 |
+
cudaEventCreate(&sortStop);
|
| 297 |
+
cudaEventCreate(&renderStart);
|
| 298 |
+
cudaEventCreate(&renderStop);
|
| 299 |
+
float milliseconds_overall, milliseconds_preprocess, milliseconds_duplicate, milliseconds_sort, milliseconds_render;
|
| 300 |
+
|
| 301 |
+
cudaEventRecord(overallStart, 0);
|
| 302 |
+
|
| 303 |
+
size_t chunk_size = required<GeometryState>(P);
|
| 304 |
+
char* chunkptr = geometryBuffer(chunk_size);
|
| 305 |
+
GeometryState geomState = GeometryState::fromChunk(chunkptr, P);
|
| 306 |
+
|
| 307 |
+
if (radii == nullptr)
|
| 308 |
+
{
|
| 309 |
+
radii = geomState.internal_radii;
|
| 310 |
+
}
|
| 311 |
+
|
| 312 |
+
dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);
|
| 313 |
+
dim3 block(BLOCK_X, BLOCK_Y, 1);
|
| 314 |
+
|
| 315 |
+
// Dynamically resize image-based auxiliary buffers during training
|
| 316 |
+
size_t img_chunk_size = required<ImageState>(width * height);
|
| 317 |
+
char* img_chunkptr = imageBuffer(img_chunk_size);
|
| 318 |
+
ImageState imgState = ImageState::fromChunk(img_chunkptr, width * height);
|
| 319 |
+
|
| 320 |
+
if (NUM_CHANNELS != 3 && colors_precomp == nullptr)
|
| 321 |
+
{
|
| 322 |
+
throw std::runtime_error("For non-RGB, provide precomputed Gaussian colors!");
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
if ((mode == 1) && (raymap != nullptr)) {
|
| 326 |
+
extractRaymapChannel << <(width * height + 255) / 256, 256 >> > (
|
| 327 |
+
raymap,
|
| 328 |
+
width, height,
|
| 329 |
+
xmap, 0,
|
| 330 |
+
width * height);
|
| 331 |
+
CHECK_CUDA(, debug);
|
| 332 |
+
|
| 333 |
+
extractRaymapChannel << <(width * height + 255) / 256, 256 >> > (
|
| 334 |
+
raymap,
|
| 335 |
+
width, height,
|
| 336 |
+
ymap, 1,
|
| 337 |
+
width * height);
|
| 338 |
+
CHECK_CUDA(, debug);
|
| 339 |
+
}
|
| 340 |
+
|
| 341 |
+
// Run preprocessing per-Gaussian (transformation, bounding, conversion of SHs to RGB)
|
| 342 |
+
cudaEventRecord(preprocessStart, 0);
|
| 343 |
+
CHECK_CUDA(FORWARD::preprocess(
|
| 344 |
+
P, D, M,
|
| 345 |
+
means3D,
|
| 346 |
+
(glm::vec3*)scales,
|
| 347 |
+
scale_modifier,
|
| 348 |
+
(glm::vec4*)rotations,
|
| 349 |
+
opacities,
|
| 350 |
+
shs,
|
| 351 |
+
geomState.clamped,
|
| 352 |
+
colors_precomp,
|
| 353 |
+
viewmatrix,
|
| 354 |
+
mirror_transformed_tan_theta,
|
| 355 |
+
mirror_transformed_tan_phi,
|
| 356 |
+
(glm::vec3*)cam_pos,
|
| 357 |
+
width, height,
|
| 358 |
+
focal_x, focal_y,
|
| 359 |
+
principal_x, principal_y,
|
| 360 |
+
distortion_coeffs,
|
| 361 |
+
tan_fovx, tan_fovy,
|
| 362 |
+
radii,
|
| 363 |
+
geomState.pbf,
|
| 364 |
+
geomState.pbf_tan,
|
| 365 |
+
xmap, ymap,
|
| 366 |
+
geomState.means3D_view,
|
| 367 |
+
geomState.depths,
|
| 368 |
+
geomState.rgb,
|
| 369 |
+
geomState.h_opacity,
|
| 370 |
+
geomState.w2o,
|
| 371 |
+
tile_grid,
|
| 372 |
+
geomState.tiles_touched,
|
| 373 |
+
prefiltered,
|
| 374 |
+
antialiasing,
|
| 375 |
+
mode,
|
| 376 |
+
near_threshold,
|
| 377 |
+
asso_mode
|
| 378 |
+
), debug)
|
| 379 |
+
|
| 380 |
+
cudaEventRecord(preprocessStop, 0);
|
| 381 |
+
cudaEventSynchronize(preprocessStop);
|
| 382 |
+
cudaEventElapsedTime(&milliseconds_preprocess, preprocessStart, preprocessStop);
|
| 383 |
+
|
| 384 |
+
// Compute prefix sum over full list of touched tile counts by Gaussians
|
| 385 |
+
// E.g., [2, 3, 0, 2, 1] -> [2, 5, 5, 7, 8]
|
| 386 |
+
CHECK_CUDA(cub::DeviceScan::InclusiveSum(geomState.scanning_space, geomState.scan_size, geomState.tiles_touched, geomState.point_offsets, P), debug)
|
| 387 |
+
|
| 388 |
+
// Retrieve total number of Gaussian instances to launch and resize aux buffers
|
| 389 |
+
int num_rendered;
|
| 390 |
+
CHECK_CUDA(cudaMemcpy(&num_rendered, geomState.point_offsets + P - 1, sizeof(int), cudaMemcpyDeviceToHost), debug);
|
| 391 |
+
|
| 392 |
+
size_t binning_chunk_size = required<BinningState>(num_rendered);
|
| 393 |
+
char* binning_chunkptr = binningBuffer(binning_chunk_size);
|
| 394 |
+
BinningState binningState = BinningState::fromChunk(binning_chunkptr, num_rendered);
|
| 395 |
+
|
| 396 |
+
// For each instance to be rendered, produce adequate [ tile | depth ] key
|
| 397 |
+
// and corresponding dublicated Gaussian indices to be sorted
|
| 398 |
+
cudaEventRecord(duplicateStart, 0);
|
| 399 |
+
duplicateWithKeys << <(P + 255) / 256, 256 >> > (
|
| 400 |
+
P,
|
| 401 |
+
geomState.means3D_view,
|
| 402 |
+
geomState.w2o,
|
| 403 |
+
geomState.h_opacity,
|
| 404 |
+
geomState.depths,
|
| 405 |
+
geomState.point_offsets,
|
| 406 |
+
binningState.point_list_keys_unsorted,
|
| 407 |
+
binningState.point_list_unsorted,
|
| 408 |
+
radii,
|
| 409 |
+
(int4*) geomState.pbf,
|
| 410 |
+
geomState.pbf_tan,
|
| 411 |
+
xmap, ymap,
|
| 412 |
+
width, height,
|
| 413 |
+
geomState.tiles_touched,
|
| 414 |
+
tile_grid,
|
| 415 |
+
mode)
|
| 416 |
+
CHECK_CUDA(, debug)
|
| 417 |
+
cudaEventRecord(duplicateStop, 0);
|
| 418 |
+
cudaEventSynchronize(duplicateStop);
|
| 419 |
+
cudaEventElapsedTime(&milliseconds_duplicate, duplicateStart, duplicateStop);
|
| 420 |
+
|
| 421 |
+
int bit = getHigherMsb(tile_grid.x * tile_grid.y);
|
| 422 |
+
|
| 423 |
+
// Sort complete list of (duplicated) Gaussian indices by keys
|
| 424 |
+
cudaEventRecord(sortStart, 0);
|
| 425 |
+
CHECK_CUDA(cub::DeviceRadixSort::SortPairs(
|
| 426 |
+
binningState.list_sorting_space,
|
| 427 |
+
binningState.sorting_size,
|
| 428 |
+
binningState.point_list_keys_unsorted, binningState.point_list_keys,
|
| 429 |
+
binningState.point_list_unsorted, binningState.point_list,
|
| 430 |
+
num_rendered, 0, 32 + bit), debug)
|
| 431 |
+
cudaEventRecord(sortStop, 0);
|
| 432 |
+
cudaEventSynchronize(sortStop);
|
| 433 |
+
cudaEventElapsedTime(&milliseconds_sort, sortStart, sortStop);
|
| 434 |
+
|
| 435 |
+
CHECK_CUDA(cudaMemset(imgState.ranges, 0, tile_grid.x * tile_grid.y * sizeof(uint2)), debug);
|
| 436 |
+
|
| 437 |
+
// Identify start and end of per-tile workloads in sorted list
|
| 438 |
+
if (num_rendered > 0)
|
| 439 |
+
identifyTileRanges << <(num_rendered + 255) / 256, 256 >> > (
|
| 440 |
+
num_rendered,
|
| 441 |
+
binningState.point_list_keys,
|
| 442 |
+
imgState.ranges);
|
| 443 |
+
CHECK_CUDA(, debug)
|
| 444 |
+
|
| 445 |
+
// ranges for each tile
|
| 446 |
+
computeRangeLengths << <(tile_grid.x * tile_grid.y + 255) / 256, 256 >> > (
|
| 447 |
+
imgState.ranges,
|
| 448 |
+
range_len, // ranges for each tile
|
| 449 |
+
tile_grid.x * tile_grid.y);
|
| 450 |
+
CHECK_CUDA(, debug);
|
| 451 |
+
|
| 452 |
+
// Let each tile blend its range of Gaussians independently in parallel
|
| 453 |
+
const float* feature_ptr = colors_precomp != nullptr ? colors_precomp : geomState.rgb;
|
| 454 |
+
cudaEventRecord(renderStart, 0);
|
| 455 |
+
CHECK_CUDA(FORWARD::render(
|
| 456 |
+
tile_grid, block,
|
| 457 |
+
imgState.ranges,
|
| 458 |
+
binningState.point_list,
|
| 459 |
+
width, height,
|
| 460 |
+
mode,
|
| 461 |
+
focal_x, focal_y,
|
| 462 |
+
tan_theta, tan_phi,
|
| 463 |
+
raymap,
|
| 464 |
+
geomState.pbf_tan,
|
| 465 |
+
geomState.means3D_view,
|
| 466 |
+
feature_ptr,
|
| 467 |
+
geomState.h_opacity,
|
| 468 |
+
geomState.w2o,
|
| 469 |
+
imgState.accum_alpha,
|
| 470 |
+
imgState.n_contrib,
|
| 471 |
+
background,
|
| 472 |
+
out_color,
|
| 473 |
+
geomState.depths,
|
| 474 |
+
depth), debug)
|
| 475 |
+
|
| 476 |
+
cudaEventRecord(overallStop, 0);
|
| 477 |
+
cudaEventSynchronize(overallStop);
|
| 478 |
+
|
| 479 |
+
cudaEventElapsedTime(&milliseconds_render, renderStart, overallStop);
|
| 480 |
+
cudaEventElapsedTime(&milliseconds_overall, overallStart, overallStop);
|
| 481 |
+
kernel_times[0] = milliseconds_overall;
|
| 482 |
+
kernel_times[1] = milliseconds_preprocess;
|
| 483 |
+
kernel_times[2] = milliseconds_duplicate;
|
| 484 |
+
kernel_times[3] = milliseconds_sort;
|
| 485 |
+
kernel_times[4] = milliseconds_render;
|
| 486 |
+
|
| 487 |
+
cudaEventDestroy(overallStart);
|
| 488 |
+
cudaEventDestroy(overallStop);
|
| 489 |
+
|
| 490 |
+
cudaEventDestroy(preprocessStart);
|
| 491 |
+
cudaEventDestroy(preprocessStop);
|
| 492 |
+
|
| 493 |
+
cudaEventDestroy(duplicateStart);
|
| 494 |
+
cudaEventDestroy(duplicateStop);
|
| 495 |
+
|
| 496 |
+
cudaEventDestroy(sortStart);
|
| 497 |
+
cudaEventDestroy(sortStop);
|
| 498 |
+
|
| 499 |
+
cudaEventDestroy(renderStart);
|
| 500 |
+
cudaEventDestroy(renderStop);
|
| 501 |
+
|
| 502 |
+
return num_rendered;
|
| 503 |
+
}
|
| 504 |
+
|
| 505 |
+
// Produce necessary gradients for optimization, corresponding
|
| 506 |
+
// to forward render pass
|
| 507 |
+
void CudaRasterizer::Rasterizer::backward(
|
| 508 |
+
const int P, int D, int M, int R,
|
| 509 |
+
const float* background,
|
| 510 |
+
const int width, int height,
|
| 511 |
+
const float* tan_theta,
|
| 512 |
+
const float* tan_phi,
|
| 513 |
+
const float* raymap,
|
| 514 |
+
const int mode,
|
| 515 |
+
const float* means3D,
|
| 516 |
+
const float* shs,
|
| 517 |
+
const float* colors_precomp,
|
| 518 |
+
const float* opacities,
|
| 519 |
+
const float* scales,
|
| 520 |
+
const float scale_modifier,
|
| 521 |
+
const float* rotations,
|
| 522 |
+
const float* viewmatrix,
|
| 523 |
+
const float* campos,
|
| 524 |
+
const float tan_fovx, float tan_fovy,
|
| 525 |
+
const int* radii,
|
| 526 |
+
char* geom_buffer,
|
| 527 |
+
char* binning_buffer,
|
| 528 |
+
char* img_buffer,
|
| 529 |
+
const float* dL_dpix,
|
| 530 |
+
const float* dL_invdepths,
|
| 531 |
+
float* dL_dmean2D,
|
| 532 |
+
float* dL_dopacity,
|
| 533 |
+
float* dL_dcolor,
|
| 534 |
+
float* dL_dinvdepth,
|
| 535 |
+
float* dL_dmean3D,
|
| 536 |
+
float* dL_dsh,
|
| 537 |
+
float* dL_dscale,
|
| 538 |
+
float* dL_drot,
|
| 539 |
+
float* dL_dsigmaInv,
|
| 540 |
+
bool antialiasing,
|
| 541 |
+
bool debug)
|
| 542 |
+
{
|
| 543 |
+
GeometryState geomState = GeometryState::fromChunk(geom_buffer, P);
|
| 544 |
+
BinningState binningState = BinningState::fromChunk(binning_buffer, R);
|
| 545 |
+
ImageState imgState = ImageState::fromChunk(img_buffer, width * height);
|
| 546 |
+
|
| 547 |
+
if (radii == nullptr)
|
| 548 |
+
{
|
| 549 |
+
radii = geomState.internal_radii;
|
| 550 |
+
}
|
| 551 |
+
|
| 552 |
+
const float focal_y = height / (2.0f * tan_fovy);
|
| 553 |
+
const float focal_x = width / (2.0f * tan_fovx);
|
| 554 |
+
|
| 555 |
+
const dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);
|
| 556 |
+
const dim3 block(BLOCK_X, BLOCK_Y, 1);
|
| 557 |
+
|
| 558 |
+
// Compute loss gradients w.r.t. 2D mean position, conic matrix,
|
| 559 |
+
// opacity and RGB of Gaussians from per-pixel loss gradients.
|
| 560 |
+
// If we were given precomputed colors and not SHs, use them.
|
| 561 |
+
const float* color_ptr = (colors_precomp != nullptr) ? colors_precomp : geomState.rgb;
|
| 562 |
+
CHECK_CUDA(BACKWARD::render(
|
| 563 |
+
tile_grid,
|
| 564 |
+
block,
|
| 565 |
+
imgState.ranges,
|
| 566 |
+
binningState.point_list,
|
| 567 |
+
width, height,
|
| 568 |
+
tan_theta, tan_phi,
|
| 569 |
+
raymap,
|
| 570 |
+
focal_x, focal_y,
|
| 571 |
+
mode,
|
| 572 |
+
background,
|
| 573 |
+
geomState.means3D_view,
|
| 574 |
+
geomState.h_opacity,
|
| 575 |
+
geomState.w2o,
|
| 576 |
+
color_ptr,
|
| 577 |
+
geomState.depths,
|
| 578 |
+
imgState.accum_alpha,
|
| 579 |
+
imgState.n_contrib,
|
| 580 |
+
dL_dpix,
|
| 581 |
+
dL_invdepths,
|
| 582 |
+
(float3*)dL_dmean2D,
|
| 583 |
+
(glm::vec3*)dL_dmean3D,
|
| 584 |
+
dL_dopacity,
|
| 585 |
+
dL_dcolor,
|
| 586 |
+
dL_dinvdepth,
|
| 587 |
+
(glm::vec3*)dL_dsigmaInv), debug);
|
| 588 |
+
|
| 589 |
+
CHECK_CUDA(BACKWARD::preprocess(P, D, M,
|
| 590 |
+
(float3*)means3D,
|
| 591 |
+
geomState.means3D_view,
|
| 592 |
+
geomState.depths,
|
| 593 |
+
radii,
|
| 594 |
+
shs,
|
| 595 |
+
geomState.clamped,
|
| 596 |
+
opacities,
|
| 597 |
+
(glm::vec3*)scales,
|
| 598 |
+
(glm::vec4*)rotations,
|
| 599 |
+
scale_modifier,
|
| 600 |
+
geomState.h_opacity,
|
| 601 |
+
geomState.w2o,
|
| 602 |
+
viewmatrix,
|
| 603 |
+
focal_x, focal_y,
|
| 604 |
+
tan_fovx, tan_fovy,
|
| 605 |
+
(glm::vec3*)campos,
|
| 606 |
+
(float3*)dL_dmean2D,
|
| 607 |
+
dL_dinvdepth,
|
| 608 |
+
dL_dopacity,
|
| 609 |
+
(glm::vec3*)dL_dmean3D,
|
| 610 |
+
dL_dcolor,
|
| 611 |
+
dL_dsh,
|
| 612 |
+
(glm::vec3*)dL_dscale,
|
| 613 |
+
(glm::vec4*)dL_drot,
|
| 614 |
+
(glm::vec3*)dL_dsigmaInv,
|
| 615 |
+
antialiasing), debug);
|
| 616 |
+
}
|
3dgeer/submodules/geer-rasterizer/cuda_rasterizer/rasterizer_impl.h
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#pragma once
|
| 13 |
+
|
| 14 |
+
#include <iostream>
|
| 15 |
+
#include <vector>
|
| 16 |
+
#include "rasterizer.h"
|
| 17 |
+
#include <cuda_runtime_api.h>
|
| 18 |
+
|
| 19 |
+
namespace CudaRasterizer
|
| 20 |
+
{
|
| 21 |
+
template <typename T>
|
| 22 |
+
static void obtain(char*& chunk, T*& ptr, std::size_t count, std::size_t alignment)
|
| 23 |
+
{
|
| 24 |
+
std::size_t offset = (reinterpret_cast<std::uintptr_t>(chunk) + alignment - 1) & ~(alignment - 1);
|
| 25 |
+
ptr = reinterpret_cast<T*>(offset);
|
| 26 |
+
chunk = reinterpret_cast<char*>(ptr + count);
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
struct GeometryState
|
| 30 |
+
{
|
| 31 |
+
size_t scan_size;
|
| 32 |
+
float* depths; // Euclidean distance from camera to each Gaussian centre (used for depth-sorted blending)
|
| 33 |
+
char* scanning_space;
|
| 34 |
+
bool* clamped; // Per-channel SH clamping flags (for backward pass)
|
| 35 |
+
int* pbf; // Pixel-space PBF of each Gaussian: [x_min, x_max, y_min, y_max]
|
| 36 |
+
float4* pbf_tan; // PBF (Particle Bounding Frustum) in ray-direction tangent space {tan_theta_min, tan_theta_max, tan_phi_min, tan_phi_max}
|
| 37 |
+
int* internal_radii;
|
| 38 |
+
float3* means3D_view; // Gaussian centre positions in view/camera space
|
| 39 |
+
float2* h_opacity; // Packed {x=antialiasing variance h_var, y=antialiasing-scaled opacity}
|
| 40 |
+
float3* w2o; // World-to-object (canonical) matrix rows: 3 float3 per Gaussian = Σ^{-1/2}R_view^T
|
| 41 |
+
float* rgb; // Pre-computed RGB colors (from SH evaluation)
|
| 42 |
+
uint32_t* point_offsets;
|
| 43 |
+
uint32_t* tiles_touched;
|
| 44 |
+
|
| 45 |
+
static GeometryState fromChunk(char*& chunk, size_t P);
|
| 46 |
+
};
|
| 47 |
+
|
| 48 |
+
struct ImageState
|
| 49 |
+
{
|
| 50 |
+
uint2* ranges; // Per-tile [start, end) range in the sorted Gaussian list
|
| 51 |
+
uint32_t* n_contrib; // Per-pixel: index of the last contributing Gaussian (for backward)
|
| 52 |
+
float* accum_alpha; // Per-pixel accumulated transmittance T (= product of (1-alpha) terms)
|
| 53 |
+
|
| 54 |
+
static ImageState fromChunk(char*& chunk, size_t N);
|
| 55 |
+
};
|
| 56 |
+
|
| 57 |
+
struct BinningState
|
| 58 |
+
{
|
| 59 |
+
size_t sorting_size;
|
| 60 |
+
uint64_t* point_list_keys_unsorted; // Unsorted keys: upper 32 bits = tile ID, lower 32 bits = depth bits
|
| 61 |
+
uint64_t* point_list_keys; // Sorted keys
|
| 62 |
+
uint32_t* point_list_unsorted; // Unsorted Gaussian indices
|
| 63 |
+
uint32_t* point_list; // Sorted Gaussian indices (tile-then-depth order)
|
| 64 |
+
char* list_sorting_space;
|
| 65 |
+
|
| 66 |
+
static BinningState fromChunk(char*& chunk, size_t P);
|
| 67 |
+
};
|
| 68 |
+
|
| 69 |
+
template<typename T>
|
| 70 |
+
size_t required(size_t P)
|
| 71 |
+
{
|
| 72 |
+
char* size = nullptr;
|
| 73 |
+
T::fromChunk(size, P);
|
| 74 |
+
return ((size_t)size) + 128;
|
| 75 |
+
}
|
| 76 |
+
};
|
3dgeer/submodules/geer-rasterizer/diff_gaussian_rasterization/__init__.py
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#
|
| 2 |
+
# Copyright (C) 2023, Inria
|
| 3 |
+
# GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
# All rights reserved.
|
| 5 |
+
#
|
| 6 |
+
# This software is free for non-commercial, research and evaluation use
|
| 7 |
+
# under the terms of the LICENSE.md file.
|
| 8 |
+
#
|
| 9 |
+
# For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
#
|
| 11 |
+
|
| 12 |
+
from typing import NamedTuple
|
| 13 |
+
import torch.nn as nn
|
| 14 |
+
import torch
|
| 15 |
+
from . import _C
|
| 16 |
+
|
| 17 |
+
def cpu_deep_copy_tuple(input_tuple):
|
| 18 |
+
copied_tensors = [item.cpu().clone() if isinstance(item, torch.Tensor) else item for item in input_tuple]
|
| 19 |
+
return tuple(copied_tensors)
|
| 20 |
+
|
| 21 |
+
def rasterize_gaussians(
|
| 22 |
+
means3D,
|
| 23 |
+
means2D,
|
| 24 |
+
sh,
|
| 25 |
+
colors_precomp,
|
| 26 |
+
opacities,
|
| 27 |
+
scales,
|
| 28 |
+
rotations,
|
| 29 |
+
raster_settings,
|
| 30 |
+
):
|
| 31 |
+
return _RasterizeGaussians.apply(
|
| 32 |
+
means3D,
|
| 33 |
+
means2D,
|
| 34 |
+
sh,
|
| 35 |
+
colors_precomp,
|
| 36 |
+
opacities,
|
| 37 |
+
scales,
|
| 38 |
+
rotations,
|
| 39 |
+
raster_settings,
|
| 40 |
+
)
|
| 41 |
+
|
| 42 |
+
class _RasterizeGaussians(torch.autograd.Function):
|
| 43 |
+
@staticmethod
|
| 44 |
+
def forward(
|
| 45 |
+
ctx,
|
| 46 |
+
means3D,
|
| 47 |
+
means2D,
|
| 48 |
+
sh,
|
| 49 |
+
colors_precomp,
|
| 50 |
+
opacities,
|
| 51 |
+
scales,
|
| 52 |
+
rotations,
|
| 53 |
+
raster_settings,
|
| 54 |
+
):
|
| 55 |
+
"""Forward pass: rasterize 3D Gaussians into an image using the GEER algorithm.
|
| 56 |
+
|
| 57 |
+
Returns (color [C,H,W], radii [P], invdepth [1,H,W], kernel_times [5], tile_ranges [T]).
|
| 58 |
+
"""
|
| 59 |
+
|
| 60 |
+
# Restructure arguments the way that the C++ lib expects them
|
| 61 |
+
args = (
|
| 62 |
+
raster_settings.bg,
|
| 63 |
+
means3D,
|
| 64 |
+
colors_precomp,
|
| 65 |
+
opacities,
|
| 66 |
+
scales,
|
| 67 |
+
rotations,
|
| 68 |
+
raster_settings.scale_modifier,
|
| 69 |
+
raster_settings.viewmatrix,
|
| 70 |
+
raster_settings.mirror_transformed_tan_theta,
|
| 71 |
+
raster_settings.mirror_transformed_tan_phi,
|
| 72 |
+
raster_settings.tan_theta,
|
| 73 |
+
raster_settings.tan_phi,
|
| 74 |
+
raster_settings.focal_x, raster_settings.focal_y,
|
| 75 |
+
raster_settings.principal_x, raster_settings.principal_y,
|
| 76 |
+
raster_settings.distortion_coeffs,
|
| 77 |
+
raster_settings.raymap,
|
| 78 |
+
raster_settings.tanfovx,
|
| 79 |
+
raster_settings.tanfovy,
|
| 80 |
+
raster_settings.image_height,
|
| 81 |
+
raster_settings.image_width,
|
| 82 |
+
sh,
|
| 83 |
+
raster_settings.sh_degree,
|
| 84 |
+
raster_settings.campos,
|
| 85 |
+
raster_settings.prefiltered,
|
| 86 |
+
raster_settings.antialiasing,
|
| 87 |
+
raster_settings.render_mode,
|
| 88 |
+
raster_settings.near_threshold,
|
| 89 |
+
raster_settings.debug,
|
| 90 |
+
raster_settings.asso_mode
|
| 91 |
+
)
|
| 92 |
+
|
| 93 |
+
# Invoke C++/CUDA rasterizer
|
| 94 |
+
num_rendered, color, radii, kernel_times, ranges, geomBuffer, binningBuffer, imgBuffer, invdepths = _C.rasterize_gaussians(*args) # ranges for each tile
|
| 95 |
+
|
| 96 |
+
# Keep relevant tensors for backward
|
| 97 |
+
ctx.raster_settings = raster_settings
|
| 98 |
+
ctx.num_rendered = num_rendered
|
| 99 |
+
ctx.save_for_backward(colors_precomp, means3D, scales, rotations, radii, sh, opacities, geomBuffer, binningBuffer, imgBuffer)
|
| 100 |
+
return color, radii, invdepths, kernel_times, ranges
|
| 101 |
+
|
| 102 |
+
@staticmethod
|
| 103 |
+
def backward(ctx, grad_out_color, grad_radii, grad_out_depth, grad_kernel_times, grad_ranges):
|
| 104 |
+
"""Backward pass: propagate gradients from pixel loss to Gaussian parameters.
|
| 105 |
+
|
| 106 |
+
Inputs grad_out_color [C,H,W] and grad_out_depth [1,H,W]; grad_radii,
|
| 107 |
+
grad_kernel_times, and grad_ranges are unused (non-differentiable outputs).
|
| 108 |
+
Returns gradients for (means3D, means2D, sh, colors_precomp, opacities, scales, rotations, None).
|
| 109 |
+
"""
|
| 110 |
+
|
| 111 |
+
# Restore necessary values from context
|
| 112 |
+
num_rendered = ctx.num_rendered
|
| 113 |
+
raster_settings = ctx.raster_settings
|
| 114 |
+
colors_precomp, means3D, scales, rotations, radii, sh, opacities, geomBuffer, binningBuffer, imgBuffer = ctx.saved_tensors
|
| 115 |
+
|
| 116 |
+
# Restructure args as C++ method expects them
|
| 117 |
+
args = (raster_settings.bg,
|
| 118 |
+
means3D,
|
| 119 |
+
radii,
|
| 120 |
+
colors_precomp,
|
| 121 |
+
opacities,
|
| 122 |
+
scales,
|
| 123 |
+
rotations,
|
| 124 |
+
raster_settings.scale_modifier,
|
| 125 |
+
raster_settings.viewmatrix,
|
| 126 |
+
raster_settings.tan_theta,
|
| 127 |
+
raster_settings.tan_phi,
|
| 128 |
+
raster_settings.raymap,
|
| 129 |
+
raster_settings.render_mode,
|
| 130 |
+
raster_settings.tanfovx,
|
| 131 |
+
raster_settings.tanfovy,
|
| 132 |
+
grad_out_color,
|
| 133 |
+
grad_out_depth,
|
| 134 |
+
sh,
|
| 135 |
+
raster_settings.sh_degree,
|
| 136 |
+
raster_settings.campos,
|
| 137 |
+
geomBuffer,
|
| 138 |
+
num_rendered,
|
| 139 |
+
binningBuffer,
|
| 140 |
+
imgBuffer,
|
| 141 |
+
raster_settings.antialiasing,
|
| 142 |
+
raster_settings.debug)
|
| 143 |
+
|
| 144 |
+
# Compute gradients for relevant tensors by invoking backward method
|
| 145 |
+
grad_means2D, grad_colors_precomp, grad_opacities, grad_means3D, grad_sh, grad_scales, grad_rotations = _C.rasterize_gaussians_backward(*args)
|
| 146 |
+
|
| 147 |
+
grads = (
|
| 148 |
+
grad_means3D,
|
| 149 |
+
grad_means2D,
|
| 150 |
+
grad_sh,
|
| 151 |
+
grad_colors_precomp,
|
| 152 |
+
grad_opacities,
|
| 153 |
+
grad_scales,
|
| 154 |
+
grad_rotations,
|
| 155 |
+
None,
|
| 156 |
+
)
|
| 157 |
+
|
| 158 |
+
return grads
|
| 159 |
+
|
| 160 |
+
class GaussianRasterizationSettings(NamedTuple):
|
| 161 |
+
"""
|
| 162 |
+
Settings passed to the CUDA rasterizer for each forward/backward call.
|
| 163 |
+
"""
|
| 164 |
+
image_height: int
|
| 165 |
+
image_width: int
|
| 166 |
+
tanfovx: float
|
| 167 |
+
tanfovy: float
|
| 168 |
+
bg: torch.Tensor
|
| 169 |
+
scale_modifier: float
|
| 170 |
+
viewmatrix: torch.Tensor
|
| 171 |
+
# BEAP ray-direction reference arrays (sorted, used for PBF→pixel mapping in BEAP mode)
|
| 172 |
+
mirror_transformed_tan_theta: torch.Tensor # 1-D tensor of tan(θ) values along the horizontal axis
|
| 173 |
+
mirror_transformed_tan_phi: torch.Tensor # 1-D tensor of tan(φ) values along the vertical axis
|
| 174 |
+
# Per-pixel ray direction tangents (BEAP mode: 1-D sorted grids; KB mode: unused)
|
| 175 |
+
tan_theta: torch.Tensor # Horizontal ray tangents
|
| 176 |
+
tan_phi: torch.Tensor # Vertical ray tangents
|
| 177 |
+
# KB / EQ fisheye intrinsics (only used when render_model==1)
|
| 178 |
+
focal_x: float # Horizontal focal length (pixels)
|
| 179 |
+
focal_y: float # Vertical focal length (pixels)
|
| 180 |
+
principal_x: float # Horizontal principal point (pixels)
|
| 181 |
+
principal_y: float # Vertical principal point (pixels)
|
| 182 |
+
distortion_coeffs: torch.Tensor # KB polynomial distortion coefficients [k1, k2, k3, k4]
|
| 183 |
+
raymap: torch.Tensor # [H, W, 3] per-pixel ray direction map (used in KB/EQ mode)
|
| 184 |
+
sh_degree: int
|
| 185 |
+
campos: torch.Tensor # Camera centre in world space [3]
|
| 186 |
+
prefiltered: bool
|
| 187 |
+
debug: bool
|
| 188 |
+
antialiasing: bool
|
| 189 |
+
render_mode: int
|
| 190 |
+
near_threshold: float
|
| 191 |
+
asso_mode: int
|
| 192 |
+
|
| 193 |
+
class GaussianRasterizer(nn.Module):
|
| 194 |
+
def __init__(self, raster_settings):
|
| 195 |
+
super().__init__()
|
| 196 |
+
self.raster_settings = raster_settings
|
| 197 |
+
|
| 198 |
+
def markVisible(self, positions):
|
| 199 |
+
# Mark visible points (based on frustum culling for camera) with a boolean
|
| 200 |
+
with torch.no_grad():
|
| 201 |
+
raster_settings = self.raster_settings
|
| 202 |
+
visible = _C.mark_visible(
|
| 203 |
+
positions,
|
| 204 |
+
raster_settings.viewmatrix)
|
| 205 |
+
|
| 206 |
+
return visible
|
| 207 |
+
|
| 208 |
+
def forward(self, means3D, means2D, opacities, shs = None, colors_precomp = None, scales = None, rotations = None, cov3D_precomp = None):
|
| 209 |
+
|
| 210 |
+
raster_settings = self.raster_settings
|
| 211 |
+
|
| 212 |
+
if (shs is None and colors_precomp is None) or (shs is not None and colors_precomp is not None):
|
| 213 |
+
raise Exception('Please provide excatly one of either SHs or precomputed colors!')
|
| 214 |
+
|
| 215 |
+
if ((scales is None or rotations is None) and cov3D_precomp is None) or ((scales is not None or rotations is not None) and cov3D_precomp is not None):
|
| 216 |
+
raise Exception('Please provide exactly one of either scale/rotation pair or precomputed 3D covariance!')
|
| 217 |
+
|
| 218 |
+
if shs is None:
|
| 219 |
+
shs = torch.Tensor([])
|
| 220 |
+
if colors_precomp is None:
|
| 221 |
+
colors_precomp = torch.Tensor([])
|
| 222 |
+
|
| 223 |
+
if scales is None:
|
| 224 |
+
scales = torch.Tensor([])
|
| 225 |
+
if rotations is None:
|
| 226 |
+
rotations = torch.Tensor([])
|
| 227 |
+
|
| 228 |
+
# Invoke C++/CUDA rasterization routine
|
| 229 |
+
return rasterize_gaussians(
|
| 230 |
+
means3D,
|
| 231 |
+
means2D,
|
| 232 |
+
shs,
|
| 233 |
+
colors_precomp,
|
| 234 |
+
opacities,
|
| 235 |
+
scales,
|
| 236 |
+
rotations,
|
| 237 |
+
raster_settings,
|
| 238 |
+
)
|
| 239 |
+
|
3dgeer/submodules/geer-rasterizer/ext.cpp
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#include <torch/extension.h>
|
| 13 |
+
#include "rasterize_points.h"
|
| 14 |
+
|
| 15 |
+
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
|
| 16 |
+
m.def("rasterize_gaussians", &RasterizeGaussiansCUDA);
|
| 17 |
+
m.def("rasterize_gaussians_backward", &RasterizeGaussiansBackwardCUDA);
|
| 18 |
+
m.def("mark_visible", &markVisible);
|
| 19 |
+
}
|
3dgeer/submodules/geer-rasterizer/rasterize_points.cu
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#include <math.h>
|
| 13 |
+
#include <torch/extension.h>
|
| 14 |
+
#include <cstdio>
|
| 15 |
+
#include <sstream>
|
| 16 |
+
#include <iostream>
|
| 17 |
+
#include <tuple>
|
| 18 |
+
#include <stdio.h>
|
| 19 |
+
#include <cuda_runtime_api.h>
|
| 20 |
+
#include <memory>
|
| 21 |
+
#include "cuda_rasterizer/config.h"
|
| 22 |
+
#include "cuda_rasterizer/rasterizer.h"
|
| 23 |
+
#include <fstream>
|
| 24 |
+
#include <string>
|
| 25 |
+
#include <functional>
|
| 26 |
+
|
| 27 |
+
std::function<char*(size_t N)> resizeFunctional(torch::Tensor& t) {
|
| 28 |
+
auto lambda = [&t](size_t N) {
|
| 29 |
+
t.resize_({(long long)N});
|
| 30 |
+
return reinterpret_cast<char*>(t.contiguous().data_ptr());
|
| 31 |
+
};
|
| 32 |
+
return lambda;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
std::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
|
| 36 |
+
RasterizeGaussiansCUDA(
|
| 37 |
+
const torch::Tensor& background,
|
| 38 |
+
const torch::Tensor& means3D,
|
| 39 |
+
const torch::Tensor& colors,
|
| 40 |
+
const torch::Tensor& opacity,
|
| 41 |
+
const torch::Tensor& scales,
|
| 42 |
+
const torch::Tensor& rotations,
|
| 43 |
+
const float scale_modifier,
|
| 44 |
+
const torch::Tensor& viewmatrix,
|
| 45 |
+
const torch::Tensor& mirror_transformed_tan_theta,
|
| 46 |
+
const torch::Tensor& mirror_transformed_tan_phi,
|
| 47 |
+
const torch::Tensor& tan_theta,
|
| 48 |
+
const torch::Tensor& tan_phi,
|
| 49 |
+
const float focal_x, float focal_y,
|
| 50 |
+
const float principal_x, float principal_y,
|
| 51 |
+
const torch::Tensor& distortion_coeffs,
|
| 52 |
+
const torch::Tensor& raymap,
|
| 53 |
+
const float tan_fovx,
|
| 54 |
+
const float tan_fovy,
|
| 55 |
+
const int image_height,
|
| 56 |
+
const int image_width,
|
| 57 |
+
const torch::Tensor& sh,
|
| 58 |
+
const int degree,
|
| 59 |
+
const torch::Tensor& campos,
|
| 60 |
+
const bool prefiltered,
|
| 61 |
+
const bool antialiasing,
|
| 62 |
+
const int mode,
|
| 63 |
+
const float near_threshold,
|
| 64 |
+
const bool debug,
|
| 65 |
+
const int asso_mode)
|
| 66 |
+
{
|
| 67 |
+
if (means3D.ndimension() != 2 || means3D.size(1) != 3) {
|
| 68 |
+
AT_ERROR("means3D must have dimensions (num_points, 3)");
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
const int P = means3D.size(0);
|
| 72 |
+
const int H = image_height;
|
| 73 |
+
const int W = image_width;
|
| 74 |
+
|
| 75 |
+
auto int_opts = means3D.options().dtype(torch::kInt32);
|
| 76 |
+
auto float_opts = means3D.options().dtype(torch::kFloat32);
|
| 77 |
+
|
| 78 |
+
torch::Tensor kernel_times = torch::full({5}, 0.0, float_opts.device(torch::kCPU));
|
| 79 |
+
torch::Tensor out_color = torch::full({NUM_CHANNELS, H, W}, 0.0, float_opts);
|
| 80 |
+
torch::Tensor out_invdepth = torch::full({0, H, W}, 0.0, float_opts);
|
| 81 |
+
float* out_invdepthptr = nullptr;
|
| 82 |
+
|
| 83 |
+
out_invdepth = torch::full({1, H, W}, 0.0, float_opts).contiguous();
|
| 84 |
+
out_invdepthptr = out_invdepth.data<float>();
|
| 85 |
+
|
| 86 |
+
torch::Tensor radii = torch::full({P}, 0, means3D.options().dtype(torch::kInt32));
|
| 87 |
+
|
| 88 |
+
// ranges for each tile
|
| 89 |
+
dim3 tile_grid((image_width + BLOCK_X - 1) / BLOCK_X, (image_height + BLOCK_Y - 1) / BLOCK_Y, 1);
|
| 90 |
+
torch::Tensor range_len = torch::empty({tile_grid.x * tile_grid.y}, means3D.options().dtype(torch::kInt32));
|
| 91 |
+
|
| 92 |
+
torch::Tensor xmap = torch::empty({image_width * image_height}, raymap.options().dtype(torch::kFloat32));
|
| 93 |
+
torch::Tensor ymap = torch::empty({image_width * image_height}, raymap.options().dtype(torch::kFloat32));
|
| 94 |
+
|
| 95 |
+
torch::Device device(torch::kCUDA);
|
| 96 |
+
torch::TensorOptions options(torch::kByte);
|
| 97 |
+
torch::Tensor geomBuffer = torch::empty({0}, options.device(device));
|
| 98 |
+
torch::Tensor binningBuffer = torch::empty({0}, options.device(device));
|
| 99 |
+
torch::Tensor imgBuffer = torch::empty({0}, options.device(device));
|
| 100 |
+
std::function<char*(size_t)> geomFunc = resizeFunctional(geomBuffer);
|
| 101 |
+
std::function<char*(size_t)> binningFunc = resizeFunctional(binningBuffer);
|
| 102 |
+
std::function<char*(size_t)> imgFunc = resizeFunctional(imgBuffer);
|
| 103 |
+
|
| 104 |
+
int rendered = 0;
|
| 105 |
+
if(P != 0)
|
| 106 |
+
{
|
| 107 |
+
int M = 0;
|
| 108 |
+
if(sh.size(0) != 0)
|
| 109 |
+
{
|
| 110 |
+
M = sh.size(1);
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
rendered = CudaRasterizer::Rasterizer::forward(
|
| 114 |
+
geomFunc,
|
| 115 |
+
binningFunc,
|
| 116 |
+
imgFunc,
|
| 117 |
+
P, degree, M,
|
| 118 |
+
background.contiguous().data<float>(),
|
| 119 |
+
W, H,
|
| 120 |
+
means3D.contiguous().data<float>(),
|
| 121 |
+
sh.contiguous().data_ptr<float>(),
|
| 122 |
+
colors.contiguous().data<float>(),
|
| 123 |
+
opacity.contiguous().data<float>(),
|
| 124 |
+
scales.contiguous().data_ptr<float>(),
|
| 125 |
+
scale_modifier,
|
| 126 |
+
rotations.contiguous().data_ptr<float>(),
|
| 127 |
+
viewmatrix.contiguous().data<float>(),
|
| 128 |
+
mirror_transformed_tan_theta.contiguous().data<float>(),
|
| 129 |
+
mirror_transformed_tan_phi.contiguous().data<float>(),
|
| 130 |
+
tan_theta.contiguous().data<float>(),
|
| 131 |
+
tan_phi.contiguous().data<float>(),
|
| 132 |
+
campos.contiguous().data<float>(),
|
| 133 |
+
focal_x, focal_y,
|
| 134 |
+
principal_x, principal_y,
|
| 135 |
+
distortion_coeffs.contiguous().data<float>(),
|
| 136 |
+
raymap.contiguous().data<float>(),
|
| 137 |
+
xmap.contiguous().data<float>(),
|
| 138 |
+
ymap.contiguous().data<float>(),
|
| 139 |
+
tan_fovx,
|
| 140 |
+
tan_fovy,
|
| 141 |
+
prefiltered,
|
| 142 |
+
kernel_times.contiguous().data<float>(),
|
| 143 |
+
out_color.contiguous().data<float>(),
|
| 144 |
+
out_invdepthptr,
|
| 145 |
+
antialiasing,
|
| 146 |
+
mode,
|
| 147 |
+
radii.contiguous().data<int>(),
|
| 148 |
+
range_len.contiguous().data<int>(), // ranges for each tile
|
| 149 |
+
near_threshold,
|
| 150 |
+
debug,
|
| 151 |
+
asso_mode);
|
| 152 |
+
}
|
| 153 |
+
return std::make_tuple(rendered, out_color, radii, kernel_times, range_len, geomBuffer, binningBuffer, imgBuffer, out_invdepth);
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
std::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
|
| 157 |
+
RasterizeGaussiansBackwardCUDA(
|
| 158 |
+
const torch::Tensor& background,
|
| 159 |
+
const torch::Tensor& means3D,
|
| 160 |
+
const torch::Tensor& radii,
|
| 161 |
+
const torch::Tensor& colors,
|
| 162 |
+
const torch::Tensor& opacities,
|
| 163 |
+
const torch::Tensor& scales,
|
| 164 |
+
const torch::Tensor& rotations,
|
| 165 |
+
const float scale_modifier,
|
| 166 |
+
const torch::Tensor& viewmatrix,
|
| 167 |
+
const torch::Tensor& tan_theta,
|
| 168 |
+
const torch::Tensor& tan_phi,
|
| 169 |
+
const torch::Tensor& raymap,
|
| 170 |
+
const int mode,
|
| 171 |
+
const float tan_fovx,
|
| 172 |
+
const float tan_fovy,
|
| 173 |
+
const torch::Tensor& dL_dout_color,
|
| 174 |
+
const torch::Tensor& dL_dout_invdepth,
|
| 175 |
+
const torch::Tensor& sh,
|
| 176 |
+
const int degree,
|
| 177 |
+
const torch::Tensor& campos,
|
| 178 |
+
const torch::Tensor& geomBuffer,
|
| 179 |
+
const int R,
|
| 180 |
+
const torch::Tensor& binningBuffer,
|
| 181 |
+
const torch::Tensor& imageBuffer,
|
| 182 |
+
const bool antialiasing,
|
| 183 |
+
const bool debug)
|
| 184 |
+
{
|
| 185 |
+
const int P = means3D.size(0);
|
| 186 |
+
const int H = dL_dout_color.size(1);
|
| 187 |
+
const int W = dL_dout_color.size(2);
|
| 188 |
+
|
| 189 |
+
int M = 0;
|
| 190 |
+
if(sh.size(0) != 0)
|
| 191 |
+
{
|
| 192 |
+
M = sh.size(1);
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
torch::Tensor dL_dmeans3D = torch::zeros({P, 3}, means3D.options());
|
| 196 |
+
torch::Tensor dL_dmeans2D = torch::zeros({P, 3}, means3D.options());
|
| 197 |
+
torch::Tensor dL_dcolors = torch::zeros({P, NUM_CHANNELS}, means3D.options());
|
| 198 |
+
torch::Tensor dL_dopacity = torch::zeros({P, 1}, means3D.options());
|
| 199 |
+
torch::Tensor dL_dsh = torch::zeros({P, M, 3}, means3D.options());
|
| 200 |
+
torch::Tensor dL_dscales = torch::zeros({P, 3}, means3D.options());
|
| 201 |
+
torch::Tensor dL_drotations = torch::zeros({P, 4}, means3D.options());
|
| 202 |
+
torch::Tensor dL_dinvdepths = torch::zeros({0, 1}, means3D.options());
|
| 203 |
+
torch::Tensor dL_dsigmaInv = torch::zeros({P, 3, 3}, means3D.options());
|
| 204 |
+
|
| 205 |
+
float* dL_dinvdepthsptr = nullptr;
|
| 206 |
+
float* dL_dout_invdepthptr = nullptr;
|
| 207 |
+
if(dL_dout_invdepth.size(0) != 0)
|
| 208 |
+
{
|
| 209 |
+
dL_dinvdepths = torch::zeros({P, 1}, means3D.options());
|
| 210 |
+
dL_dinvdepths = dL_dinvdepths.contiguous();
|
| 211 |
+
dL_dinvdepthsptr = dL_dinvdepths.data<float>();
|
| 212 |
+
dL_dout_invdepthptr = dL_dout_invdepth.data<float>();
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
if(P != 0)
|
| 216 |
+
{
|
| 217 |
+
CudaRasterizer::Rasterizer::backward(P, degree, M, R,
|
| 218 |
+
background.contiguous().data<float>(),
|
| 219 |
+
W, H,
|
| 220 |
+
tan_theta.contiguous().data<float>(),
|
| 221 |
+
tan_phi.contiguous().data<float>(),
|
| 222 |
+
raymap.numel() > 0 ? raymap.contiguous().data<float>() : nullptr,
|
| 223 |
+
mode,
|
| 224 |
+
means3D.contiguous().data<float>(),
|
| 225 |
+
sh.contiguous().data<float>(),
|
| 226 |
+
colors.contiguous().data<float>(),
|
| 227 |
+
opacities.contiguous().data<float>(),
|
| 228 |
+
scales.data_ptr<float>(),
|
| 229 |
+
scale_modifier,
|
| 230 |
+
rotations.data_ptr<float>(),
|
| 231 |
+
viewmatrix.contiguous().data<float>(),
|
| 232 |
+
campos.contiguous().data<float>(),
|
| 233 |
+
tan_fovx,
|
| 234 |
+
tan_fovy,
|
| 235 |
+
radii.contiguous().data<int>(),
|
| 236 |
+
reinterpret_cast<char*>(geomBuffer.contiguous().data_ptr()),
|
| 237 |
+
reinterpret_cast<char*>(binningBuffer.contiguous().data_ptr()),
|
| 238 |
+
reinterpret_cast<char*>(imageBuffer.contiguous().data_ptr()),
|
| 239 |
+
dL_dout_color.contiguous().data<float>(),
|
| 240 |
+
dL_dout_invdepthptr,
|
| 241 |
+
dL_dmeans2D.contiguous().data<float>(),
|
| 242 |
+
dL_dopacity.contiguous().data<float>(),
|
| 243 |
+
dL_dcolors.contiguous().data<float>(),
|
| 244 |
+
dL_dinvdepthsptr,
|
| 245 |
+
dL_dmeans3D.contiguous().data<float>(),
|
| 246 |
+
dL_dsh.contiguous().data<float>(),
|
| 247 |
+
dL_dscales.contiguous().data<float>(),
|
| 248 |
+
dL_drotations.contiguous().data<float>(),
|
| 249 |
+
dL_dsigmaInv.contiguous().data<float>(),
|
| 250 |
+
antialiasing,
|
| 251 |
+
debug);
|
| 252 |
+
}
|
| 253 |
+
|
| 254 |
+
return std::make_tuple(dL_dmeans2D, dL_dcolors, dL_dopacity, dL_dmeans3D, dL_dsh, dL_dscales, dL_drotations);
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
torch::Tensor markVisible(
|
| 258 |
+
torch::Tensor& means3D,
|
| 259 |
+
torch::Tensor& viewmatrix)
|
| 260 |
+
{
|
| 261 |
+
const int P = means3D.size(0);
|
| 262 |
+
|
| 263 |
+
torch::Tensor present = torch::full({P}, false, means3D.options().dtype(at::kBool));
|
| 264 |
+
|
| 265 |
+
if(P != 0)
|
| 266 |
+
{
|
| 267 |
+
CudaRasterizer::Rasterizer::markVisible(P,
|
| 268 |
+
means3D.contiguous().data<float>(),
|
| 269 |
+
viewmatrix.contiguous().data<float>(),
|
| 270 |
+
present.contiguous().data<bool>());
|
| 271 |
+
}
|
| 272 |
+
|
| 273 |
+
return present;
|
| 274 |
+
}
|
3dgeer/submodules/geer-rasterizer/rasterize_points.h
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright (C) 2023, Inria
|
| 3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This software is free for non-commercial, research and evaluation use
|
| 7 |
+
* under the terms of the LICENSE.md file.
|
| 8 |
+
*
|
| 9 |
+
* For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
#pragma once
|
| 13 |
+
#include <torch/extension.h>
|
| 14 |
+
#include <cstdio>
|
| 15 |
+
#include <tuple>
|
| 16 |
+
#include <string>
|
| 17 |
+
|
| 18 |
+
std::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
|
| 19 |
+
RasterizeGaussiansCUDA(
|
| 20 |
+
const torch::Tensor& background,
|
| 21 |
+
const torch::Tensor& means3D,
|
| 22 |
+
const torch::Tensor& colors,
|
| 23 |
+
const torch::Tensor& opacity,
|
| 24 |
+
const torch::Tensor& scales,
|
| 25 |
+
const torch::Tensor& rotations,
|
| 26 |
+
const float scale_modifier,
|
| 27 |
+
const torch::Tensor& viewmatrix,
|
| 28 |
+
const torch::Tensor& mirror_transformed_tan_theta,
|
| 29 |
+
const torch::Tensor& mirror_transformed_tan_phi,
|
| 30 |
+
const torch::Tensor& tan_theta,
|
| 31 |
+
const torch::Tensor& tan_phi,
|
| 32 |
+
const float focal_x, float focal_y,
|
| 33 |
+
const float principal_x, float principal_y,
|
| 34 |
+
const torch::Tensor& distortion_coeffs,
|
| 35 |
+
const torch::Tensor& raymap,
|
| 36 |
+
const float tan_fovx,
|
| 37 |
+
const float tan_fovy,
|
| 38 |
+
const int image_height,
|
| 39 |
+
const int image_width,
|
| 40 |
+
const torch::Tensor& sh,
|
| 41 |
+
const int degree,
|
| 42 |
+
const torch::Tensor& campos,
|
| 43 |
+
const bool prefiltered,
|
| 44 |
+
const bool antialiasing,
|
| 45 |
+
const int mode,
|
| 46 |
+
const float near_threshold,
|
| 47 |
+
const bool debug,
|
| 48 |
+
const int asso_mode = 0);
|
| 49 |
+
|
| 50 |
+
std::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
|
| 51 |
+
RasterizeGaussiansBackwardCUDA(
|
| 52 |
+
const torch::Tensor& background,
|
| 53 |
+
const torch::Tensor& means3D,
|
| 54 |
+
const torch::Tensor& radii,
|
| 55 |
+
const torch::Tensor& colors,
|
| 56 |
+
const torch::Tensor& scales,
|
| 57 |
+
const torch::Tensor& opacities,
|
| 58 |
+
const torch::Tensor& rotations,
|
| 59 |
+
const float scale_modifier,
|
| 60 |
+
const torch::Tensor& viewmatrix,
|
| 61 |
+
const torch::Tensor& tan_theta,
|
| 62 |
+
const torch::Tensor& tan_phi,
|
| 63 |
+
const torch::Tensor& raymap,
|
| 64 |
+
const int mode,
|
| 65 |
+
const float tan_fovx,
|
| 66 |
+
const float tan_fovy,
|
| 67 |
+
const torch::Tensor& dL_dout_color,
|
| 68 |
+
const torch::Tensor& dL_dout_invdepth,
|
| 69 |
+
const torch::Tensor& sh,
|
| 70 |
+
const int degree,
|
| 71 |
+
const torch::Tensor& campos,
|
| 72 |
+
const torch::Tensor& geomBuffer,
|
| 73 |
+
const int R,
|
| 74 |
+
const torch::Tensor& binningBuffer,
|
| 75 |
+
const torch::Tensor& imageBuffer,
|
| 76 |
+
const bool antialiasing,
|
| 77 |
+
const bool debug);
|
| 78 |
+
|
| 79 |
+
torch::Tensor markVisible(
|
| 80 |
+
torch::Tensor& means3D,
|
| 81 |
+
torch::Tensor& viewmatrix);
|
3dgeer/submodules/geer-rasterizer/setup.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#
|
| 2 |
+
# Copyright (C) 2023, Inria
|
| 3 |
+
# GRAPHDECO research group, https://team.inria.fr/graphdeco
|
| 4 |
+
# All rights reserved.
|
| 5 |
+
#
|
| 6 |
+
# This software is free for non-commercial, research and evaluation use
|
| 7 |
+
# under the terms of the LICENSE.md file.
|
| 8 |
+
#
|
| 9 |
+
# For inquiries contact george.drettakis@inria.fr
|
| 10 |
+
#
|
| 11 |
+
|
| 12 |
+
from setuptools import setup
|
| 13 |
+
from torch.utils.cpp_extension import CUDAExtension, BuildExtension
|
| 14 |
+
import os
|
| 15 |
+
os.path.dirname(os.path.abspath(__file__))
|
| 16 |
+
|
| 17 |
+
setup(
|
| 18 |
+
name="diff_gaussian_rasterization",
|
| 19 |
+
packages=['diff_gaussian_rasterization'],
|
| 20 |
+
ext_modules=[
|
| 21 |
+
CUDAExtension(
|
| 22 |
+
name="diff_gaussian_rasterization._C",
|
| 23 |
+
sources=[
|
| 24 |
+
"cuda_rasterizer/rasterizer_impl.cu",
|
| 25 |
+
"cuda_rasterizer/forward.cu",
|
| 26 |
+
"cuda_rasterizer/backward.cu",
|
| 27 |
+
"rasterize_points.cu",
|
| 28 |
+
"ext.cpp"],
|
| 29 |
+
extra_compile_args={"nvcc": ["-I" + os.path.join(os.path.dirname(os.path.abspath(__file__)), "third_party/glm/")]})
|
| 30 |
+
],
|
| 31 |
+
cmdclass={
|
| 32 |
+
'build_ext': BuildExtension
|
| 33 |
+
}
|
| 34 |
+
)
|
3dgeer/submodules/geer-rasterizer/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
|
3dgeer/submodules/geer-rasterizer/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
|
3dgeer/submodules/geer-rasterizer/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 |
+
|
3dgeer/submodules/geer-rasterizer/third_party/glm/CMakeLists.txt
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
|
| 2 |
+
cmake_policy(VERSION 3.2)
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
file(READ "glm/detail/setup.hpp" GLM_SETUP_FILE)
|
| 6 |
+
string(REGEX MATCH "#define[ ]+GLM_VERSION_MAJOR[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
|
| 7 |
+
set(GLM_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
| 8 |
+
string(REGEX MATCH "#define[ ]+GLM_VERSION_MINOR[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
|
| 9 |
+
set(GLM_VERSION_MINOR "${CMAKE_MATCH_1}")
|
| 10 |
+
string(REGEX MATCH "#define[ ]+GLM_VERSION_PATCH[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
|
| 11 |
+
set(GLM_VERSION_PATCH "${CMAKE_MATCH_1}")
|
| 12 |
+
string(REGEX MATCH "#define[ ]+GLM_VERSION_REVISION[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
|
| 13 |
+
set(GLM_VERSION_REVISION "${CMAKE_MATCH_1}")
|
| 14 |
+
|
| 15 |
+
set(GLM_VERSION ${GLM_VERSION_MAJOR}.${GLM_VERSION_MINOR}.${GLM_VERSION_PATCH}.${GLM_VERSION_REVISION})
|
| 16 |
+
project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
|
| 17 |
+
message(STATUS "GLM: Version " ${GLM_VERSION})
|
| 18 |
+
|
| 19 |
+
add_subdirectory(glm)
|
| 20 |
+
add_library(glm::glm ALIAS glm)
|
| 21 |
+
|
| 22 |
+
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
| 23 |
+
|
| 24 |
+
include(CPack)
|
| 25 |
+
install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN "CMakeLists.txt" EXCLUDE)
|
| 26 |
+
install(EXPORT glm FILE glmConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm NAMESPACE glm::)
|
| 27 |
+
include(CMakePackageConfigHelpers)
|
| 28 |
+
write_basic_package_version_file("glmConfigVersion.cmake" COMPATIBILITY AnyNewerVersion)
|
| 29 |
+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm)
|
| 30 |
+
|
| 31 |
+
include(CTest)
|
| 32 |
+
if(BUILD_TESTING)
|
| 33 |
+
add_subdirectory(test)
|
| 34 |
+
endif()
|
| 35 |
+
|
| 36 |
+
endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
| 37 |
+
|
| 38 |
+
if (NOT TARGET uninstall)
|
| 39 |
+
configure_file(cmake/cmake_uninstall.cmake.in
|
| 40 |
+
cmake_uninstall.cmake IMMEDIATE @ONLY)
|
| 41 |
+
|
| 42 |
+
add_custom_target(uninstall
|
| 43 |
+
"${CMAKE_COMMAND}" -P
|
| 44 |
+
"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake")
|
| 45 |
+
endif()
|
3dgeer/submodules/geer-rasterizer/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()
|
3dgeer/submodules/geer-rasterizer/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.
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00004_source.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00005_source.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/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>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00012.html
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: color_space.hpp File Reference</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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">gtc/color_space.hpp File Reference</div> </div>
|
| 91 |
+
</div><!--header-->
|
| 92 |
+
<div class="contents">
|
| 93 |
+
|
| 94 |
+
<p><a class="el" href="a00289.html">GLM_GTC_color_space</a>
|
| 95 |
+
<a href="#details">More...</a></p>
|
| 96 |
+
|
| 97 |
+
<p><a href="a00012_source.html">Go to the source code of this file.</a></p>
|
| 98 |
+
<table class="memberdecls">
|
| 99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
| 100 |
+
Functions</h2></td></tr>
|
| 101 |
+
<tr class="memitem:ga42239e7b3da900f7ef37cec7e2476579"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 102 |
+
<tr class="memitem:ga42239e7b3da900f7ef37cec7e2476579"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#ga42239e7b3da900f7ef37cec7e2476579">convertLinearToSRGB</a> (vec< L, T, Q > const &ColorLinear)</td></tr>
|
| 103 |
+
<tr class="memdesc:ga42239e7b3da900f7ef37cec7e2476579"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear color to sRGB color using a standard gamma correction. <a href="a00289.html#ga42239e7b3da900f7ef37cec7e2476579">More...</a><br /></td></tr>
|
| 104 |
+
<tr class="separator:ga42239e7b3da900f7ef37cec7e2476579"><td class="memSeparator" colspan="2"> </td></tr>
|
| 105 |
+
<tr class="memitem:gaace0a21167d13d26116c283009af57f6"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 106 |
+
<tr class="memitem:gaace0a21167d13d26116c283009af57f6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a> (vec< L, T, Q > const &ColorLinear, T Gamma)</td></tr>
|
| 107 |
+
<tr class="memdesc:gaace0a21167d13d26116c283009af57f6"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear color to sRGB color using a custom gamma correction. <a href="a00289.html#gaace0a21167d13d26116c283009af57f6">More...</a><br /></td></tr>
|
| 108 |
+
<tr class="separator:gaace0a21167d13d26116c283009af57f6"><td class="memSeparator" colspan="2"> </td></tr>
|
| 109 |
+
<tr class="memitem:ga16c798b7a226b2c3079dedc55083d187"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 110 |
+
<tr class="memitem:ga16c798b7a226b2c3079dedc55083d187"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#ga16c798b7a226b2c3079dedc55083d187">convertSRGBToLinear</a> (vec< L, T, Q > const &ColorSRGB)</td></tr>
|
| 111 |
+
<tr class="memdesc:ga16c798b7a226b2c3079dedc55083d187"><td class="mdescLeft"> </td><td class="mdescRight">Convert a sRGB color to linear color using a standard gamma correction. <a href="a00289.html#ga16c798b7a226b2c3079dedc55083d187">More...</a><br /></td></tr>
|
| 112 |
+
<tr class="separator:ga16c798b7a226b2c3079dedc55083d187"><td class="memSeparator" colspan="2"> </td></tr>
|
| 113 |
+
<tr class="memitem:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad1b91f27a9726c9cb403f9fee6e2e200"></a>
|
| 114 |
+
template<length_t L, typename T , qualifier Q> </td></tr>
|
| 115 |
+
<tr class="memitem:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a> (vec< L, T, Q > const &ColorSRGB, T Gamma)</td></tr>
|
| 116 |
+
<tr class="memdesc:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="mdescLeft"> </td><td class="mdescRight">Convert a sRGB color to linear color using a custom gamma correction. <br /></td></tr>
|
| 117 |
+
<tr class="separator:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="memSeparator" colspan="2"> </td></tr>
|
| 118 |
+
</table>
|
| 119 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
| 120 |
+
<div class="textblock"><p><a class="el" href="a00289.html">GLM_GTC_color_space</a> </p>
|
| 121 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
|
| 122 |
+
<dd>
|
| 123 |
+
<a class="el" href="a00289.html" title="Include <glm/gtc/color_space.hpp> to use the features of this extension. ">GLM_GTC_color_space</a> (dependence) </dd></dl>
|
| 124 |
+
|
| 125 |
+
<p>Definition in file <a class="el" href="a00012_source.html">gtc/color_space.hpp</a>.</p>
|
| 126 |
+
</div></div><!-- contents -->
|
| 127 |
+
<!-- start footer part -->
|
| 128 |
+
<hr class="footer"/><address class="footer"><small>
|
| 129 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
| 130 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
| 131 |
+
</a> 1.8.10
|
| 132 |
+
</small></address>
|
| 133 |
+
</body>
|
| 134 |
+
</html>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00012_source.html
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: color_space.hpp Source File</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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">gtc/color_space.hpp</div> </div>
|
| 89 |
+
</div><!--header-->
|
| 90 |
+
<div class="contents">
|
| 91 |
+
<a href="a00012.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </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 "../exponential.hpp"</span></div>
|
| 98 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
|
| 99 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
|
| 100 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <limits></span></div>
|
| 101 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
|
| 102 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
| 103 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_color_space extension included")</span></div>
|
| 104 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
|
| 105 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
|
| 106 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
| 107 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
|
| 108 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
|
| 109 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 110 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a>(vec<L, T, Q> <span class="keyword">const</span>& ColorLinear);</div>
|
| 111 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
|
| 112 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 113 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a>(vec<L, T, Q> <span class="keyword">const</span>& ColorLinear, T Gamma);</div>
|
| 114 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
|
| 115 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 116 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a>(vec<L, T, Q> <span class="keyword">const</span>& ColorSRGB);</div>
|
| 117 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
|
| 118 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="comment">// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb</span></div>
|
| 119 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 120 |
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a>(vec<L, T, Q> <span class="keyword">const</span>& ColorSRGB, T Gamma);</div>
|
| 121 |
+
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
|
| 122 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> } <span class="comment">//namespace glm</span></div>
|
| 123 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
|
| 124 |
+
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "color_space.inl"</span></div>
|
| 125 |
+
<div class="ttc" id="a00289_html_gaace0a21167d13d26116c283009af57f6"><div class="ttname"><a href="a00289.html#gaace0a21167d13d26116c283009af57f6">glm::convertLinearToSRGB</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > convertLinearToSRGB(vec< L, T, Q > const &ColorLinear, T Gamma)</div><div class="ttdoc">Convert a linear color to sRGB color using a custom gamma correction. </div></div>
|
| 126 |
+
<div class="ttc" id="a00289_html_gad1b91f27a9726c9cb403f9fee6e2e200"><div class="ttname"><a href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">glm::convertSRGBToLinear</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > convertSRGBToLinear(vec< L, T, Q > const &ColorSRGB, T Gamma)</div><div class="ttdoc">Convert a sRGB color to linear color using a custom gamma correction. </div></div>
|
| 127 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
| 128 |
+
</div><!-- fragment --></div><!-- contents -->
|
| 129 |
+
<!-- start footer part -->
|
| 130 |
+
<hr class="footer"/><address class="footer"><small>
|
| 131 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
| 132 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
| 133 |
+
</a> 1.8.10
|
| 134 |
+
</small></address>
|
| 135 |
+
</body>
|
| 136 |
+
</html>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00013.html
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: color_space.hpp File Reference</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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">gtx/color_space.hpp File Reference</div> </div>
|
| 91 |
+
</div><!--header-->
|
| 92 |
+
<div class="contents">
|
| 93 |
+
|
| 94 |
+
<p><a class="el" href="a00312.html">GLM_GTX_color_space</a>
|
| 95 |
+
<a href="#details">More...</a></p>
|
| 96 |
+
|
| 97 |
+
<p><a href="a00013_source.html">Go to the source code of this file.</a></p>
|
| 98 |
+
<table class="memberdecls">
|
| 99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
| 100 |
+
Functions</h2></td></tr>
|
| 101 |
+
<tr class="memitem:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 102 |
+
<tr class="memitem:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">hsvColor</a> (vec< 3, T, Q > const &rgbValue)</td></tr>
|
| 103 |
+
<tr class="memdesc:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="mdescLeft"> </td><td class="mdescRight">Converts a color from RGB color space to its color in HSV color space. <a href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">More...</a><br /></td></tr>
|
| 104 |
+
<tr class="separator:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memSeparator" colspan="2"> </td></tr>
|
| 105 |
+
<tr class="memitem:gad028e0a4f1a9c812b39439b746295b34"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 106 |
+
<tr class="memitem:gad028e0a4f1a9c812b39439b746295b34"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">luminosity</a> (vec< 3, T, Q > const &color)</td></tr>
|
| 107 |
+
<tr class="memdesc:gad028e0a4f1a9c812b39439b746295b34"><td class="mdescLeft"> </td><td class="mdescRight">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. <a href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">More...</a><br /></td></tr>
|
| 108 |
+
<tr class="separator:gad028e0a4f1a9c812b39439b746295b34"><td class="memSeparator" colspan="2"> </td></tr>
|
| 109 |
+
<tr class="memitem:ga5f9193be46f45f0655c05a0cdca006db"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 110 |
+
<tr class="memitem:ga5f9193be46f45f0655c05a0cdca006db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a> (vec< 3, T, Q > const &hsvValue)</td></tr>
|
| 111 |
+
<tr class="memdesc:ga5f9193be46f45f0655c05a0cdca006db"><td class="mdescLeft"> </td><td class="mdescRight">Converts a color from HSV color space to its color in RGB color space. <a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">More...</a><br /></td></tr>
|
| 112 |
+
<tr class="separator:ga5f9193be46f45f0655c05a0cdca006db"><td class="memSeparator" colspan="2"> </td></tr>
|
| 113 |
+
<tr class="memitem:ga01a97152b44e1550edcac60bd849e884"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
| 114 |
+
<tr class="memitem:ga01a97152b44e1550edcac60bd849e884"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga01a97152b44e1550edcac60bd849e884">saturation</a> (T const s)</td></tr>
|
| 115 |
+
<tr class="memdesc:ga01a97152b44e1550edcac60bd849e884"><td class="mdescLeft"> </td><td class="mdescRight">Build a saturation matrix. <a href="a00312.html#ga01a97152b44e1550edcac60bd849e884">More...</a><br /></td></tr>
|
| 116 |
+
<tr class="separator:ga01a97152b44e1550edcac60bd849e884"><td class="memSeparator" colspan="2"> </td></tr>
|
| 117 |
+
<tr class="memitem:ga2156cea600e90148ece5bc96fd6db43a"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 118 |
+
<tr class="memitem:ga2156cea600e90148ece5bc96fd6db43a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga2156cea600e90148ece5bc96fd6db43a">saturation</a> (T const s, vec< 3, T, Q > const &color)</td></tr>
|
| 119 |
+
<tr class="memdesc:ga2156cea600e90148ece5bc96fd6db43a"><td class="mdescLeft"> </td><td class="mdescRight">Modify the saturation of a color. <a href="a00312.html#ga2156cea600e90148ece5bc96fd6db43a">More...</a><br /></td></tr>
|
| 120 |
+
<tr class="separator:ga2156cea600e90148ece5bc96fd6db43a"><td class="memSeparator" colspan="2"> </td></tr>
|
| 121 |
+
<tr class="memitem:gaba0eacee0736dae860e9371cc1ae4785"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 122 |
+
<tr class="memitem:gaba0eacee0736dae860e9371cc1ae4785"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 4, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a> (T const s, vec< 4, T, Q > const &color)</td></tr>
|
| 123 |
+
<tr class="memdesc:gaba0eacee0736dae860e9371cc1ae4785"><td class="mdescLeft"> </td><td class="mdescRight">Modify the saturation of a color. <a href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">More...</a><br /></td></tr>
|
| 124 |
+
<tr class="separator:gaba0eacee0736dae860e9371cc1ae4785"><td class="memSeparator" colspan="2"> </td></tr>
|
| 125 |
+
</table>
|
| 126 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
| 127 |
+
<div class="textblock"><p><a class="el" href="a00312.html">GLM_GTX_color_space</a> </p>
|
| 128 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
|
| 129 |
+
|
| 130 |
+
<p>Definition in file <a class="el" href="a00013_source.html">gtx/color_space.hpp</a>.</p>
|
| 131 |
+
</div></div><!-- contents -->
|
| 132 |
+
<!-- start footer part -->
|
| 133 |
+
<hr class="footer"/><address class="footer"><small>
|
| 134 |
+
Generated by  <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>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00013_source.html
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: color_space.hpp Source File</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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">gtx/color_space.hpp</div> </div>
|
| 89 |
+
</div><!--header-->
|
| 90 |
+
<div class="contents">
|
| 91 |
+
<a href="a00013.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </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_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")</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_color_space 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="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a>(</div>
|
| 110 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vec<3, T, Q> <span class="keyword">const</span>& hsvValue);</div>
|
| 111 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
|
| 112 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 113 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">hsvColor</a>(</div>
|
| 114 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  vec<3, T, Q> <span class="keyword">const</span>& rgbValue);</div>
|
| 115 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
|
| 116 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
| 117 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a>(</div>
|
| 118 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  T <span class="keyword">const</span> s);</div>
|
| 119 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
|
| 120 |
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 121 |
+
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a>(</div>
|
| 122 |
+
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  T <span class="keyword">const</span> s,</div>
|
| 123 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  vec<3, T, Q> <span class="keyword">const</span>& color);</div>
|
| 124 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
|
| 125 |
+
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 126 |
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL vec<4, T, Q> <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a>(</div>
|
| 127 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  T <span class="keyword">const</span> s,</div>
|
| 128 |
+
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  vec<4, T, Q> <span class="keyword">const</span>& color);</div>
|
| 129 |
+
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
|
| 130 |
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 131 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL T <a class="code" href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">luminosity</a>(</div>
|
| 132 |
+
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  vec<3, T, Q> <span class="keyword">const</span>& color);</div>
|
| 133 |
+
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
|
| 134 |
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }<span class="comment">//namespace glm</span></div>
|
| 135 |
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
|
| 136 |
+
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#include "color_space.inl"</span></div>
|
| 137 |
+
<div class="ttc" id="a00312_html_gad028e0a4f1a9c812b39439b746295b34"><div class="ttname"><a href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">glm::luminosity</a></div><div class="ttdeci">GLM_FUNC_DECL T luminosity(vec< 3, T, Q > const &color)</div><div class="ttdoc">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </div></div>
|
| 138 |
+
<div class="ttc" id="a00312_html_gaba0eacee0736dae860e9371cc1ae4785"><div class="ttname"><a href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">glm::saturation</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 4, T, Q > saturation(T const s, vec< 4, T, Q > const &color)</div><div class="ttdoc">Modify the saturation of a color. </div></div>
|
| 139 |
+
<div class="ttc" id="a00312_html_ga5f9193be46f45f0655c05a0cdca006db"><div class="ttname"><a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">glm::rgbColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > rgbColor(vec< 3, T, Q > const &hsvValue)</div><div class="ttdoc">Converts a color from HSV color space to its color in RGB color space. </div></div>
|
| 140 |
+
<div class="ttc" id="a00312_html_ga789802bec2d4fe0f9741c731b4a8a7d8"><div class="ttname"><a href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">glm::hsvColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > hsvColor(vec< 3, T, Q > const &rgbValue)</div><div class="ttdoc">Converts a color from RGB color space to its color in HSV color space. </div></div>
|
| 141 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
| 142 |
+
</div><!-- fragment --></div><!-- contents -->
|
| 143 |
+
<!-- start footer part -->
|
| 144 |
+
<hr class="footer"/><address class="footer"><small>
|
| 145 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
| 146 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
| 147 |
+
</a> 1.8.10
|
| 148 |
+
</small></address>
|
| 149 |
+
</body>
|
| 150 |
+
</html>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00014.html
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: color_space_YCoCg.hpp File Reference</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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_space_YCoCg.hpp File Reference</div> </div>
|
| 91 |
+
</div><!--header-->
|
| 92 |
+
<div class="contents">
|
| 93 |
+
|
| 94 |
+
<p><a class="el" href="a00313.html">GLM_GTX_color_space_YCoCg</a>
|
| 95 |
+
<a href="#details">More...</a></p>
|
| 96 |
+
|
| 97 |
+
<p><a href="a00014_source.html">Go to the source code of this file.</a></p>
|
| 98 |
+
<table class="memberdecls">
|
| 99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
| 100 |
+
Functions</h2></td></tr>
|
| 101 |
+
<tr class="memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 102 |
+
<tr class="memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">rgb2YCoCg</a> (vec< 3, T, Q > const &rgbColor)</td></tr>
|
| 103 |
+
<tr class="memdesc:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from RGB color space to YCoCg color space. <a href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">More...</a><br /></td></tr>
|
| 104 |
+
<tr class="separator:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memSeparator" colspan="2"> </td></tr>
|
| 105 |
+
<tr class="memitem:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 106 |
+
<tr class="memitem:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">rgb2YCoCgR</a> (vec< 3, T, Q > const &rgbColor)</td></tr>
|
| 107 |
+
<tr class="memdesc:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from RGB color space to YCoCgR color space. <a href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">More...</a><br /></td></tr>
|
| 108 |
+
<tr class="separator:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memSeparator" colspan="2"> </td></tr>
|
| 109 |
+
<tr class="memitem:ga163596b804c7241810b2534a99eb1343"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 110 |
+
<tr class="memitem:ga163596b804c7241810b2534a99eb1343"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga163596b804c7241810b2534a99eb1343">YCoCg2rgb</a> (vec< 3, T, Q > const &YCoCgColor)</td></tr>
|
| 111 |
+
<tr class="memdesc:ga163596b804c7241810b2534a99eb1343"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from YCoCg color space to RGB color space. <a href="a00313.html#ga163596b804c7241810b2534a99eb1343">More...</a><br /></td></tr>
|
| 112 |
+
<tr class="separator:ga163596b804c7241810b2534a99eb1343"><td class="memSeparator" colspan="2"> </td></tr>
|
| 113 |
+
<tr class="memitem:gaf8d30574c8576838097d8e20c295384a"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
| 114 |
+
<tr class="memitem:gaf8d30574c8576838097d8e20c295384a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#gaf8d30574c8576838097d8e20c295384a">YCoCgR2rgb</a> (vec< 3, T, Q > const &YCoCgColor)</td></tr>
|
| 115 |
+
<tr class="memdesc:gaf8d30574c8576838097d8e20c295384a"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from YCoCgR color space to RGB color space. <a href="a00313.html#gaf8d30574c8576838097d8e20c295384a">More...</a><br /></td></tr>
|
| 116 |
+
<tr class="separator:gaf8d30574c8576838097d8e20c295384a"><td class="memSeparator" colspan="2"> </td></tr>
|
| 117 |
+
</table>
|
| 118 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
| 119 |
+
<div class="textblock"><p><a class="el" href="a00313.html">GLM_GTX_color_space_YCoCg</a> </p>
|
| 120 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
|
| 121 |
+
|
| 122 |
+
<p>Definition in file <a class="el" href="a00014_source.html">color_space_YCoCg.hpp</a>.</p>
|
| 123 |
+
</div></div><!-- contents -->
|
| 124 |
+
<!-- start footer part -->
|
| 125 |
+
<hr class="footer"/><address class="footer"><small>
|
| 126 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
| 127 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
| 128 |
+
</a> 1.8.10
|
| 129 |
+
</small></address>
|
| 130 |
+
</body>
|
| 131 |
+
</html>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00014_source.html
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: color_space_YCoCg.hpp Source File</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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_space_YCoCg.hpp</div> </div>
|
| 89 |
+
</div><!--header-->
|
| 90 |
+
<div class="contents">
|
| 91 |
+
<a href="a00014.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </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_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")</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_color_space_YCoCg 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="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">rgb2YCoCg</a>(</div>
|
| 110 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vec<3, T, Q> <span class="keyword">const</span>& <a class="code" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a>);</div>
|
| 111 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
|
| 112 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 113 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00313.html#ga163596b804c7241810b2534a99eb1343">YCoCg2rgb</a>(</div>
|
| 114 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  vec<3, T, Q> <span class="keyword">const</span>& YCoCgColor);</div>
|
| 115 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
|
| 116 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 117 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">rgb2YCoCgR</a>(</div>
|
| 118 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  vec<3, T, Q> <span class="keyword">const</span>& <a class="code" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a>);</div>
|
| 119 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
|
| 120 |
+
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
| 121 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00313.html#gaf8d30574c8576838097d8e20c295384a">YCoCgR2rgb</a>(</div>
|
| 122 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  vec<3, T, Q> <span class="keyword">const</span>& YCoCgColor);</div>
|
| 123 |
+
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
|
| 124 |
+
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }<span class="comment">//namespace glm</span></div>
|
| 125 |
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
|
| 126 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#include "color_space_YCoCg.inl"</span></div>
|
| 127 |
+
<div class="ttc" id="a00313_html_gaf8d30574c8576838097d8e20c295384a"><div class="ttname"><a href="a00313.html#gaf8d30574c8576838097d8e20c295384a">glm::YCoCgR2rgb</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > YCoCgR2rgb(vec< 3, T, Q > const &YCoCgColor)</div><div class="ttdoc">Convert a color from YCoCgR color space to RGB color space. </div></div>
|
| 128 |
+
<div class="ttc" id="a00313_html_ga163596b804c7241810b2534a99eb1343"><div class="ttname"><a href="a00313.html#ga163596b804c7241810b2534a99eb1343">glm::YCoCg2rgb</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > YCoCg2rgb(vec< 3, T, Q > const &YCoCgColor)</div><div class="ttdoc">Convert a color from YCoCg color space to RGB color space. </div></div>
|
| 129 |
+
<div class="ttc" id="a00312_html_ga5f9193be46f45f0655c05a0cdca006db"><div class="ttname"><a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">glm::rgbColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > rgbColor(vec< 3, T, Q > const &hsvValue)</div><div class="ttdoc">Converts a color from HSV color space to its color in RGB color space. </div></div>
|
| 130 |
+
<div class="ttc" id="a00313_html_ga0606353ec2a9b9eaa84f1b02ec391bc5"><div class="ttname"><a href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">glm::rgb2YCoCg</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCg(vec< 3, T, Q > const &rgbColor)</div><div class="ttdoc">Convert a color from RGB color space to YCoCg color space. </div></div>
|
| 131 |
+
<div class="ttc" id="a00313_html_ga0389772e44ca0fd2ba4a79bdd8efe898"><div class="ttname"><a href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">glm::rgb2YCoCgR</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCgR(vec< 3, T, Q > const &rgbColor)</div><div class="ttdoc">Convert a color from RGB color space to YCoCgR color space. </div></div>
|
| 132 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
| 133 |
+
</div><!-- fragment --></div><!-- contents -->
|
| 134 |
+
<!-- start footer part -->
|
| 135 |
+
<hr class="footer"/><address class="footer"><small>
|
| 136 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
| 137 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
| 138 |
+
</a> 1.8.10
|
| 139 |
+
</small></address>
|
| 140 |
+
</body>
|
| 141 |
+
</html>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00015.html
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: common.hpp File Reference</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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> </ul>
|
| 84 |
+
</div>
|
| 85 |
+
</div><!-- top -->
|
| 86 |
+
<div class="header">
|
| 87 |
+
<div class="summary">
|
| 88 |
+
<a href="#func-members">Functions</a> </div>
|
| 89 |
+
<div class="headertitle">
|
| 90 |
+
<div class="title">common.hpp File Reference</div> </div>
|
| 91 |
+
</div><!--header-->
|
| 92 |
+
<div class="contents">
|
| 93 |
+
|
| 94 |
+
<p><a class="el" href="a00280.html">Core features</a>
|
| 95 |
+
<a href="#details">More...</a></p>
|
| 96 |
+
|
| 97 |
+
<p><a href="a00015_source.html">Go to the source code of this file.</a></p>
|
| 98 |
+
<table class="memberdecls">
|
| 99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
| 100 |
+
Functions</h2></td></tr>
|
| 101 |
+
<tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 102 |
+
<tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga439e60a72eadecfeda2df5449c613a64">abs</a> (genType x)</td></tr>
|
| 103 |
+
<tr class="memdesc:ga439e60a72eadecfeda2df5449c613a64"><td class="mdescLeft"> </td><td class="mdescRight">Returns x if x >= 0; otherwise, it returns -x. <a href="a00241.html#ga439e60a72eadecfeda2df5449c613a64">More...</a><br /></td></tr>
|
| 104 |
+
<tr class="separator:ga439e60a72eadecfeda2df5449c613a64"><td class="memSeparator" colspan="2"> </td></tr>
|
| 105 |
+
<tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 106 |
+
<tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a> (vec< L, T, Q > const &x)</td></tr>
|
| 107 |
+
<tr class="memdesc:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="mdescLeft"> </td><td class="mdescRight">Returns x if x >= 0; otherwise, it returns -x. <a href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">More...</a><br /></td></tr>
|
| 108 |
+
<tr class="separator:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memSeparator" colspan="2"> </td></tr>
|
| 109 |
+
<tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 110 |
+
<tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">ceil</a> (vec< L, T, Q > const &x)</td></tr>
|
| 111 |
+
<tr class="memdesc:gafb9d2a645a23aca12d4d6de0104b7657"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer that is greater than or equal to x. <a href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">More...</a><br /></td></tr>
|
| 112 |
+
<tr class="separator:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memSeparator" colspan="2"> </td></tr>
|
| 113 |
+
<tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 114 |
+
<tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>
|
| 115 |
+
<tr class="memdesc:ga7cd77683da6361e297c56443fc70806d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#ga7cd77683da6361e297c56443fc70806d">More...</a><br /></td></tr>
|
| 116 |
+
<tr class="separator:ga7cd77683da6361e297c56443fc70806d"><td class="memSeparator" colspan="2"> </td></tr>
|
| 117 |
+
<tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 118 |
+
<tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafba2e0674deb5953878d89483cd6323d">clamp</a> (vec< L, T, Q > const &x, T minVal, T maxVal)</td></tr>
|
| 119 |
+
<tr class="memdesc:gafba2e0674deb5953878d89483cd6323d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#gafba2e0674deb5953878d89483cd6323d">More...</a><br /></td></tr>
|
| 120 |
+
<tr class="separator:gafba2e0674deb5953878d89483cd6323d"><td class="memSeparator" colspan="2"> </td></tr>
|
| 121 |
+
<tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 122 |
+
<tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)</td></tr>
|
| 123 |
+
<tr class="memdesc:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">More...</a><br /></td></tr>
|
| 124 |
+
<tr class="separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memSeparator" colspan="2"> </td></tr>
|
| 125 |
+
<tr class="memitem:ga1425c1c3160ec51214b03a0469a3013d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga1425c1c3160ec51214b03a0469a3013d">floatBitsToInt</a> (float const &v)</td></tr>
|
| 126 |
+
<tr class="memdesc:ga1425c1c3160ec51214b03a0469a3013d"><td class="mdescLeft"> </td><td class="mdescRight">Returns a signed integer value representing the encoding of a floating-point value. <a href="a00241.html#ga1425c1c3160ec51214b03a0469a3013d">More...</a><br /></td></tr>
|
| 127 |
+
<tr class="separator:ga1425c1c3160ec51214b03a0469a3013d"><td class="memSeparator" colspan="2"> </td></tr>
|
| 128 |
+
<tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
| 129 |
+
<tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, int, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a> (vec< L, float, Q > const &v)</td></tr>
|
| 130 |
+
<tr class="memdesc:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="mdescLeft"> </td><td class="mdescRight">Returns a signed integer value representing the encoding of a floating-point value. <a href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">More...</a><br /></td></tr>
|
| 131 |
+
<tr class="separator:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memSeparator" colspan="2"> </td></tr>
|
| 132 |
+
<tr class="memitem:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga70e0271c34af52f3100c7960e18c3f2b">floatBitsToUint</a> (float const &v)</td></tr>
|
| 133 |
+
<tr class="memdesc:ga70e0271c34af52f3100c7960e18c3f2b"><td class="mdescLeft"> </td><td class="mdescRight">Returns a unsigned integer value representing the encoding of a floating-point value. <a href="a00241.html#ga70e0271c34af52f3100c7960e18c3f2b">More...</a><br /></td></tr>
|
| 134 |
+
<tr class="separator:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memSeparator" colspan="2"> </td></tr>
|
| 135 |
+
<tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
| 136 |
+
<tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, uint, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a> (vec< L, float, Q > const &v)</td></tr>
|
| 137 |
+
<tr class="memdesc:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="mdescLeft"> </td><td class="mdescRight">Returns a unsigned integer value representing the encoding of a floating-point value. <a href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">More...</a><br /></td></tr>
|
| 138 |
+
<tr class="separator:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memSeparator" colspan="2"> </td></tr>
|
| 139 |
+
<tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 140 |
+
<tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a> (vec< L, T, Q > const &x)</td></tr>
|
| 141 |
+
<tr class="memdesc:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer that is less then or equal to x. <a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">More...</a><br /></td></tr>
|
| 142 |
+
<tr class="separator:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memSeparator" colspan="2"> </td></tr>
|
| 143 |
+
<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 144 |
+
<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a> (genType const &a, genType const &b, genType const &c)</td></tr>
|
| 145 |
+
<tr class="memdesc:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="mdescLeft"> </td><td class="mdescRight">Computes and returns a * b + c. <a href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">More...</a><br /></td></tr>
|
| 146 |
+
<tr class="separator:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memSeparator" colspan="2"> </td></tr>
|
| 147 |
+
<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 148 |
+
<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a> (genType x)</td></tr>
|
| 149 |
+
<tr class="memdesc:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="mdescLeft"> </td><td class="mdescRight">Return x - floor(x). <a href="a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7">More...</a><br /></td></tr>
|
| 150 |
+
<tr class="separator:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memSeparator" colspan="2"> </td></tr>
|
| 151 |
+
<tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 152 |
+
<tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a> (vec< L, T, Q > const &x)</td></tr>
|
| 153 |
+
<tr class="memdesc:ga2df623004f634b440d61e018d62c751b"><td class="mdescLeft"> </td><td class="mdescRight">Return x - floor(x). <a href="a00241.html#ga2df623004f634b440d61e018d62c751b">More...</a><br /></td></tr>
|
| 154 |
+
<tr class="separator:ga2df623004f634b440d61e018d62c751b"><td class="memSeparator" colspan="2"> </td></tr>
|
| 155 |
+
<tr class="memitem:gaddf5ef73283c171730e0bcc11833fa81"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 156 |
+
<tr class="memitem:gaddf5ef73283c171730e0bcc11833fa81"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a> (genType x, int &exp)</td></tr>
|
| 157 |
+
<tr class="memdesc:gaddf5ef73283c171730e0bcc11833fa81"><td class="mdescLeft"> </td><td class="mdescRight">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent) <a href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">More...</a><br /></td></tr>
|
| 158 |
+
<tr class="separator:gaddf5ef73283c171730e0bcc11833fa81"><td class="memSeparator" colspan="2"> </td></tr>
|
| 159 |
+
<tr class="memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">intBitsToFloat</a> (int const &v)</td></tr>
|
| 160 |
+
<tr class="memdesc:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. <a href="a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">More...</a><br /></td></tr>
|
| 161 |
+
<tr class="separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memSeparator" colspan="2"> </td></tr>
|
| 162 |
+
<tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
| 163 |
+
<tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, float, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a> (vec< L, int, Q > const &v)</td></tr>
|
| 164 |
+
<tr class="memdesc:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. <a href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">More...</a><br /></td></tr>
|
| 165 |
+
<tr class="separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memSeparator" colspan="2"> </td></tr>
|
| 166 |
+
<tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 167 |
+
<tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga2885587c23a106301f20443896365b62">isinf</a> (vec< L, T, Q > const &x)</td></tr>
|
| 168 |
+
<tr class="memdesc:ga2885587c23a106301f20443896365b62"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. <a href="a00241.html#ga2885587c23a106301f20443896365b62">More...</a><br /></td></tr>
|
| 169 |
+
<tr class="separator:ga2885587c23a106301f20443896365b62"><td class="memSeparator" colspan="2"> </td></tr>
|
| 170 |
+
<tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 171 |
+
<tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga29ef934c00306490de837b4746b4e14d">isnan</a> (vec< L, T, Q > const &x)</td></tr>
|
| 172 |
+
<tr class="memdesc:ga29ef934c00306490de837b4746b4e14d"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. <a href="a00241.html#ga29ef934c00306490de837b4746b4e14d">More...</a><br /></td></tr>
|
| 173 |
+
<tr class="separator:ga29ef934c00306490de837b4746b4e14d"><td class="memSeparator" colspan="2"> </td></tr>
|
| 174 |
+
<tr class="memitem:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 175 |
+
<tr class="memitem:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a> (genType const &x, int const &exp)</td></tr>
|
| 176 |
+
<tr class="memdesc:gac3010e0a0c35a1b514540f2fb579c58c"><td class="mdescLeft"> </td><td class="mdescRight">Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) <a href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">More...</a><br /></td></tr>
|
| 177 |
+
<tr class="separator:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memSeparator" colspan="2"> </td></tr>
|
| 178 |
+
<tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 179 |
+
<tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gae02d42887fc5570451f880e3c624b9ac">max</a> (genType x, genType y)</td></tr>
|
| 180 |
+
<tr class="memdesc:gae02d42887fc5570451f880e3c624b9ac"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#gae02d42887fc5570451f880e3c624b9ac">More...</a><br /></td></tr>
|
| 181 |
+
<tr class="separator:gae02d42887fc5570451f880e3c624b9ac"><td class="memSeparator" colspan="2"> </td></tr>
|
| 182 |
+
<tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 183 |
+
<tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31">max</a> (vec< L, T, Q > const &x, T y)</td></tr>
|
| 184 |
+
<tr class="memdesc:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31">More...</a><br /></td></tr>
|
| 185 |
+
<tr class="separator:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memSeparator" colspan="2"> </td></tr>
|
| 186 |
+
<tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 187 |
+
<tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
| 188 |
+
<tr class="memdesc:gac1fec0c3303b572a6d4697a637213870"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#gac1fec0c3303b572a6d4697a637213870">More...</a><br /></td></tr>
|
| 189 |
+
<tr class="separator:gac1fec0c3303b572a6d4697a637213870"><td class="memSeparator" colspan="2"> </td></tr>
|
| 190 |
+
<tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 191 |
+
<tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga6cf8098827054a270ee36b18e30d471d">min</a> (genType x, genType y)</td></tr>
|
| 192 |
+
<tr class="memdesc:ga6cf8098827054a270ee36b18e30d471d"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#ga6cf8098827054a270ee36b18e30d471d">More...</a><br /></td></tr>
|
| 193 |
+
<tr class="separator:ga6cf8098827054a270ee36b18e30d471d"><td class="memSeparator" colspan="2"> </td></tr>
|
| 194 |
+
<tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 195 |
+
<tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa7d015eba1f9f48519251f4abe69b14d">min</a> (vec< L, T, Q > const &x, T y)</td></tr>
|
| 196 |
+
<tr class="memdesc:gaa7d015eba1f9f48519251f4abe69b14d"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#gaa7d015eba1f9f48519251f4abe69b14d">More...</a><br /></td></tr>
|
| 197 |
+
<tr class="separator:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memSeparator" colspan="2"> </td></tr>
|
| 198 |
+
<tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 199 |
+
<tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
| 200 |
+
<tr class="memdesc:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">More...</a><br /></td></tr>
|
| 201 |
+
<tr class="separator:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memSeparator" colspan="2"> </td></tr>
|
| 202 |
+
<tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplParams" colspan="2">template<typename genTypeT , typename genTypeU > </td></tr>
|
| 203 |
+
<tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTypeT </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>
|
| 204 |
+
<tr class="memdesc:ga8e93f374aae27d1a88b921860351f8d4"><td class="mdescLeft"> </td><td class="mdescRight">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. <a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">More...</a><br /></td></tr>
|
| 205 |
+
<tr class="separator:ga8e93f374aae27d1a88b921860351f8d4"><td class="memSeparator" colspan="2"> </td></tr>
|
| 206 |
+
<tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 207 |
+
<tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
| 208 |
+
<tr class="memdesc:ga9b197a452cd52db3c5c18bac72bd7798"><td class="mdescLeft"> </td><td class="mdescRight">Modulus. <a href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">More...</a><br /></td></tr>
|
| 209 |
+
<tr class="separator:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memSeparator" colspan="2"> </td></tr>
|
| 210 |
+
<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 211 |
+
<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a> (genType x, genType &i)</td></tr>
|
| 212 |
+
<tr class="memdesc:ga85e33f139b8db1b39b590a5713b9e679"><td class="mdescLeft"> </td><td class="mdescRight">Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). <a href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">More...</a><br /></td></tr>
|
| 213 |
+
<tr class="separator:ga85e33f139b8db1b39b590a5713b9e679"><td class="memSeparator" colspan="2"> </td></tr>
|
| 214 |
+
<tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 215 |
+
<tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">round</a> (vec< L, T, Q > const &x)</td></tr>
|
| 216 |
+
<tr class="memdesc:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x. <a href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">More...</a><br /></td></tr>
|
| 217 |
+
<tr class="separator:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memSeparator" colspan="2"> </td></tr>
|
| 218 |
+
<tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 219 |
+
<tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga76b81785045a057989a84d99aeeb1578">roundEven</a> (vec< L, T, Q > const &x)</td></tr>
|
| 220 |
+
<tr class="memdesc:ga76b81785045a057989a84d99aeeb1578"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x. <a href="a00241.html#ga76b81785045a057989a84d99aeeb1578">More...</a><br /></td></tr>
|
| 221 |
+
<tr class="separator:ga76b81785045a057989a84d99aeeb1578"><td class="memSeparator" colspan="2"> </td></tr>
|
| 222 |
+
<tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 223 |
+
<tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">sign</a> (vec< L, T, Q > const &x)</td></tr>
|
| 224 |
+
<tr class="memdesc:ga1e2e5cfff800056540e32f6c9b604b28"><td class="mdescLeft"> </td><td class="mdescRight">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. <a href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">More...</a><br /></td></tr>
|
| 225 |
+
<tr class="separator:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memSeparator" colspan="2"> </td></tr>
|
| 226 |
+
<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 227 |
+
<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>
|
| 228 |
+
<tr class="memdesc:ga562edf7eca082cc5b7a0aaf180436daf"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1. <a href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">More...</a><br /></td></tr>
|
| 229 |
+
<tr class="separator:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memSeparator" colspan="2"> </td></tr>
|
| 230 |
+
<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 231 |
+
<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga015a1261ff23e12650211aa872863cce">step</a> (genType edge, genType x)</td></tr>
|
| 232 |
+
<tr class="memdesc:ga015a1261ff23e12650211aa872863cce"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. <a href="a00241.html#ga015a1261ff23e12650211aa872863cce">More...</a><br /></td></tr>
|
| 233 |
+
<tr class="separator:ga015a1261ff23e12650211aa872863cce"><td class="memSeparator" colspan="2"> </td></tr>
|
| 234 |
+
<tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 235 |
+
<tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8f9a911a48ef244b51654eaefc81c551">step</a> (T edge, vec< L, T, Q > const &x)</td></tr>
|
| 236 |
+
<tr class="memdesc:ga8f9a911a48ef244b51654eaefc81c551"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0. <a href="a00241.html#ga8f9a911a48ef244b51654eaefc81c551">More...</a><br /></td></tr>
|
| 237 |
+
<tr class="separator:ga8f9a911a48ef244b51654eaefc81c551"><td class="memSeparator" colspan="2"> </td></tr>
|
| 238 |
+
<tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 239 |
+
<tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a> (vec< L, T, Q > const &edge, vec< L, T, Q > const &x)</td></tr>
|
| 240 |
+
<tr class="memdesc:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0. <a href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">More...</a><br /></td></tr>
|
| 241 |
+
<tr class="separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memSeparator" colspan="2"> </td></tr>
|
| 242 |
+
<tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 243 |
+
<tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">trunc</a> (vec< L, T, Q > const &x)</td></tr>
|
| 244 |
+
<tr class="memdesc:gaf9375e3e06173271d49e6ffa3a334259"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. <a href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">More...</a><br /></td></tr>
|
| 245 |
+
<tr class="separator:gaf9375e3e06173271d49e6ffa3a334259"><td class="memSeparator" colspan="2"> </td></tr>
|
| 246 |
+
<tr class="memitem:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#gab2bae0d15dcdca6093f88f76b3975d97">uintBitsToFloat</a> (uint const &v)</td></tr>
|
| 247 |
+
<tr class="memdesc:gab2bae0d15dcdca6093f88f76b3975d97"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. <a href="a00241.html#gab2bae0d15dcdca6093f88f76b3975d97">More...</a><br /></td></tr>
|
| 248 |
+
<tr class="separator:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memSeparator" colspan="2"> </td></tr>
|
| 249 |
+
<tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
| 250 |
+
<tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, float, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a> (vec< L, uint, Q > const &v)</td></tr>
|
| 251 |
+
<tr class="memdesc:ga97f46b5f7b42fe44482e13356eb394ae"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. <a href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">More...</a><br /></td></tr>
|
| 252 |
+
<tr class="separator:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memSeparator" colspan="2"> </td></tr>
|
| 253 |
+
</table>
|
| 254 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
| 255 |
+
<div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
|
| 256 |
+
<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
|
| 257 |
+
|
| 258 |
+
<p>Definition in file <a class="el" href="a00015_source.html">common.hpp</a>.</p>
|
| 259 |
+
</div></div><!-- contents -->
|
| 260 |
+
<!-- start footer part -->
|
| 261 |
+
<hr class="footer"/><address class="footer"><small>
|
| 262 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
| 263 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
| 264 |
+
</a> 1.8.10
|
| 265 |
+
</small></address>
|
| 266 |
+
</body>
|
| 267 |
+
</html>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00015_source.html
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: common.hpp Source File</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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> </ul>
|
| 84 |
+
</div>
|
| 85 |
+
</div><!-- top -->
|
| 86 |
+
<div class="header">
|
| 87 |
+
<div class="headertitle">
|
| 88 |
+
<div class="title">common.hpp</div> </div>
|
| 89 |
+
</div><!--header-->
|
| 90 |
+
<div class="contents">
|
| 91 |
+
<a href="a00015.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
| 92 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
|
| 93 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
|
| 94 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "detail/qualifier.hpp"</span></div>
|
| 95 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "detail/_fixes.hpp"</span></div>
|
| 96 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
|
| 97 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
| 98 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div>
|
| 99 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
|
| 100 |
+
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 101 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a>(genType x);</div>
|
| 102 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
|
| 103 |
+
<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>
|
| 104 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 105 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
|
| 106 |
+
<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, qualifier Q></div>
|
| 107 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">sign</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 108 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
|
| 109 |
+
<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>
|
| 110 |
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 111 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
|
| 112 |
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 113 |
+
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">trunc</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 114 |
+
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
|
| 115 |
+
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 116 |
+
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">round</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 117 |
+
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
|
| 118 |
+
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 119 |
+
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga76b81785045a057989a84d99aeeb1578">roundEven</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 120 |
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
|
| 121 |
+
<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, qualifier Q></div>
|
| 122 |
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">ceil</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 123 |
+
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
|
| 124 |
+
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 125 |
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a>(genType x);</div>
|
| 126 |
+
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
|
| 127 |
+
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 128 |
+
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 129 |
+
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
|
| 130 |
+
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 131 |
+
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(genType x, genType y);</div>
|
| 132 |
+
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
|
| 133 |
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 134 |
+
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(vec<L, T, Q> <span class="keyword">const</span>& x, T y);</div>
|
| 135 |
+
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
|
| 136 |
+
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 137 |
+
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y);</div>
|
| 138 |
+
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
|
| 139 |
+
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 140 |
+
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a>(genType x, genType& i);</div>
|
| 141 |
+
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
|
| 142 |
+
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 143 |
+
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(genType x, genType y);</div>
|
| 144 |
+
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
|
| 145 |
+
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 146 |
+
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(vec<L, T, Q> <span class="keyword">const</span>& x, T y);</div>
|
| 147 |
+
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
|
| 148 |
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 149 |
+
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y);</div>
|
| 150 |
+
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
|
| 151 |
+
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 152 |
+
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(genType x, genType y);</div>
|
| 153 |
+
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
|
| 154 |
+
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 155 |
+
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(vec<L, T, Q> <span class="keyword">const</span>& x, T y);</div>
|
| 156 |
+
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
|
| 157 |
+
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 158 |
+
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y);</div>
|
| 159 |
+
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
|
| 160 |
+
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 161 |
+
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(genType x, genType minVal, genType maxVal);</div>
|
| 162 |
+
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
|
| 163 |
+
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 164 |
+
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(vec<L, T, Q> <span class="keyword">const</span>& x, T minVal, T maxVal);</div>
|
| 165 |
+
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
|
| 166 |
+
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 167 |
+
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& minVal, vec<L, T, Q> <span class="keyword">const</span>& maxVal);</div>
|
| 168 |
+
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
|
| 169 |
+
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genTypeT, <span class="keyword">typename</span> genTypeU></div>
|
| 170 |
+
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  GLM_FUNC_DECL genTypeT <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(genTypeT x, genTypeT y, genTypeU a);</div>
|
| 171 |
+
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
|
| 172 |
+
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 173 |
+
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& a);</div>
|
| 174 |
+
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
|
| 175 |
+
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
| 176 |
+
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y, U a);</div>
|
| 177 |
+
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
|
| 178 |
+
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 179 |
+
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(genType edge, genType x);</div>
|
| 180 |
+
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
|
| 181 |
+
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 182 |
+
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(T edge, vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 183 |
+
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
|
| 184 |
+
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 185 |
+
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(vec<L, T, Q> <span class="keyword">const</span>& edge, vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 186 |
+
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
|
| 187 |
+
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 188 |
+
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(genType edge0, genType edge1, genType x);</div>
|
| 189 |
+
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
|
| 190 |
+
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 191 |
+
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(T edge0, T edge1, vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 192 |
+
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
|
| 193 |
+
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 194 |
+
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(vec<L, T, Q> <span class="keyword">const</span>& edge0, vec<L, T, Q> <span class="keyword">const</span>& edge1, vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 195 |
+
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
|
| 196 |
+
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 197 |
+
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  GLM_FUNC_DECL vec<L, bool, Q> <a class="code" href="a00241.html#ga29ef934c00306490de837b4746b4e14d">isnan</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 198 |
+
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
|
| 199 |
+
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 200 |
+
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  GLM_FUNC_DECL vec<L, bool, Q> <a class="code" href="a00241.html#ga2885587c23a106301f20443896365b62">isinf</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
| 201 |
+
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
|
| 202 |
+
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a>(<span class="keywordtype">float</span> <span class="keyword">const</span>& v);</div>
|
| 203 |
+
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
|
| 204 |
+
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">template</span><length_t L, qualifier Q></div>
|
| 205 |
+
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  GLM_FUNC_DECL vec<L, int, Q> <a class="code" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a>(vec<L, float, Q> <span class="keyword">const</span>& v);</div>
|
| 206 |
+
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
|
| 207 |
+
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  GLM_FUNC_DECL uint <a class="code" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a>(<span class="keywordtype">float</span> <span class="keyword">const</span>& v);</div>
|
| 208 |
+
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div>
|
| 209 |
+
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keyword">template</span><length_t L, qualifier Q></div>
|
| 210 |
+
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  GLM_FUNC_DECL vec<L, uint, Q> <a class="code" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a>(vec<L, float, Q> <span class="keyword">const</span>& v);</div>
|
| 211 |
+
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div>
|
| 212 |
+
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a>(<span class="keywordtype">int</span> <span class="keyword">const</span>& v);</div>
|
| 213 |
+
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div>
|
| 214 |
+
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keyword">template</span><length_t L, qualifier Q></div>
|
| 215 |
+
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  GLM_FUNC_DECL vec<L, float, Q> <a class="code" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a>(vec<L, int, Q> <span class="keyword">const</span>& v);</div>
|
| 216 |
+
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
|
| 217 |
+
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a>(uint <span class="keyword">const</span>& v);</div>
|
| 218 |
+
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
|
| 219 |
+
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keyword">template</span><length_t L, qualifier Q></div>
|
| 220 |
+
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  GLM_FUNC_DECL vec<L, float, Q> <a class="code" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a>(vec<L, uint, Q> <span class="keyword">const</span>& v);</div>
|
| 221 |
+
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
|
| 222 |
+
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 223 |
+
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a>(genType <span class="keyword">const</span>& a, genType <span class="keyword">const</span>& b, genType <span class="keyword">const</span>& c);</div>
|
| 224 |
+
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
|
| 225 |
+
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 226 |
+
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a>(genType x, <span class="keywordtype">int</span>& <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
|
| 227 |
+
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  </div>
|
| 228 |
+
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 229 |
+
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a>(vec<L, T, Q> <span class="keyword">const</span>& v, vec<L, int, Q>& <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
|
| 230 |
+
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div>
|
| 231 |
+
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
| 232 |
+
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a>(genType <span class="keyword">const</span>& x, <span class="keywordtype">int</span> <span class="keyword">const</span>& <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
|
| 233 |
+
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  </div>
|
| 234 |
+
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
| 235 |
+
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a>(vec<L, T, Q> <span class="keyword">const</span>& v, vec<L, int, Q> <span class="keyword">const</span>& <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
|
| 236 |
+
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div>
|
| 237 |
+
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }<span class="comment">//namespace glm</span></div>
|
| 238 |
+
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
|
| 239 |
+
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor">#include "detail/func_common.inl"</span></div>
|
| 240 |
+
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
|
| 241 |
+
<div class="ttc" id="a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d"><div class="ttname"><a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">glm::floor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 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>
|
| 242 |
+
<div class="ttc" id="a00241_html_gad0f444d4b81cc53c3b6edf5aa25078c2"><div class="ttname"><a href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">glm::fma</a></div><div class="ttdeci">GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)</div><div class="ttdoc">Computes and returns a * b + c. </div></div>
|
| 243 |
+
<div class="ttc" id="a00241_html_gaf9375e3e06173271d49e6ffa3a334259"><div class="ttname"><a href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">glm::trunc</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > trunc(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...</div></div>
|
| 244 |
+
<div class="ttc" id="a00241_html_ga9b197a452cd52db3c5c18bac72bd7798"><div class="ttname"><a href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">glm::mod</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > mod(vec< L, T, Q > const &x, vec< L, T, Q > const &y)</div><div class="ttdoc">Modulus. </div></div>
|
| 245 |
+
<div class="ttc" id="a00241_html_gaa0f2f12e9108b09e22a3f0b2008a0b5d"><div class="ttname"><a href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > clamp(vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)</div><div class="ttdoc">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>
|
| 246 |
+
<div class="ttc" id="a00241_html_gafa03aca8c4713e1cc892aa92ca135a7e"><div class="ttname"><a href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">glm::round</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > round(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
|
| 247 |
+
<div class="ttc" id="a00241_html_ga97f46b5f7b42fe44482e13356eb394ae"><div class="ttname"><a href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">glm::uintBitsToFloat</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, float, Q > uintBitsToFloat(vec< L, uint, Q > const &v)</div><div class="ttdoc">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...</div></div>
|
| 248 |
+
<div class="ttc" id="a00241_html_ga1e2e5cfff800056540e32f6c9b604b28"><div class="ttname"><a href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">glm::sign</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > sign(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. </div></div>
|
| 249 |
+
<div class="ttc" id="a00241_html_ga2885587c23a106301f20443896365b62"><div class="ttname"><a href="a00241.html#ga2885587c23a106301f20443896365b62">glm::isinf</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, bool, Q > isinf(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>
|
| 250 |
+
<div class="ttc" id="a00241_html_ga76b81785045a057989a84d99aeeb1578"><div class="ttname"><a href="a00241.html#ga76b81785045a057989a84d99aeeb1578">glm::roundEven</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > roundEven(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
|
| 251 |
+
<div class="ttc" id="a00241_html_ga85e33f139b8db1b39b590a5713b9e679"><div class="ttname"><a href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">glm::modf</a></div><div class="ttdeci">GLM_FUNC_DECL genType modf(genType x, genType &i)</div><div class="ttdoc">Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...</div></div>
|
| 252 |
+
<div class="ttc" id="a00241_html_gafb9d2a645a23aca12d4d6de0104b7657"><div class="ttname"><a href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">glm::ceil</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > ceil(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is greater than or equal to x. </div></div>
|
| 253 |
+
<div class="ttc" id="a00241_html_ga31f49ef9e7d1beb003160c5e009b0c48"><div class="ttname"><a href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">glm::min</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min(vec< L, T, Q > const &x, vec< L, T, Q > const &y)</div><div class="ttdoc">Returns y if y < x; otherwise, it returns x. </div></div>
|
| 254 |
+
<div class="ttc" id="a00241_html_ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><div class="ttname"><a href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">glm::intBitsToFloat</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, float, Q > intBitsToFloat(vec< L, int, Q > const &v)</div><div class="ttdoc">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...</div></div>
|
| 255 |
+
<div class="ttc" id="a00241_html_ga29ef934c00306490de837b4746b4e14d"><div class="ttname"><a href="a00241.html#ga29ef934c00306490de837b4746b4e14d">glm::isnan</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, bool, Q > isnan(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of...</div></div>
|
| 256 |
+
<div class="ttc" id="a00242_html_ga071566cadc7505455e611f2a0353f4d4"><div class="ttname"><a href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">glm::exp</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > exp(vec< L, T, Q > const &v)</div><div class="ttdoc">Returns the natural exponentiation of x, i.e., e^x. </div></div>
|
| 257 |
+
<div class="ttc" id="a00241_html_ga49418ba4c8a60fbbb5d57b705f3e26db"><div class="ttname"><a href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">glm::floatBitsToUint</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, uint, Q > floatBitsToUint(vec< L, float, Q > const &v)</div><div class="ttdoc">Returns a unsigned integer value representing the encoding of a floating-point value. </div></div>
|
| 258 |
+
<div class="ttc" id="a00241_html_ga562edf7eca082cc5b7a0aaf180436daf"><div class="ttname"><a href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">glm::smoothstep</a></div><div class="ttdeci">GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)</div><div class="ttdoc">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...</div></div>
|
| 259 |
+
<div class="ttc" id="a00241_html_ga81d3abddd0ef0c8de579bc541ecadab6"><div class="ttname"><a href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">glm::abs</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > abs(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns x if x >= 0; otherwise, it returns -x. </div></div>
|
| 260 |
+
<div class="ttc" id="a00241_html_gac1fec0c3303b572a6d4697a637213870"><div class="ttname"><a href="a00241.html#gac1fec0c3303b572a6d4697a637213870">glm::max</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max(vec< L, T, Q > const &x, vec< L, T, Q > const &y)</div><div class="ttdoc">Returns y if x < y; otherwise, it returns x. </div></div>
|
| 261 |
+
<div class="ttc" id="a00241_html_gaf4a5fc81619c7d3e8b22f53d4a098c7f"><div class="ttname"><a href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">glm::step</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > step(vec< L, T, Q > const &edge, vec< L, T, Q > const &x)</div><div class="ttdoc">Returns 0.0 if x < edge, otherwise it returns 1.0. </div></div>
|
| 262 |
+
<div class="ttc" id="a00241_html_ga2df623004f634b440d61e018d62c751b"><div class="ttname"><a href="a00241.html#ga2df623004f634b440d61e018d62c751b">glm::fract</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > fract(vec< L, T, Q > const &x)</div><div class="ttdoc">Return x - floor(x). </div></div>
|
| 263 |
+
<div class="ttc" id="a00241_html_gac3010e0a0c35a1b514540f2fb579c58c"><div class="ttname"><a href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">glm::ldexp</a></div><div class="ttdeci">GLM_FUNC_DECL genType ldexp(genType const &x, int const &exp)</div><div class="ttdoc">Builds a floating-point number from x and the corresponding integral exponent of two in exp...</div></div>
|
| 264 |
+
<div class="ttc" id="a00241_html_ga99f7d62f78ac5ea3b49bae715c9488ed"><div class="ttname"><a href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">glm::floatBitsToInt</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, int, Q > floatBitsToInt(vec< L, float, Q > const &v)</div><div class="ttdoc">Returns a signed integer value representing the encoding of a floating-point value. </div></div>
|
| 265 |
+
<div class="ttc" id="a00241_html_ga8e93f374aae27d1a88b921860351f8d4"><div class="ttname"><a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)</div><div class="ttdoc">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>
|
| 266 |
+
<div class="ttc" id="a00241_html_gaddf5ef73283c171730e0bcc11833fa81"><div class="ttname"><a href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">glm::frexp</a></div><div class="ttdeci">GLM_FUNC_DECL genType frexp(genType x, int &exp)</div><div class="ttdoc">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...</div></div>
|
| 267 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
| 268 |
+
</div><!-- fragment --></div><!-- contents -->
|
| 269 |
+
<!-- start footer part -->
|
| 270 |
+
<hr class="footer"/><address class="footer"><small>
|
| 271 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
| 272 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
| 273 |
+
</a> 1.8.10
|
| 274 |
+
</small></address>
|
| 275 |
+
</body>
|
| 276 |
+
</html>
|
3dgeer/submodules/geer-rasterizer/third_party/glm/doc/api/a00016.html
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
| 3 |
+
<head>
|
| 4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
| 6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
| 7 |
+
<title>0.9.9 API documentation: common.hpp File Reference</title>
|
| 8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
| 9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
| 10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
| 11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
| 12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
| 13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
| 14 |
+
<script type="text/javascript">
|
| 15 |
+
$(document).ready(function() { init_search(); });
|
| 16 |
+
</script>
|
| 17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
| 18 |
+
</head>
|
| 19 |
+
<body>
|
| 20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
| 21 |
+
<div id="titlearea">
|
| 22 |
+
<table cellspacing="0" cellpadding="0">
|
| 23 |
+
<tbody>
|
| 24 |
+
<tr style="height: 56px;">
|
| 25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
| 26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
| 27 |
+
<div id="projectname">0.9.9 API documentation
|
| 28 |
+
</div>
|
| 29 |
+
</td>
|
| 30 |
+
</tr>
|
| 31 |
+
</tbody>
|
| 32 |
+
</table>
|
| 33 |
+
</div>
|
| 34 |
+
<!-- end header part -->
|
| 35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
| 38 |
+
</script>
|
| 39 |
+
<div id="navrow1" class="tabs">
|
| 40 |
+
<ul class="tablist">
|
| 41 |
+
<li><a href="index.html"><span>Main 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">gtx/common.hpp File Reference</div> </div>
|
| 91 |
+
</div><!--header-->
|
| 92 |
+
<div class="contents">
|
| 93 |
+
|
| 94 |
+
<p><a class="el" href="a00314.html">GLM_GTX_common</a>
|
| 95 |
+
<a href="#details">More...</a></p>
|
| 96 |
+
|
| 97 |
+
<p><a href="a00016_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:gab7d89c14c48ad01f720fb5daf8813161"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 102 |
+
<tr class="memitem:gab7d89c14c48ad01f720fb5daf8813161"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00314.html#gab7d89c14c48ad01f720fb5daf8813161">closeBounded</a> (vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)</td></tr>
|
| 103 |
+
<tr class="memdesc:gab7d89c14c48ad01f720fb5daf8813161"><td class="mdescLeft"> </td><td class="mdescRight">Returns whether vector components values are within an interval. <a href="a00314.html#gab7d89c14c48ad01f720fb5daf8813161">More...</a><br /></td></tr>
|
| 104 |
+
<tr class="separator:gab7d89c14c48ad01f720fb5daf8813161"><td class="memSeparator" colspan="2"> </td></tr>
|
| 105 |
+
<tr class="memitem:gae5e80425df9833164ad469e83b475fb4"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 106 |
+
<tr class="memitem:gae5e80425df9833164ad469e83b475fb4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00314.html#gae5e80425df9833164ad469e83b475fb4">fmod</a> (vec< L, T, Q > const &v)</td></tr>
|
| 107 |
+
<tr class="memdesc:gae5e80425df9833164ad469e83b475fb4"><td class="mdescLeft"> </td><td class="mdescRight">Similar to 'mod' but with a different rounding and integer support. <a href="a00314.html#gae5e80425df9833164ad469e83b475fb4">More...</a><br /></td></tr>
|
| 108 |
+
<tr class="separator:gae5e80425df9833164ad469e83b475fb4"><td class="memSeparator" colspan="2"> </td></tr>
|
| 109 |
+
<tr class="memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
| 110 |
+
<tr class="memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::bool_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91">isdenormal</a> (genType const &x)</td></tr>
|
| 111 |
+
<tr class="memdesc:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. <a href="a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91">More...</a><br /></td></tr>
|
| 112 |
+
<tr class="separator:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memSeparator" colspan="2"> </td></tr>
|
| 113 |
+
<tr class="memitem:gafd303042ba2ba695bf53b2315f53f93f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
| 114 |
+
<tr class="memitem:gafd303042ba2ba695bf53b2315f53f93f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00314.html#gafd303042ba2ba695bf53b2315f53f93f">openBounded</a> (vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)</td></tr>
|
| 115 |
+
<tr class="memdesc:gafd303042ba2ba695bf53b2315f53f93f"><td class="mdescLeft"> </td><td class="mdescRight">Returns whether vector components values are within an interval. <a href="a00314.html#gafd303042ba2ba695bf53b2315f53f93f">More...</a><br /></td></tr>
|
| 116 |
+
<tr class="separator:gafd303042ba2ba695bf53b2315f53f93f"><td class="memSeparator" colspan="2"> </td></tr>
|
| 117 |
+
</table>
|
| 118 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
| 119 |
+
<div class="textblock"><p><a class="el" href="a00314.html">GLM_GTX_common</a> </p>
|
| 120 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
|
| 121 |
+
|
| 122 |
+
<p>Definition in file <a class="el" href="a00016_source.html">gtx/common.hpp</a>.</p>
|
| 123 |
+
</div></div><!-- contents -->
|
| 124 |
+
<!-- start footer part -->
|
| 125 |
+
<hr class="footer"/><address class="footer"><small>
|
| 126 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
| 127 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
| 128 |
+
</a> 1.8.10
|
| 129 |
+
</small></address>
|
| 130 |
+
</body>
|
| 131 |
+
</html>
|